插入模式下的退格键不会删除字符

插入模式下的退格键不会删除字符

我是新来的,其实我从今天开始学习vi,我就被困在了退格键钥匙。实际上,当我第一次在 Ubuntu 12.04 上启动 vi 时,我的退格键工作正常,但此后它开始表现奇怪。每当我在插入模式下按退格键时,它只会向左移动一个位置,而不是删除字符。如何恢复默认的退格功能?请注意,我不想安装 vim 或设置 nocompatibility。

答案1

  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)或 eol 中的文本或 中的缩进上退格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 上通常会使用此设置安装一个系统范围的配置文件。

您可以通过 获取当前设置:set bs?

答案2

如果用户主目录中尚不存在,则创建一个名为 .vimrc 的新文件。这里我们将使用 vi 同时创建和编辑

sudo vi ~/.vimrc

添加以下命令,其中包括关闭兼容模式和退格键擦除功能:

set nocp
set backspace=indent,eol,start

使用保存并退出文件

:wq

关闭兼容模式允许使用我们老 vi 用户习惯的箭头键。

由于我们在创建文件时使用了 sudo,因此文件的所有权可能是 root。您可以将文件chown 给用户。

就我而言,这是针对树莓派的,因此用户和组是 pi:

chown pi:pi ~/.vimrc

现在再次启动 vi 并享受吧!

答案3

有时该vi命令是 的别名vim,并且在调用时vi会启用其 vi 模式。

即使在传统模式下,退格键也会删除该字符,但不会立即将其显示为已删除。 (按 ESC 键后,字符消失。)

我猜您必须在使用vi具有所描述的行为的选项或使用vim能够按照您期望的方式执行此操作的选项之间进行选择。

答案4

只需放在你的~/.zshrc

bindkey "^?" backward-delete-char

相关内容