2016-03-06 126 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,同時呼應相同的文本(這意味着你可以做其他的東西在那裏,比如調用一個函數)。

相關問題