OSX Debian ssh 终端上奇怪的 vi 行为

OSX Debian ssh 终端上奇怪的 vi 行为

在创建交换文件时,我vi /etc/fstab以 root 身份发出。 fstab 文件出现了,太棒了。发出G $跳转到行尾并i进入 INSERT 模式的问题。按右箭头将光标向右移动一个字符。在换行符上vi插入大写字母。C我很困惑,按下了向左箭头键。vi插入大写B.

我很困惑。我从哪里开始弄清楚这里发生了什么?我需要能够使用vi.

答案1

您可以使用改进的vim,并且可以使用方向键,vi默认使用键h j k l移动光标如果vi是vim的别名,请检查

alias vi

所以编辑$HOME/.vimrc 并放入这一行

set nocompatible

如果对 unix 感兴趣,我通常使用这个 vimrc

set nocompatible
set backspace=indent,eol,start
syntax on
imap <esc>OH <esc>0i
cmap <esc>OH <home>
nmap <esc>OH 0
nmap <esc>OF $
imap <esc>OF <esc>$a
cmap <esc>OF <end>

答案2

OSX“vi”似乎是 vim。它的版本消息说(对于埃尔卡皮坦):

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 27 2015 16:22:14)
Compiled by [email protected]
Normal version without GUI.  Features included (+) or not (-):

你有一个很小的机会不是使用 vim,但没有人提供一个合理的替代方案。

vim 在插入模式下接受光标键序列。

然而,这样做的一个缺陷是实际终端行为与环境变量设置的终端描述不匹配TERM。例如,“linux”终端描述不使用应用方式,并且如果您TERM在实际在已初始化为使用的终端中工作时已设置为应用方式,那么 vim 不会期望一个escapeOB序列,因为它正在寻找escape[B.结果是B,按下向下箭头键时会插入一个。

进一步阅读:

答案3

箭头键在 termcap(5) 中被定义为转义序列。这是默认的 VT100 设置。您可以在终端中使用以下命令查看序列:^v 后跟任何内容。 VT100 术语中的右箭头是 ^[[C (^[) 是转义符。请注意,这告诉 vi(1) 退出插入,向上移动一个段落(显然,在本例中没有或一行),然后更改到行尾。在任何未设计用于处理功能键的程序中使用功能键时,也会出现类似的意外结果。

此类问题有两种解决方案,它们既不是操作系统、程序也不是特定于终端的。第一个解决方案是使用知道如何在插入模式下处理导航的 vi(1)。 vim(1) 就是这样的 vi(1) 之一。它可以很好地与 vt100 模拟器配合使用,并且如果您想以这种方式安装它,它还有自己的 GUI。不过,许多人认为 vim(1) 是臃肿的软件;发现它缓慢而沉重。其他可能更臃肿的选项包括带有 vwrapper 插件的 Eclipse(1) 和带有 Viper 插件的 emacs(1)。

另一种解决方案是使用 vi(1),因为它旨在用于真正的 VT100。不要在插入模式下使用箭头或其他多字符功能键。问题中的关键顺序:

G -- 转到文件的最后一行 $ -- 转到当前行的最后一个字符 i -- 在当前字符之前插入

对于该任务来说是不正确的。而不是我使用 -- 附加当前字符,因此不需要箭头键来越过该行的最后一个字符。

或者,更好

G -- 最后一行 A -- 追加当前行

相关内容