為什麼vimrc設置inoremap <c-h> <left>無效?
inoremap &
inoremap && & inoremap & & 上面3個都正常,為何inoremap & & 無效,效果為刪除
很簡單,因為你的終端軟體(Xshell, SecureCRT)有些老,默認配置是按下&
發送的是:^H (ASCII 碼 0x08),而 ^H在你的 Vim 里被你 inoremap 成 &
早在 VT100終端時代,^H(ASCII碼 0x08)表示&。過去 0x7f是留給 DELETE鍵使用的。而到了 VT220時代,DELETE已經變為 ^[[3~ (ASCII 碼 0x1b, 0x5b, 0x33, 0x7e 共4個位元組),而 ^? 的 0x7f 換給了我們的&
你需要做的就是改一下終端默認配置而已,大部分不那麼陳舊的終端軟體,如今都是默認VT220的標準,比如 Xshell4 Build 0142及以後的 Xshell5,Putty,Mac下面的 Terminal.app, iTerm2,Ubuntu下面的 gnome-terminal,他們都是把 &
$ stty -a
現在所有 Linux伺服器的 erase (bs)基本都是 ^? 了(如果鏈接到非 Linux老操作系統 erase不是這個的話,需要改一下,可以在系統層改,也可以vim裡面 set t_kb=...),Vim裡面也是認可 ^?的,可老舊的終端軟體卻默認發送 ^H,不過好在他們都支持修改:
Xshell 老版本的修改方法:把&SecureCRT 6 的設置方法:Backspace sends delete
Putty好像是默認 ^?的,不過你需要確認一下:Mac 下 Terminal.app 默認是發送 ^? 的,你可以確認一下這勾沒打(mac下bs叫做delete)noremap &
noremap &
noremap &
noremap &
inoremap &
inoremap &
inoremap &
inoremap &
cnoremap &
cnoremap &
cnoremap &
cnoremap &
其實這樣映射是有好處的,有時候就想在插入模式下移動一小下,真沒必要 &
可能你會問,NORMAL下面的 &
:help index
上面這條命令會列出 Vim裡面所有默認按鍵的含義,平時推薦多看看:
CTRL-H 同 &
CTRL-J 同回車(有兩個碼 0x0d 或 0x0a),C-J是0x0d,硬回車是0x0a,沒人按這個,覆蓋。CTRL-K 輸入 digraph,比如可以用來輸入歐洲文字,不需要,實在需要可以把這個功能挪給 INSERT模式下的 CTRL-B (空閑),或者 &一樣功能,我們都是直接用 & 沒人CTRL-H的,直接覆蓋掉 & ,完全可以覆蓋。CTRL-L 重繪,很少用,自己可以把他挪到 & r 之類的鍵去多乾淨,覆蓋。
好了,看看上面這四個鍵基本都是些無關痛癢的功能,完全可以覆蓋之。
當然,對於需要用 &inoremap &
好了,因為本來 &
--
相關閱讀:Skywind Inside " Vim 中正確使用 Alt映射--謝邀;
問題無法重現,懷疑是某插件或設定項導致。您可以試試關掉所有插件再 map,是可以的:
$ vim -u NONE&為了定位到衝突的位置,set vbs=1 之後,:imap &
我大概兩年多前,遇到了同樣的問題,然後一直沒解決,也就放棄了,後來在修改一個插件的時候,意外發現插件裡面把C-H映射成刪除了,所以注釋之,就改好了。這個插件是autocomplete,代碼文件位於autoloadacp.vim,查找C-h可以看到有做這個映射。
推薦閱讀:
※vim顯示^@是什麼意思啊?
※VIM如何永久性顯示行號?
※Vim 和 Emacs 都用過兩年以上的人,說說它們使用起來感覺最大的區別是什麼?
※你用vim還是xcode寫iPhone程序代碼?