我知道如何在命令模式下移动,特别是跳到行等。但是跳到我当前所在行的末尾的命令是什么?
- 不到10分钟youtube.com/watch中包含的基本VIM命令?V= 71YTKXUNWMG
- 花几分钟时间在VimTutor上有什么问题?它已经是VIM安装的一部分,并向您展示了基础知识。
只有$(美元符号)键。您可以使用a移动到行尾并切换到编辑模式(append)。要跳转最后一个非空白字符,可以按g,然后按_键。
与a相反的是(在行首插入模式),作为一个旁白。只按^将把光标放在行首。
- 跳转到最后一个非空的g_。
- 有时,g_变体更有用,因为它不包括空白字符。
- 在视觉模式下工作时,g变量非常有用,因为它允许您在末尾使用不带换行符的行。
- 当家庭和结束键在普通键盘上工作时,$和^在使用笔记本电脑时需要:)
- 您应该将^添加到列表中。
- 同时,i、Ctrl-O、$也应该起作用。
- 如果您的换行,可以使用g$到达当前换行的末尾。
- @你一定在用微软的键盘,因为我没有那把钥匙
- @RSW我在Mac Book Pro上
- 在第三天学习的时候搜索并找出这个答案是很好的。我知道以前有人问过,因为每个人都需要它。它比第一个o和第二个backspace节省了大量的击键。
正如许多人所说:
而且:
- ^或_使您进入行中的第一个非空白字符,以及
- 0(零)使您到达行首,包括空白
- 我知道把我们带到了行首,但我不知道0。所以0和都做同样的事情,是吗?
- @卡米:虽然描述不同,但它们的行为却完全相同。但是pipe |命令可以进行计数,例如3_跳到第三列。
- 我觉得G和B是一样的
- @戴维亚朗史密斯:埃多克x1〔15〕指的是前一个词的开头,这根本不是一回事。大致相当于$ge。
- @你说得对,对不起。
- 我使用_和g_进行视觉/拉拽,因为$也会复制/删除新行(ln)字符。
- 对于我来说,$将转到当前屏幕行的末尾(包装时)。我还没弄明白为什么。g_是我找到的到达实际终点的唯一方法。
- @以苏克以东十一〔四〕为我包的时候,也到了队尾。我不知道该如何调整它的行为。也许是你的Vimrc给g$重新映射的?
- @保鲁安-你成功了。我用SPF13,VIMRC线310映射它。现在问题变成了我如何在负载链中稍后取消映射它(只是更改此行将在下次拉SPF13时被覆盖)。
- 我明白了。我不得不将let g:spf13_no_wrapRelMotion = 1添加到我的.vimrc.before.local文件中,以禁用这种特定于spf13的行为。
- 我喜欢nnoremap L g_和nnoremap L L,也喜欢操作员等待和视觉模式。更直观,更不容易伸展。
- 行开始的第一个非空字符的_是否与^相同?
主要问题-行尾
$转到行尾,保持命令模式
a转到行尾,切换到插入模式
相反-行首(技术上是第一个非空白字符)
^转到行首,保持命令模式
(大写I)转到行首,切换到插入模式
进一步-行首(技术上是第一列,与空白无关)
0(零)转到行首,保持命令模式
0I(零后接小写I)进入行首,切换到插入模式
对于那些开始学习vi的人来说,这里是一个很好的vi介绍,通过并列列出vi命令来实现典型的WindowsGUI编辑器光标移动和快捷键。
适用于Windows用户的vi编辑器
- 与I类似的不是0而是^,因为I和^都指向行的第一个非空白字符,但0转到列零(顾名思义)。
- @真的,我想我好像找不到类似于0的东西?(转到行的第一个字符(=0列)并转到插入模式)
- @弗朗苏:我所知道的唯一一个是埃多克斯一〔16〕。-)
- @wchargin-感谢您的技术正确性。我已经更新了帖子。
如果当前行环绕可见屏幕到下一行,则可以使用g$到达屏幕行的末尾。
- 我刚刚发现预挂起的上下命令与g make vim移动光标基于屏幕,而不是基于行。也就是说,gj和gk允许你在一条长线上上下移动。真的很有用。
- 还发现,键入gw和一些东西似乎会永久地改变j和k的行为。不知道是怎么回事,为什么。有人能解释一下吗?
- @Druckles:回答有点晚,但是如果你还在想(或者读到这篇文章的其他人)gw和gq是重新格式化文本的命令。(见:h gw和:h gq可能发生的事情是你做了gw{motion}并更改了一些文本,使屏幕行与实际行对应。
在许多情况下,当我们在字符串中时,我们用双引号括起来,或者在编写语句时,我们不希望按Escape键并用箭头键转到该行的末尾,然后按分号(;键)结束该行。在VIMRC文件中写入以下行:
这句台词怎么说?它将ctrl+l映射到一系列命令。它相当于一次按esc(命令模式)、$(行尾)、a(附加)。
- 谢谢你的邀请。我一直想把ctrl-e添加回我的vim,就像在我的第一台机器上那样添加到行尾,不知道如何添加。
- 正如公认的答案所说,你可以按A来做同样的事情。
- @试析你误会了,这并没有脱离编辑模式,这是相当不错的。
- 你说得对。vim当然可以让你用更少的时间做更多的事情。@RazorXpress,一个小的调整是imap A,这使得ctrl+l相当于按Esc(退出插入模式),然后按A(附加到行尾)。
- 我认为更惯用的映射方法是inoremap A。
"结束"键的优点是它可以在正常模式和插入模式下工作。
"$"仅在正常/命令模式下工作,但它也在经典vi编辑器中工作(很好地知道VIM何时不可用)。
- 你在"插入"模式下做什么?!没有一个普通的正派公民在天亮后去那里。你知道里面发生了什么,是吗?密码消失了,你知道吗?它消失了,再也听不到了。
- 感谢您的帮助,因为我喜欢在输入后保持插入模式。不幸的是,我的笔记本电脑没有结束键。:(
美元符号:$
还要注意线条(或者物理线条)和屏幕线条之间的区别。行以行尾字符("")结尾。屏幕行是指在终端或屏幕中以一行字符的形式显示的内容。如果你有比屏幕宽度长的物理线条,这两个会分开,这在写电子邮件等时很常见。
这种区别也出现在行尾命令中。
- $和0分别移动到物理行或段落的结尾或开头:
- g$和g0分别移动到屏幕行或段落的末尾或开头。
如果您总是喜欢后一种行为,可以这样重新映射键:
1 2
| :noremap 0 g0
:noremap $ g$ |
- 如何到达行的最后一个非空白区?(无论是屏幕线还是物理线)
- @卡米·埃多克斯1〔7〕。
- g_是物理行的最后一个非空白。屏幕线怎么样?
或者有一个显而易见的答案:使用endakbd键转到行尾。
- 我认为这不适用于所有终端。
- 是的,Mac终端是我注意到的一个,它劫持了钥匙,并没有把它们传给终端内运行的东西。每当我用Mac电脑的时候,有一件事会让我恼火。
- 使用VIM的关键是不必使用"end"这样的键。永远不要离开母排。
- 在Mac上没有结束键。
- @Kenorb是我发表评论的时候……但是苹果多年来喜欢删除这些功能。netdna.webdesignerrepot.com/uploads/2009/01/…这实际上是我最喜欢的键盘之一。
按a以从行尾开始进入编辑模式。
可能不相关,但如果您想在当前行之后开始一个新行,则可以在行中的任何位置使用o。
最简单的选择是输入$。如果您使用的是文本块,您可能需要使用命令 和 ,以便分别前后移动段落。
我习惯于在插入模式下(从Windows和我认为是Linux中使用)回到行首和行尾,这是Mac不支持的。这特别令人恼火,因为当我在远程系统上使用VIM时,我也不容易做到。经过一些痛苦的尝试和错误之后,我想出了这些.vimrc行,它们做同样的事情,但在行首绑定ctrl-a,在行尾绑定ctrl-d。(出于某种原因,我猜ctrl-e是保留的,或者至少我找不到绑定它的方法。)享受吧。
1 2
| :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-键,但这并不能粘贴到像这样的地方。
我看不到标准终端中使用VIM的MacBook热键。希望它能帮助别人。对于MacOS用户(在MacBook Pro 2018上测试):
fn + ← - move to beginning line
fn + → - move to end line
fn + ↑ - move page up
fn + ↓ - move page down
fn + g - move the cursor to the beginning of the document
fn + shift + g - move the cursor to the end of the document
对于最后两个命令,有时需要点击两次。