Down with Caps Lock!

The Caps Lock key does me no good at all, but I use Esc constantly as a vim user. So, I set about making the Caps Lock key a second Esc.

On Linux, I used the xmodmap command (because I spend all my time in X – the console is not necessary) in my .xinitrc file like so:

xmodmap -e "remove lock = Caps_Lock"
xmodmap -e "keycode 66 = Escape"

Because I am shackled to a Windows box day after day, I also wanted to make this work in that environment, and luckily, I can. It just took a brave bit of registry editing, like so:

REGEDIT4
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,01,00,3a,00,00,00,00,00

It makes a huge difference to not have to reach for the Esc key all the time, but it makes it so easy that I keep shifting into command mode while typing in Word. A small price, especially since I realize I’m happiest writing in vim anyway.

vimrc

" Set settings
set autoindent
set title
"set notitle
set ruler
set nocompatible
set showcmd
set ts=2
set shiftwidth=2
set expandtab
set shiftround
set smarttab
set tw=72
set backspace=indent,eol,start
set incsearch
set showmatch
set pastetoggle=<F11>
filetype plugin on
syntax on
colors ron
let mapleader=","

" Remember where I last edited a file
set viminfo='10,"100,:20,%,n~/.viminfo
    au BufReadPost * if line("'"") > 0|if line("'"") <= line("$")|exe("norm '"")|else|exe "norm $"|endif|endif

if &term =~ "xterm-debian" || &term =~ "xterm-xfree86" || &term =~ "Eterm"
  set t_Co=16
  set t_Sf=^[[3%dm
  set t_Sb=^[[4%dm
endif
" Settings set

" Map mappings
:inoremap ( ()<ESC>i
:inoremap [ []<ESC>i
:inoremap " ""<ESC>i
:inoremap { {}<ESC>i
:inoremap < <><ESC>i

"map W :!aspell -c -x % " old - vim7 has spellcheck now
map F gqap

" http://vim.sourceforge.net/tips/tip.php?tip_id=465
" make an element out of anything you type with a CR in the middle
inoremap ,,, <esc>diwi<<esc>pa><cr></<esc>pa><esc>kA

" Fix common typos
iab teh the
iab hte the
iab adn and
iab nad and
iab taht that
iab htat that
iab fo of
iab ot to
iab wiht with

set pastetoggle=<F10>

" SmartTab wrapper
function! SmartTab()
  let col = col('.') - 1
  if !col || getline('.')[col - 1] !~ 'k'
    return "<tab>"
  else
    return "<c-p>"
  endif
endfunction

" turn on SmartTabs
inoremap <tab> <c-r>=SmartTab()<cr>

" Turn on the spellcheck
setlocal spell spelllang=en_us
set spellfile=~/.vimspell.utf8.add

" Mappings mapped

" Language-specific skeleton files
" Perl
autocmd BufNewFile *.pl 0r ~/.vim/skel/skel.pl
" HTML
autocmd BufNewFile *.html 0r ~/.vim/skel/skel.html
" Python
autocmd BufNewFile *.py 0r ~/.vim/skel/skel.py

Seven Habits of Effective Text Editing

Like so many of the tips and tricks and hither-to unknown commands that I find in vim, I wish I have known about this years ago. There are a ton of little tricks in this short piece that are hugely useful.

One trick that I think is just the bee’s knees is *. If you are on a word in command mode, hit * and you will search for that word. Even better though, is the gd trick. When the cursor is on a variable name, typing gd will take you to the declaration of that variable.

The last thing that I think is awesome is "repeat the last change". If I am doing something repetitive, like creating an associative array of static values, I can type the first declaration and then start hitting . in command mode until I have enough declarations for the whole array. Very sweet.