9

我正在设置我的 vimrc 文件。我理解添加set backspace=indent,eol,start允许退格在插入模式下表现“正常”(删除缩进,换行符,预先存在的字符),但我很困惑是否需要将此行添加到我的文件中或者它是否是默认行为。

我试过在没有那行的情况下运行 Vim,即使没有 vimrc 文件,退格仍然正常工作。我应该提到我在 MacBook 上,并且密钥实际上被标记为“删除”,但我假设这无关紧要。

4

2 回答 2

13

通常,在 Mac 键盘上将其称为“删除”并不重要。从技术上讲,Apple 通过调用该键“向后删除”来解决这个问题。而我们传统上认为的删除键,苹果称之为“Forward Delete”。要获得“转发删除”行为,您必须按fn+ delete

现在,回到真正的问题,vim... OS X 中退格的默认设置是这样的(/usr/share/vim/vimrc):

set backspace=2 " 更强大的退格

如果您想要您在问题中讨论的行为,您的自定义 vimrc 应该覆盖它。


还有两个其他因素可能会导致 vim 中退格的奇怪行为。

  1. 当您按下此键时,可以将终端软件配置为发送 Delete 或 Backspace。(此选项通常称为“发送 ^H on ...”)

  2. vim 对控制字符(例如退格/删除)的处理因您的终端字符串而异,我发现xterm-color通常在 OS X 的终端模拟器中效果最好。


我在 OS X 中的终端设置:

将终端声明为:xterm-color

[ ] 删除发送 Ctrl-H (未选中)

于 2013-09-13T03:35:13.187 回答
9

vi 兼容的退格可以设置为

set backspace=

这将关闭以下内容。

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.

所以按退格键只会删除在当前插入模式和当前行中插入的内容。这使得在插入模式下删除非常困难。

使用默认退格选项也会将旧字符留在屏幕上,并且在您退出正常模式之前它们不会消失。

正如@Andon 所说,尽管它正在被您的系统vimrc 覆盖。所以你应该把这条线放在你的vimrc中,以防你把它移到另一个没有相同系统vimrc的系统上。

您可以通过运行在没有 vimrc 的情况下测试 vim,vim -u NONE并将使用默认的退格设置运行。

于 2013-09-13T03:43:40.647 回答