在VIM中是否有一种映射键范围的方法?

3
我希望能够将任何键映射到自定义函数调用。该函数将根据按下的特定键或最后一个键序列来确定要执行的操作。
是否有一种方法可以映射键范围(例如,“任意键”或“a-z0-9”)?
2个回答

3

使用单个映射无法完成此操作。最好的方法是使用循环和一系列的映射。例如,将所有普通模式小写字符重新映射:

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

3

如果您想在INSERT模式下逐个处理键入的字符,可以使用InsertCharPre事件。例如:

autocmd InsertCharPre * call FilterChar()

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

这将通过实时替换插入的aouch来使其失效,同时也会回显相同的文本(这意味着您可以在此处执行其他操作,例如调用函数)。请保留HTML标记。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接