Delete a block of text in Vim
因此,我可以使用dbdabkbbkd(正常模式)删除一个文本+行,下面的所有文本都向上移动一行。
我可以使用ctrl+vbkbd进入视觉模式
如果我说do 0>C+v>jjj>$>d,则删除4行的文本,但不删除行。
如何删除一个文本块并同时删除行,从而使前面的任何文本行向上移动到光标?
- @哈马尔-我如何把我的操作系统中的C+v转换成小按钮的图片-我在一些帖子上看到了它?
- 使用...</kbd>标签,如Ctrl</kbd> + V</kbd>标签。不过,不要过分。长VIM命令通常更容易用普通的代码标记来读取。
- @哈马尔-好吧-我确实有一种过度使用新技巧的倾向(看看timss的答案……是这样还是过度使用?)
- 我会说这有点过分了。当然,这是主观的。不管怎么说,我们已经不再讨论这个话题了。如果您需要更多的意见,请询问元堆栈溢出。
对于类似的内容,我通常使用shift+v、jabdxkbdxkbdxkbdxkbdxkbdxkbdxkbdxkbdxkbdxkbdxkbd…xkbd,但也可以使用文本对象删除。见:h text-object。举几个例子:
di"—在"中删除dap—删除段落
当然,您可以使用除d以外的其他命令,例如c或v。我一直使用的是ci(和ci",用于编辑()和""中的内容。
使用文本对象和视觉模式的更酷的例子可以在这里找到:你对Vim最有效的捷径是什么?
您也可以使用fdinoff提到的4dd,或者jens提到的范围。然而,在大多数情况下,我个人认为使用可视线路(SHIFT+V)更为灵活,您不必计算线路或任何东西。这很容易记住,你会立即看到结果,你不会错过计数线,即使你在屏幕的顶部/底部,它也会工作。
- +1谢谢你的推荐信-我盯着你看,留着以后再看。
- 尽管我认为对vim命令使用普通符号而不是标记通常更好,但还是有一些格式化的特性。没有未分离的"键或(键,因此对它们使用并不真正有意义。
- @我想你是对的。改为''.
- @Timss—一些标记会很好—认为您可能反应过度了!
- @因为d等既是命令又是映射,所以我不能真正说出什么是最好的。不管怎样,我想现在没事了。
- @Timss-尽管标记很疯狂,我还是把这个标记为答案。
- @谢谢你,我很感激。
- @timss如果外部{ }区块内存在另一个{ }区块,则di{不起作用。
使用4dd删除4行文本。
或
使用线条视觉块。然后移到要删除的最后一行,然后按d键。
- 4dd是一个显而易见的简单答案-谢谢!似乎只有v之后选择行并按d就可以了-我的错误是使用C+v。
如果块真的很大,并且您不必费心计算要删除的行数,但是您知道第一行和最后一行的行数(:set number有帮助),您可以始终转到ex模式,并且
从第3行到第1415行删除。
使您进入"视觉块模式"。在该模式中,您作用于一个矩形("可视块模式"中的"块"),该矩形可能覆盖或不覆盖您要删除的行。d只对该块中包含的字符起作用,使行保持原样。
你想要的是"视觉线条模式",在这里你具体地在线条上行动。从正常模式或任何其他视觉模式,点击v(shift+v),移动光标定义选择,然后点击d。
- +1个很好的总结-这是我的错误,这是我的解决方案(正常模式下的4dd可能是最简单的解决方案……尽管对于我练习可视线条模式很好)
删除4行文本,从光标所在行开始:
或者使用带有行地址的ex命令d,例如:
删除第3-24行。
.
.
.
以下是在使用行寻址时使用的一些有用的特殊字符:
1 2 3 4 5 6 7 8
| . : current line
$ : last line
/text/ : next occurrence of text
?text? : previous occurrence of text
* : all text currently on screen
% : entire file
+n : next n lines
-n : previous n lines |
或d with motion例如
另外,:d命令也很灵活。查看帮助以了解详细信息
你可以用书签。在第一行写上书签,然后说"e"在命令模式下(如果处于插入模式,请按Esc键)按
它用书签"e"标记第一行。
然后转到要删除的最后一行加上书签,写上"f"
然后可以转到ex模式(使用冒号)并删除行