2016-03-06 84 views
2

我想将任何键映射到自定义函数调用。该功能将根据按下的特定按键或最后一个按键顺序确定要执行的操作。有没有办法在VIM中映射关键范围?

有没有办法映射键范围(例如“任意键”或“a-z0-9”)?

回答

2

你不能用一个映射来做到这一点。你能做的最好的是一个循环和一堆映射。例如,要重新映射一切正常模式小写字母:

for c in range(char2nr('a'), char2nr('z')) 
    execute 'nnoremap ' . nr2char(c) . ' :echo " Pressed: ' . nr2char(c) . '"<CR>' 
endfor 

如果你想[a-z0-9]你需要使用两个range()调用得到正确的键码,因为对数字和小写字母的键码也不行(见的ASCII table):

for c in range(char2nr('0'), char2nr('9')) + range(char2nr('a'), char2nr('z')) 
    execute 'nnoremap ' . nr2char(c) . ' :echo " Pressed: ' . nr2char(c) . '"<CR>' 
endfor 
1

如果要作用于插入模式分别键入的字符,你可以使用InsertCharPre事件。例如:

autocmd InsertCharPre * call FilterChar() 

function! FilterChar() 
    if (v:char == 'a') 
     let v:char = 'ouch' 
     echo v:char 
    endif 
endfunction 

这颠覆与ouch替换它,在飞行中插入a,同时呼应相同的文本(这意味着你可以做其他的东西在那里,比如调用一个函数)。

相关问题