1. 程式人生 > >Mac的VIM中delete鍵失效的原因和解決方案 • cenalulu's Tech Blog

Mac的VIM中delete鍵失效的原因和解決方案 • cenalulu's Tech Blog

本文介紹敘述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 linestart這三種字元。如果你出現了和博主一樣的情況,不妨在解決問題前先在VIM中用set backspace?命令檢視下自己當前的刪除模式。你會看到如下的情況: cmd result

效果就相當於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”

Reference