我想将任何键映射到自定义函数调用。该功能将根据按下的特定键或最后一个键序列确定要执行的操作。
是否有办法映射关键范围(例如,"任何关键字"或" a-z0-9")?
答案 0 :(得分:2)
您无法通过单一映射执行此操作。你能做的最好的是一个循环和一堆映射。例如,重新映射所有正常模式小写字符:
for c in range(char2nr('a'), char2nr('z'))
execute 'nnoremap ' . nr2char(c) . ' :echo " Pressed: ' . nr2char(c) . '"<CR>'
endfor
如果您需要[a-z0-9]
,则需要使用两次range()
来获取正确的密钥代码,因为数字和小写字母的密钥代码不会排成一行(请参阅{ {3}}):
for c in range(char2nr('0'), char2nr('9')) + range(char2nr('a'), char2nr('z'))
execute 'nnoremap ' . nr2char(c) . ' :echo " Pressed: ' . nr2char(c) . '"<CR>'
endfor
答案 1 :(得分:2)
如果要对INSERT模式下单独键入的字符执行操作,可以使用InsertCharPre
事件。例如:
autocmd InsertCharPre * call FilterChar()
function! FilterChar()
if (v:char == 'a')
let v:char = 'ouch'
echo v:char
endif
endfunction
这通过动态替换a
来颠覆插入ouch
,同时也回显相同的文本(这意味着你可以在那里做其他事情,比如调用函数)。