VI编辑器:移动到行尾而不是最后一个字符

15

我经常需要在极简终端上使用普通的vi编辑器,而这些终端的行为与大型发行版上的vim不同,所以我的行为会出现问题。

我想知道的不是如何移动到行末最后一个字符,而是移动到行末的下一个字符。因为输入$并不能将插入光标移动到行末的最后一个字符,这很容易证明。我现在正在使用MSYS上的vi编辑器。

如果我在一行中输入:

This is a test

然后按下esc$i<enter>,我将得到以下结果:

This is a tes
t

这表明插入光标没有放置在行末,而是在该行中最后一个字符的左侧(想象一下盒子像Notepad++中的行。盒子覆盖在字母上方,表示字符将插入组成盒子左侧的区域),我知道这是因为如果它真的在末尾(“末尾”意味着在最后一个字符的右侧),则最后一个字符不会移动到自己的行中,就像您在上面看到的那样。
我不想要这种行为。每次按回车键时,我都要多打一个字符以确保不必重新输入我的单词,这太繁琐了。这会降低我的生产力。
我该如何解决这个问题?我可以在.exrc中调整设置吗?

4
这是一条评论而不是答案,因为我不知道原始的vi有多少适用性(我使用vim),但当您使用“i”时,它会在您当前所在的字符之前插入。使用“a”在之后插入(追加),使用“A”在当前行的末尾追加(即“$”之后)。 - Two-Bit Alchemist
1
我不确定普通的vi是否可以,但是你不能在命令模式下输入A吗?这应该会将您放置在插入模式下的最后一个字符之后。如果这行不通,请尝试输入<Esc>$a,它应该会做同样的事情。 - Rick
2
据我所知,ia 都可以进入插入模式,不同之处在于 i 会将光标置于当前字符之前,而 a 则会将光标置于当前字符之后。 - Rick
2个回答

38

进入行末插入模式的普通命令是A

更一般地,i会在当前字符之前进入插入模式,因此你得到的结果与您的操作完全一致:$将光标放置在最后一个字符上,i就在最后一个字符之前进入了插入模式。这就是您要求Vim执行的操作,也是它所完成的操作。

如果您想在当前字符之后进入插入模式,则正确的命令是a,因此您应该使用$a而不是$i(无论您是在vi还是vim中都无法实现您想要的效果)。而A有一个很酷的快捷方式即可完成相同的操作。


1
我对vi不默认采用这种行为的原因感到困惑较少,但在使用vi两年后为什么我没有早点学习这个东西,我感到更加困惑。 - Dylan LaCoursiere
@DylanLaCoursiere,iaIA<Esc>:w:q 是一个人应该学习的第一批命令。 - romainl
@romainl,你是怎么学习vim的?你有什么好的初学者资源吗? - jchook
2
@jchook,1. 如果你还没有这样做,请尽可能多地运行 $ vimtutor 以掌握基础知识。 2. 按照 vimtutor 的指示,升级到用户手册::help user-manual。它将逐步指导您了解每个功能,从基础到高级。这不是一本小说:按照自己的节奏前进,跳过章节,稍后再回来,最重要的是,在此过程中进行实验。 3. 注意反模式和低效操作,找到改进方法,练习。洗涤。重复。 - romainl

11

我猜你想使用o在新的一行插入文本。但是我提供了一些通过vi插入文本的方法。

插入命令

应该注意的是,vi/vim的光标位于字符上而不是字符之间,这与大多数编辑器不同。

  • i 在光标前插入文本
  • a 在光标后追加文本
  • I 在行内第一个非空字符之前插入文本
  • A 在行末追加文本
  • o 在当前行下面开始新的一行并进入插入模式
  • O 在当前行上面开始新的一行并进入插入模式
  • S/cc 删除当前行并开始插入。
  • c{motion} 删除{motion}并开始插入模式。可以理解为更改
  • C 从当前位置删除到行末并开始插入模式
  • s 删除光标下的字符并开始插入模式
  • r 替换一个字符
  • R 开始替换模式。可以理解为覆盖

要获取任何命令的帮助,请键入:h {command},因此对A的帮助将是:h A


我认为 OP 想要 A,但是因为综合列表而加一分。 - Two-Bit Alchemist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接