我经常发现自己不得不在简约的终端上使用普通的旧vi,这些终端的行为往往与大型发行版上的vim不同,所以行为会让我感到震惊。
我想知道的不是如何移动到该行中的最后一个字符,而是一个字符。因为键入$
不会将插入光标移动到行中的最后一个字符,这很容易证明。我现在正在MSYS上使用vi。
如果我输入
行 This is a test
然后点击esc
,$
,i
和<enter>
,我会得到以下内容:
This is a tes
t
这表示插入光标不放在行的末尾,但是行中最后一个字符左边的一个(想象一下该行是Notepad ++中的一行。框是在字母的顶部,表示该字符将被插入组成框的左侧区域,我知道这是因为如果它真的在最后(&#34;结束& #34;意思是最后一个字符的右边)最后一个字符不会被移动到它自己的行,例如你在上面看到的那样。
我不想要这种行为。每次按下回车键输入一个额外的角色,以确保我不必重新输入我的话语,这对我来说太痛苦了。这会影响我的工作效率。
我该如何解决这个问题?这是我可以在.exrc
调整的设置吗?
答案 0 :(得分:25)
在行尾输入插入模式的正常模式命令是A
。
更一般地说,i
在当前字符之前进入插入模式,所以你得到的完全符合你的行为:$
将光标放在最后一个字符上并且i
在最后一个字符之前进入插入模式。这就是你要求Vim做的事情以及它的作用。
如果你想在当前字符之后输入插入模式,那么正确的命令是a
所以你应该做的不是$i
(这可以&#39;}做你想要的,无论你是在vi还是vim)都是$a
,有一个很酷的捷径:A
。
答案 1 :(得分:8)
我猜你想用o
来打开&#34;打开&#34;一条新线。但是我提供了一些通过vi
应该注意的是,vi / vim的光标设置在一个字符之上而不是像大多数编辑一样在字符之间。
i
在光标前插入文字a
在光标后附加文字I
在第A
将文字附加到行尾o
在当前版本下面开始一个新行并开始插入模式O
在当前版本之上开始一个新行并开始插入模式S
/ cc
删除当前行并开始插入。c{motion}
删除{motion}
并开始插入模式。读作变更C
从当前位置删除到行尾并开始插入模式s
删除光标下的字符并启动插入模式r
替换一个字符R
启动替换模式。把它想象为覆盖有关:h {command}
这些命令类型的任何帮助,请A
的帮助:h A