我希望能够将任何键映射到自定义函数调用。该函数将根据按下的特定键或最后一个键序列来确定要执行的操作。
是否有一种方法可以映射键范围(例如,“任意键”或“a-z0-9”)?
是否有一种方法可以映射键范围(例如,“任意键”或“a-z0-9”)?
使用单个映射无法完成此操作。最好的方法是使用循环和一系列的映射。例如,将所有普通模式小写字符重新映射:
for c in range(char2nr('a'), char2nr('z'))
execute 'nnoremap ' . nr2char(c) . ' :echo " Pressed: ' . nr2char(c) . '"<CR>'
endfor
[a-z0-9]
,您需要使用两个range()
调用以获取正确的键代码,因为数字和小写字母的键代码不对齐(请参见ASCII表)。for c in range(char2nr('0'), char2nr('9')) + range(char2nr('a'), char2nr('z'))
execute 'nnoremap ' . nr2char(c) . ' :echo " Pressed: ' . nr2char(c) . '"<CR>'
endfor
如果您想在INSERT模式下逐个处理键入的字符,可以使用InsertCharPre
事件。例如:
autocmd InsertCharPre * call FilterChar()
function! FilterChar()
if (v:char == 'a')
let v:char = 'ouch'
echo v:char
endif
endfunction
a
为ouch
来使其失效,同时也会回显相同的文本(这意味着您可以在此处执行其他操作,例如调用函数)。请保留HTML标记。