【问题标题】:How do I move to end of line in Vim?如何在 Vim 中移动到行尾?
【发布时间】:2010-09-11 11:13:05
【问题描述】:

我知道通常如何在命令模式下移动,特别是跳转到行等。但是跳转到我当前所在行的末尾的命令是什么?

【问题讨论】:

  • 在不到 10 分钟的时间内涵盖了基本的 vim 命令youtube.com/watch?v=71YTkxUNwmg
  • 花几分钟运行 vimtutor 有什么问题?它已经是您 Vim 安装的一部分,并向您展示了基础知识。
  • @dash-tom-bang 好吧,他们在这里获得了相当高的分数... :) 但是,你是对的 vimtutor 很棒。可能他们不知道?
  • 这是我遇到的一个问题——人们经常说你为什么不阅读关于如何在 x 位置(手册页、c++ 文档等)执行此操作的信息。 .) 当一个简单的问题被问到时。然而,他们似乎忘记了在 SO 上回答了这些问题之后,它为像我这样 知道 如何做点什么,(我已经通过 vimtutor 和内置 vim 教程几次*,但只需要一个快速提醒。所以这些问题的答案可以很快用谷歌搜索,然后我可以重新开始工作,而无需滚动通过绒毛的页面。

标签: vim editor keyboard-shortcuts vi


【解决方案1】:

只需 $ (美元符号) 键。您可以使用 A 移动到行尾并切换到编辑模式(追加)。要跳转最后一个非空白字符,您可以按 g 然后按 _ 键。

A 的反义词是 I(在行首插入模式),顺便说一句。仅按 ^ 会将光标放在该行的第一个非空白字符处。

【讨论】:

  • 跳到最后一个非空白g_
  • 在可视模式下工作时,_g 变体非常有用,因为它允许您使用末尾没有任何换行符的行。
  • 虽然 Home 和 End 键在普通键盘上工作,但在使用笔记本电脑时需要 $ 和 ^ :)
  • 您应该将 ^ 添加到列表中。
  • 如果您的换行,您可以使用g$ 到达当前换行的末尾。
【解决方案2】:

正如很多人所说:

  • $ 带你到行尾

还有:

  • ^_ 将您带到该行中的第一个非空白字符,并且
  • 0(零)将您带到行首,包括。空格

【讨论】:

  • 我知道 |将我们带到行首,但我不知道 0。所以 0 和 |做同样的事情,是吗?
  • @kami:虽然描述不同,但它们的行为确实相同。但是管道| 命令可以进行计数,例如3|跳到第三列。
【解决方案3】:
  • $ 移动到该行的最后一个字符。
  • g _ 转到最后一个非空白字符。

  • g $ 走到屏幕行的末尾(当缓冲行被多个屏幕行换行时)

【讨论】:

  • 我觉得g_和$b是一回事
  • @DaveAaronSmith: b 转到前一个单词的开头,这根本不是一回事。大致相当于$ge
  • 我使用_g_ 进行视觉/拉动,因为$ 也会复制/删除换行符(LN)。
  • 对我来说,$ 转到当前屏幕行的末尾(换行时)。我还没弄清楚为什么。 g_ 是我发现到达行尾的唯一方法。
  • @ezuk $ 即使为我包装,也会走到行尾。我知道没有设置来调整其行为。也许它已被您的 .vimrc 重新映射到 g$
【解决方案4】:

主要问题 - 行尾

$ 到行尾,保持在命令模式

A 走到行尾,切换到插入模式

相反 - 行首(技术上是第一个 非空格 字符)

^ 转到行首,保持在命令模式

I(大写 i)转到行首,切换到插入模式

进一步 - 行首(技术上是第一列,与 空格 无关)

0(零)转到行首,保持在命令模式

0i(零后跟小写 i)进入行首,切换到插入模式

对于那些开始学习 vi 的人,这里是一个很好的 vi 介绍,通过并排列出 vi 命令到典型的 Windows GUI 编辑器光标移动和快捷键。

vi editor for Windows users

【讨论】:

  • I 的类似物不是0,而是^,因为I^ 都指向第一个非空格字符行,但 0 转到第 0 列(顾名思义)。
  • @wchargin 是的,我想我似乎找不到0 的类似物是什么? (转到行的第一个字符(= 列 0)并进入插入模式)
  • @franssu:我知道的唯一一个是0i。 :-)
  • @wchargin - 感谢您的技术正确性。我已经更新了帖子。
【解决方案5】:

如果您的当前行环绕可见屏幕到下一行,您可以使用 g$ 到达 screen 行的末尾。

【讨论】:

  • 我刚刚发现使用 g 预先挂起向上和向下命令会使 vim 基于屏幕移动光标,而不是基于行。 IE。 gjgk 允许您在长线上上下移动。真的很有用。
  • 还发现键入 gw 和某些东西似乎会永久更改 jk 以使其表现得像这样。不知道如何或为什么。谁能解释一下?
  • @Druckles:回复有点晚,但如果您仍然想知道,(或者如果其他人正在阅读此内容)gwgq 是重新格式化文本的命令。 (见:h gw:h gq)可能发生的事情是你做了gw{motion} 并更改了一些文本,以便屏幕行与实际行相对应。
【解决方案6】:

我看不到在标准终端中使用 vim 的 macbook 热键。希望它会帮助某人。 macOS 用户(在 macbook pro 2018 上测试):

fn + - 移动到开始行

fn + - 移动到最后一行

fn + - 向上移动页面

fn + - 向下移动页面

fn + g - 将光标移动到文档的开头

fn + shift + g - 将光标移动到文档末尾

对于最后两个命令有时需要点击两次。

【讨论】:

    【解决方案7】:

    A 进入从行尾开始的编辑模式。

    【讨论】:

      【解决方案8】:

      美元符号:$

      【讨论】:

        【解决方案9】:

        “结束”键的优点是它可以在正常模式和插入模式下工作。

        '$' 只能在普通/命令模式下工作,但它也可以在经典 vi 编辑器中工作(很高兴知道 vim 何时不可用)。

        【讨论】:

        • 你在插入模式附近做什么?!没有一个普通的正派公民在天亮后去那里。你知道里面会发生什么,不是吗?代码在那里消失了,你知道吗?它消失了,再也没有消息了。
        • 谢谢你,因为我喜欢在进入插入模式后保持在插入模式。不幸的是,我的笔记本电脑没有 End 键。 :(
        【解决方案10】:

        在许多情况下,当我们在一个字符串中时,我们用双引号括起来,或者在编写语句时,我们不想按转义键并用箭头键转到该行的末尾并按分号(@ 987654321@) 只是为了结束这一行。在您的 vimrc 文件中写入以下行:

        imap <C-l> <Esc>$a
        

        这句话说了什么?它将 Ctrl+l 映射到一系列命令。相当于你同时按Esc(命令模式)、$(行尾)、a(追加)。

        【讨论】:

        • 谢谢你。我一直想将 Ctrl-e 添加回我的 vim,就像在我的第一台机器上一样转到行尾,但不知道如何
        • 正如接受的答案所说,您可以按 A 做同样的事情。
        • @trysis 你误会了,这并没有脱离非常好的编辑模式。
        • 你是对的。 vim 当然可以让你用更少的时间做更多的事情。 @razorxpress,一个小的调整将是 imap &lt;C-l&gt; &lt;Esc&gt;A,这使得 Ctrl+l 相当于按 Esc(退出插入模式),然后按 A(追加到行尾)。
        • 我认为更惯用的映射方式是inoremap &lt;C-l&gt; &lt;C-o&gt;A
        【解决方案11】:

        还要注意(或者可能是物理行)和屏幕行之间的区别。行由行尾字符 ("\n") 终止。屏幕行是在终端或屏幕中显示为一行字符的任何内容。如果你的物理线长于屏幕宽度,这两者就会分开,这在写电子邮件等时很常见。

        这种区别也体现在行尾命令中。

        • $0 分别移动到物理行或段落的末尾或开头:
        • g$g0 分别移动到屏幕行或段落的末尾或开头。李>

        如果您总是更喜欢后一种行为,您可以像这样重新映射键:

        :noremap 0 g0
        :noremap $ g$
        

        【讨论】:

        • 如何到达该行的最后一个非空格? (无论是屏线还是物理线)
        • g_physical 行的最后一个非空格。屏线呢?
        【解决方案12】:

        或者有一个显而易见的答案:使用 End 键转到行尾。

        【讨论】:

        • 是的,mac 终端是我注意到的一种,它会劫持密钥并且不会将它们传递给终端内运行的东西。每当我使用 mac 一段时间时,都会让我烦恼的一件事。
        • 使用 vim 的全部意义在于不必使用像 'End' 这样的键。永远不要离开主行。
        • Mac 上没有 End 键。
        • @kenorb 当我发表评论时……但苹果多年来喜欢删除功能。 netdna.webdesignerdepot.com/uploads/2009/01/… 这实际上是我最喜欢的键盘之一
        【解决方案13】:

        可能不相关,但如果你想在当前行之后开始新的一行,你可以在该行的任何地方使用 o。

        【讨论】:

          【解决方案14】:

          最简单的选择是键入 $。如果您正在处理文本块,您可能会喜欢使用命令 {} 来分别前后移动段落。

          【讨论】:

            【解决方案15】:

            我习惯于 Home/End 让我在插入模式下进入行首和行尾(在 Windows 中使用,我认为是 Linux),Mac 不支持这种模式。这特别烦人,因为当我在远程系统上使用 vim 时,我也不能轻易做到。经过一些痛苦的尝试和错误,我想出了这些.vimrc 行,它们做同样的事情,但绑定到 Ctrl-A 用于行的开头和 Ctrl-D 用于行的结尾。 (出于某种原因,我猜 Ctrl-E 是保留的,或者至少我想不出绑定它的方法。)享受吧。

            :imap <Char-1> <Char-15>:normal 0<Char-13>
            :imap <Char-4> <Char-15>:normal $<Char-13>
            

            这里有一个很好的 ASCII 控制字符代码图表供其他人使用:

            http://www.physics.udel.edu/~watson/scen103/ascii.html

            你也可以使用 Ctrl-V + Ctrl- ,但是这样粘贴到这样的地方就不行了。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-02-22
              • 1970-01-01
              • 2011-01-05
              • 2021-11-21
              • 1970-01-01
              • 2011-07-04
              • 1970-01-01
              相关资源
              最近更新 更多