我是新来的六,其实我从今天开始学习vi,我就被困在了退格键钥匙。实际上,当我第一次在 Ubuntu 12.04 上启动 vi 时,我的退格键工作正常,但此后它开始表现奇怪。每当我在插入模式下按退格键时,它只会向左移动一个位置,而不是删除字符。如何恢复默认的退格功能?请注意,我不想安装 vim 或设置 nocompatibility。
答案1
检查您是否实际上使用普通
vi
via$ 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"
尝试不同的设置以了解其含义:在插入模式下输入字符/换行符和缩进,退出并重新进入插入模式,然后尝试退格。
不熟悉 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