Mac的VIM中delete鍵失效的原因和解決方案 • cenalulu's Tech Blog
阿新 • • 發佈:2018-12-23
本文介紹敘述Mac上vim中delete鍵失效的原因和解決方案
閒扯:在Mac的鍵盤上實際是沒有backspace
這個鍵的。其實Mac的delete
就是Windows的backspace
,實現的都是向左刪除的功能。Mac上如果要實現向右刪除的功能需要使用⌘+delete
組合鍵來使用。
原因
網上搜到了很多答案但是現象和解決方案都不同,例如:
博主這裡遇到的是第三種情況。每次從normal模式再次進入insert模式後,delete就再也無法向左刪除。取而代之的是Mac那蛋疼的duang,duang,duang警告聲。如果你是伸手黨,只想知道怎麼解決的話,那麼通關密碼是在~/.vimrc
set backspace=2
。恭喜!你的問題就此解決。(如果問題還在,建議仔細將自己delete鍵行為和上述三種情況做比對,點選連結對症下藥)
博主是個較真且喜歡知道為什麼的人。如果你也想知道這個惱人的duang,duang,duang到底是什麼原因產生的話,那麼讓我們往下看。
出現這個問題,基本是因為你的VIM使用了compatible
模式,或者把backspace
變數設定為空了。好奇的讀者一定會問,這兩個配置又代表了什麼意思?其實compatible模式是VIM為了相容vi而出現的配置,它的作用是使VIM的操作行為和規範和vi一致,而這種模式下backspace配置是空的。即意味著backspace無法刪除indent
end of line
,start
這三種字元。如果你出現了和博主一樣的情況,不妨在解決問題前先在VIM中用set backspace?
命令檢視下自己當前的刪除模式。你會看到如下的情況:
效果就相當於delete只能刪除本次insert模式中輸入的字元。那麼為什麼backspace=2
又能解決問題呢?其實這個命令是set backspace=indent,eol,start
的簡化寫法,也就相當於把delete
鍵配置成增強模式。具體數值和對應增強模式的對應關係見 vim官方文件,簡單摘錄如下:
- 0 same as “:set backspace=” (Vi compatible)
- 1 same as “:set backspace=indent,eol”
- 2 same as “:set backspace=indent,eol,start”