有没有办法在VIM中映射关键范围?

时间:2016-03-06 10:06:42

标签: vim

我想将任何键映射到自定义函数调用。该功能将根据按下的特定键或最后一个键序列确定要执行的操作。

是否有办法映射关键范围(例如,"任何关键字"或" a-z0-9")?

2 个答案:

答案 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,同时也回显相同的文本(这意味着你可以在那里做其他事情,比如调用函数)。