我是vi 的新手,实际上我从今天开始学习 vi 并且我已经陷入了退格键的行为。实际上,当我第一次在 Ubuntu 12.04 上启动 vi 时,我的退格键正常工作,但在那之后它开始出现奇怪的行为。每当我在插入模式下按退格键时,它只会向左移动一个位置而不是擦除字符。我怎样才能恢复默认的退格功能?请注意,我不想安装 vim 或设置不兼容。
Hot*_*hke 10
检查您是否实际使用普通vi
通过
$ 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?
.
正如前面的答案所提到的,退格的效果只有在启用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"
Run Code Online (Sandbox Code Playgroud)
尝试不同的设置以了解它们的含义:在插入模式下输入字符/换行符和缩进,退出并重新进入插入模式,然后尝试退格。
不熟悉 vi 行为并且不坚持使用普通 vi(无论如何不推荐)的用户应该:set backspace=indent,eol,start
. Afaik 在 Debian 上通常会使用此设置安装一个系统范围的配置文件。
您可以通过 获取当前设置:set bs?
。
有时该vi
命令是一个别名vim
,当被调用时会vi
启用它的 vi 模式。
即使在传统模式下,退格键也会删除字符,但不会立即将其显示为已删除。(按 ESC 后字符消失了。)
猜猜您必须在使用vi
所描述的行为附带的vim
哪个或使用哪个能够按照您期望的方式进行操作之间做出选择。
小智 5
如果它不存在,则在用户主目录中创建一个名为 .vimrc 的新文件。这里我们用vi同时创建和编辑
sudo vi ~/.vimrc
Run Code Online (Sandbox Code Playgroud)
添加以下命令,包括关闭兼容模式和退格键擦除功能:
set nocp
set backspace=indent,eol,start
Run Code Online (Sandbox Code Playgroud)
保存并退出文件使用
:wq
Run Code Online (Sandbox Code Playgroud)
关闭兼容模式允许使用我们老 vi 人习惯的箭头键。
由于我们在创建文件时使用了 sudo,因此文件的所有权可能是 root。您可以将该文件 chown 给用户。
在我的例子中,这是一个树莓派,所以用户和组是 pi:
chown pi:pi ~/.vimrc
Run Code Online (Sandbox Code Playgroud)
现在再次启动 vi 并享受!