Hack #54: VimでSticky Shiftを実現する
Posted at 2009/08/09ツイート
Vimを使いこなすためには、自分でキーバインドを変更するのが第一歩です。ここではキーバインドの応用として、Sticky ShiftをVim上で再現する方法について考えます。
Sticky Shiftとは
Sticky Shiftの設定法
inoremap <expr> ; <SID>sticky_func()
cnoremap <expr> ; <SID>sticky_func()
snoremap <expr> ; <SID>sticky_func()
function! s:sticky_func()
let l:sticky_table = {
\',' : '<', '.' : '>', '/' : '?',
\'1' : '!', '2' : '@', '3' : '#', '4' : '$', '5' : '%',
\'6' : '^', '7' : '&', '8' : '*', '9' : '(', '0' : ')', '-' : '_', '=' : '+',
\';' : ':', '[' : '{', ']' : '}', '`' : '~', "'" : "\"", '\' : '|',
\}
let l:special_table = {
\"\<ESC>" : "\<ESC>", "\<Space>" : ';', "\<CR>" : ";\<CR>"
\}
let l:key = getchar()
if nr2char(l:key) =~ '\l'
return toupper(nr2char(l:key))
elseif has_key(l:sticky_table, nr2char(l:key))
return l:sticky_table[nr2char(l:key)]
elseif has_key(l:special_table, nr2char(l:key))
return l:special_table[nr2char(l:key)]
else
return ''
endif
endfunction
もどる
blog comments powered by Disqus