【问题标题】:VI Editor: Move to EOL instead of last characterVI 编辑器:移动到 EOL 而不是最后一个字符
【发布时间】:2014-06-11 07:57:12
【问题描述】:

我经常发现自己不得不在简约的终端上使用普通的旧 vi,这些终端的行为往往与大型发行版上的 vim 不同,所以这种行为让我很吃惊。

我想知道的不是如何移动到行中的最后一个字符,而是过去一个字符。因为键入$ 不会将插入光标移动到行中的最后一个字符,这很容易证明。我现在在 MSYS 上使用 vi。

如果我输入该行

This is a test

点击esc、$、i和<enter>,我会得到以下信息:

This is a tes
t

这表明插入光标没有放在行尾,而是放在行中最后一个字符的左侧(想象一下,框是 Notepad++ 中的一行。盒子在字母的顶部,表示字符将插入构成盒子左侧的区域),我知道这是因为如果它真的在结尾(“结尾”意味着最后一个字符)最后一个字符不会像您在上面看到的那样移动到自己的行。

我不想要这种行为。每次按回车键时都要输入一个额外的字符,以确保我不必重新输入我的单词,这对我来说太痛苦了。这会降低我的工作效率。

我该如何解决这个问题?这是我可以在.exrc 中调整的设置吗?

【问题讨论】:

  • 这是评论而不是答案,因为我不知道其中有多少适用于原始 vi(我使用 vim),但是当您使用 i 时,它会插入 before 你所在的角色。使用a 插入(追加)之后,A 追加到当前行的末尾(“之后”$)。
  • 我不确定普通的旧 vi 但你不能在命令模式下输入A 吗?这应该把你放在插入模式的最后一个字符之后。如果这不起作用,请键入 <Esc>$a,它应该做同样的事情。
  • 据我所知i 和a 都将您置于插入模式,区别在于i 在当前字符之前启动您,而a 在之后启动您。

标签: vim vi eol


【解决方案1】:

我猜你想使用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 但无论如何都要为综合列表 +1。
【解决方案2】:

在行尾进入插入模式的普通模式命令是A。

更一般地说,i 进入插入模式在当前字符之前,所以你得到的与你所做的完全一致:$ 将光标放在最后一个字符上,i在最后一个字符之前进入插入模式。这就是你要求 Vim 做的事情,它就是这样做的。

如果你想在当前字符之后进入插入模式,正确的命令是a所以你应该做的而不是$i(它不能做你想做的,无论你是在 vi 还是 vim 中)是 $a 有一个很酷的快捷方式:A。

【讨论】:

  • 我不太困惑为什么这不是 vi 的默认行为,而更困惑的是为什么我在使用 vi 两年后没有早点学会这一点。跨度>
  • @DylanLaCoursiere, iaIA<Esc>:w:q 是人们应该学习的第一个命令。
  • @romainl,你是如何学习 vim 的?你有适合初学者的好资源吗?
  • @jchook, 1. 如果您还没有这样做,请根据需要多次执行$ vimtutor 以获取正确的基础知识。 2. 按照vimtutor末尾的说明,升级到用户手册::help user-manual。它将引导您逐步了解每个 功能,从基本到高级。不过,这不是一本小说:按照自己的节奏进行,跳过章节,稍后再回到它们,最重要的是,沿途进行实验。 3. 密切关注反模式和低效行为,寻找改进和实践。林斯。重复。
猜你喜欢
  • 2018-01-03
  • 1970-01-01
  • 2020-08-30
  • 2011-05-28
  • 2012-11-06
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
相关资源
最近更新 更多