如何在Vim中移动到行尾?

sal*_*cer 1140 vi vim keyboard-shortcuts editor

我知道如何一般在命令模式中移动,特别是跳到线路等.但是跳到我目前所在线路末端的命令是什么?

dvo*_*rak 1966

只是$ (美元符号)键.您可以使用A移动到行尾并切换到编辑模式(附加).

与此相反的AI(行开头的插入模式).

  • 跳到最后一个非空白的`g_` (78认同)
  • 在可视模式下工作时,_g变体非常有用,因为它允许您在最后使用没有任何换行符的行. (6认同)
  • 如果换行,您可以使用“g$”到达当前换行的末尾。 (3认同)
  • 有时候`g_`变体更有用,因为它不包含空白字符 (2认同)
  • Home和End键在普通键盘上工作,当你使用笔记本电脑时需要$和^ :) (2认同)

Rob*_*lls 292

很多人都说:

  • $ 让你走到终点

但是也:

  • ^或者_让你到达该行中的第一个非空白字符,并且
  • 0(零)让你到行的开头,包括.空白

  • @kami:虽然描述不同,但它们看起来行为相同.但是管道`|`命令可以进行计数,例如3 | 跳到第三列. (8认同)

Pau*_*ane 135

  • $ moves to the last character on the line.
  • g _ goes to the last non-whitespace character.

  • g $ goes to the end of the screen line (when a buffer line is wrapped across multiple screen lines)

  • 我使用```_```和```g_```来进行视觉/ yanking,因为```$```也会复制/删除新行(LN)字符. (9认同)
  • @DaveAaronSmith:`b`到了上一个单词的开头,这根本不是一回事.它大致相当于`$ ge`. (3认同)

ap-*_*osd 61

主要问题 - 行尾

$ 到了行尾,仍处于命令模式

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

相反 - 行的开始(技术上是第一个非空白字符)

^ 进入行首,保持在命令模式

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

进一步 - 开始行(技术上是第一列,不管空白)

0 (零)进入行的开头,保持在命令模式

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

对于那些开始学习vi的人来说,通过列出并排vi命令到典型的Windows GUI Editor光标移动和快捷键,可以很好地介绍vi.

适用于Windows用户的vi编辑器

  • "I"的类似物不是"0"而是"^",因为"I"和"^"都转到行的第一个*非空白*字符,但是"0"转到第0列(作为其名称)暗示). (3认同)

Com*_*ger 41

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

  • 我刚刚发现预先挂起的上下命令用*g*make vim移动基于屏幕的光标,而不是基于行.即*gj*和*gk*允许您在长线上上下移动.真有用. (3认同)
  • @Druckles:有点迟到的回复,但是如果你还在想,(或者如果还有其他人在读这篇文章的话)`gw`和`gq`是重新格式化文本的命令.(参见`:h gw`和`:h gq`)可能发生的事情是你做了'gw {motion}`并更改了一些文字,以便屏幕线对应于实际的线条. (3认同)

Ale*_*hko 33

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

fn+ ? - 移动到起始行

fn+ ? - 移动到结束行

fn+ ? - 向上移动页面

fn+ ? - 向下移动页面

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

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

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


小智 14

美元符号:$


Dia*_*ism 12

'End'键的优点是它可以在普通和插入模式下工作.

'''仅在正常/命令模式下工作,但它也适用于经典的vi编辑器(很好地知道vim何时不可用).

  • 你在插入模式下徘徊了什么?!在白天之后,没有普通的体面的公民去那里.你知道那里发生了什么,不是吗?代码消失了,你知道吗?它消失了,再也没有听到过. (37认同)
  • 谢谢你,因为我喜欢在我输入后保持插入模式.不幸的是我的笔记本电脑没有End键.:( (2认同)

Pra*_*mod 12

在许多情况下,当我们在一个字符串里面时,我们被双引号括起来,或者在写一个语句时我们不想按下escape并用箭头键转到该行的末尾并按下分号(;)结束这条线.在vimrc文件中写下以下行:

imap <C-l> <Esc>$a
Run Code Online (Sandbox Code Playgroud)

这条线说什么?它将Ctrl + l映射到一系列命令.它相当于你一次按Esc(命令模式),$(行尾),a(追加).

  • @trysis你误解了,这并没有摆脱编辑模式,这是相当不错的. (4认同)
  • 你是对的."vim"当然可以让你在更短的时间内完成更多这样的事情.@razorxpress,一个小调整是`imap <Cl> <Esc> A`,这使得Ctrl + l相当于按下'Esc`(退出插入模式),然后是'A`(追加到行尾). (2认同)
  • 我认为映射这个的更惯用的方法是`inoremap <Cl> <Co> A` (2认同)

loe*_*org 11

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

这种区别也出现在行尾命令中.

  • $并分别0移动到物理行或段落的结尾或开头:
  • g$并分别g0移动到屏幕行或段落的结尾或开头.

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

:noremap 0 g0
:noremap $ g$
Run Code Online (Sandbox Code Playgroud)


Bri*_*ian 9

按此A键从行尾开始进入编辑模式.

  • 好的,“Shift”+“A” (2认同)

dav*_*avr 9

或者有明显的答案:使用End密钥转到行尾.

  • 在Mac上没有结束键. (7认同)
  • 我不认为这适用于所有终端. (5认同)
  • 是的,我注意到 mac 终端会劫持密钥并且不会将它们传递给在终端内运行的东西。每当我使用 mac 时让我烦恼的事情之一。 (2认同)

gra*_*ywh 6

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