Vi

插入模式下的退格鍵不刪除字元

  • April 20, 2020

我是vi新手,實際上我從今天開始學習 vi 並且我陷入了退格鍵的行為。實際上,當我第一次在我的 Ubuntu 12.04 上啟動 vi 時,我的退格鍵正常工作,但之後它開始出現奇怪的行為。每當我在插入模式下按退格鍵時,它只會向左移動一個位置,而不是擦除字元。如何恢復預設的退格功能?請注意,我不想安裝 vim 或設置 nocompatibilty。

有時該vi命令是一個別名vim,當呼叫 as 時vi啟用它的 vi 模式。

即使在傳統模式下,退格鍵也會刪除字元,但不會立即將其顯示為已刪除。(按 ESC 後字元消失了。)

猜猜您必須在使用vi所描述的行為附帶的或使用vim能夠按照您期望的方式進行操作之間進行選擇。

  1. 檢查您是否實際使用普通vivia

$ vi --version | head -n 1

這在我的機器上提供(Debian 7)

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Feb 10 2013 02:27:59)

可以使 vim 表現得更像 vi。這可以通過給出命令vi而不是從命令行來完成vim,其中vi只有一個符號連結到vim,在這種情況下,vim 在 vi​​ 模式下打開。您可以使用:set compatible?. 2. 如上一個答案所述,退格的效果只有在啟用insert mode時才可見。set compatible

注意:在 vi 兼容模式下,您不能在先前輸入(在輸入之前insert mode)的文本上退格,或者在insert mode. 看 :help 'bs'

   'backspace' 'bs'        string  (default "")
                           global
                           {not in Vi}
   Influences the working of <BS>, <Del>, CTRL-W and CTRL-U in Insert
   mode.  This is a list of items, separated by commas.  Each item allows
   a way to backspace over something:
   value   effect
   indent  allow backspacing over autoindent
   eol     allow backspacing over line breaks (join lines)
   start   allow backspacing over the start of insert; CTRL-W and CTRL-U
           stop once at the start of insert.

   When the value is empty, Vi compatible backspacing is used.
   For backwards compatibility with version 5.4 and earlier:
   value   effect
     0     same as ":set backspace=" (Vi compatible)
     1     same as ":set backspace=indent,eol"
     2     same as ":set backspace=indent,eol,start"

嘗試不同的設置以了解它們的含義:在插入模式下輸入字元/換行符和縮進,退出並重新進入插入模式,然後嘗試退格。

不熟悉 vi 行為且不堅持使用普通 vi(反正不推薦)的使用者應該:set backspace=indent,eol,start. Debian 上的 Afaik 通常會使用此設置安裝一個系統範圍的配置文件。

您可以通過 獲取目前設置:set bs?

引用自:https://unix.stackexchange.com/questions/76107