3194 | " sticky shift
3195 | " http://vim-jp.org/vim-users-jp/2009/08/09/Hack-54.html
3196 |
3197 | function! s:sticky_func()
3198 | let l:sticky_table = {
3199 | \',' : '<', '.' : '>', '/' : '?',
3200 | \'1' : '!', '2' : '@', '3' : '#', '4' : '$', '5' : '%',
3201 | \'6' : '^', '7' : '&', '8' : '*', '9' : '(', '0' : ')', '-' : '_', '=' : '+',
3202 | \';' : ':', '[' : '{', ']' : '}', '`' : '~', "'" : "\"", '\' : '|',
3203 | \}
3204 | let l:special_table = {
3205 | \"\<ESC>" : "\<ESC>", "\<Space>" : ';', "\<CR>" : ";\<CR>"
3206 | \}
3207 |
3208 | let l:key = getchar()
3209 | if nr2char(l:key) =~ '\l'
3210 | return toupper(nr2char(l:key))
3211 | elseif has_key(l:sticky_table, nr2char(l:key))
3212 | return l:sticky_table[nr2char(l:key)]
3213 | elseif has_key(l:special_table, nr2char(l:key))
3214 | return l:special_table[nr2char(l:key)]
3215 | else
3216 | return ''
3217 | endif
3218 | endfunction