vim – 如何删除一大块文本不计算行?

在vim中,我经常发现自己删除(或复制)了大块的文本。 可以统计文本的行数,并说(例如) 50dd删除50行。

但是,如何删除这个大块的文本而不必知道要删除多less行呢?

我不是vim大师,但是我在这种情况下使用的是“视觉模式”。 在命令模式下,键入V (大写)。 然后向上/向下移动以突出显示要删除的块(所有常用的移动命令都可以)。 然后用xd删除它。

转到起始行并键入m a (标记“a”)。 然后到最后一行inputd' a (删除标记“a”)。

这将删除从当前到标记的所有行(包括)。 它也与vivim兼容,因为你的环境不受后者的欢迎。

你也可以使用视觉模式(一些命令也可以使用删除选项) vip vapselect段落, v2apselect两个段落dap works, d2ap也可以。 你可以在[ ]块内删除像da [

供参考:对象的types。 从vim文档:第4部分http://vimdoc.sourceforge.net/htmldoc/visual.html

 4. Operating on the Visual area *visual-operators* ... The objects that can be used are: aw a word (with white space) iw inner word aW a WORD (with white space) iW inner WORD as a sentence (with white space) is inner sentence ap a paragraph (with white space) ip inner paragraph ab a () block (with parenthesis) ib inner () block aB a {} block (with braces) iB inner {} block a< a <> block (with <>) i< inner <> block a[ a [] block (with []) i[ inner [] block 

这里有很多更好的答案,但为了完整起见,我会在阅读上面提到的一些很好的答案之前提及我以前使用的方法。

假设你想从24-39行删除。 你可以使用ex命令

 :24,39d 

你也可以使用拉线

 :24,39y 

并find并replace使用24-39行

 :24,39s/find/replace/g 

如果你通过set number打开行号,你可以简单的dNNG它从当前位置删除到NN行。 所以你可以导航到你想要删除的行的开始,只需d50G假设这是你想删除的最后一行。

这取决于那个大块是什么。 也许你只是想删除一个段落,在这种情况下,一个下降会做。

有几种可能性,最好的取决于你工作的文本。

想到两种可能性:

  • 切换到视觉模式( VSV ,…),用光标移动select文本,然后按d
  • dap删除整个段落

如果整个块在屏幕上可见,则可以使用relativenumber设置。 请参阅:帮助relativenumber。 在7.3中可用

你可以把光标放在块的开始或结束处,并进入可视模式(shift-v)。 然后只需向上或向下移动,直到所需的块被突出显示。 最后,按y复制文本或按d剪切文本。

数线对我来说太单调乏味,但算“段落”并不是那么糟糕。 '{'和'}'分别将光标移动到光标前后的第一个空行。 游标移动操作可以与删除相结合,其他几个答案也使用了类似的方法(dd代表行,dG代表文档结尾)
例如:

 /* Lorem ipsum dolor sit amet, consectetur adipiscing elit. */ Lorem *ipsum(void) { return dolor(sit, amet); } 

如果光标在注释块上方开始,则“d”将删除注释块,“d2”将删除注释块和代码块。 如果你的光标在代码块的下面,'d {'删除代码,'d2 {'删除这两个代码。 当然,你可以先移动光标跳过一个块:'{d {'或'} d}'。

如果你符合你的空白,或者你可以一目了然地计算段落,这应该工作。 如果你感兴趣的话,Vim帮助文件有更多的光标技巧。

除了这里已经提到的其他动作之外,还有/{pattern}<CR>动作,所以如果您知道要删除包含foo的行,则可以执行dV/foo<CR>V在这里强制运动是线性的,因为默认情况下是字符。

您也可以input一个非常大的数字,如果您想删除光标下的所有行,请按dd

删除一段文字

假设你的光标位于块的开头:

 V/^$<CR>d (where <CR> is the enter/return key) 

说明

  • input“linewise-visual”模式: V
  • 突出显示,直到下一个空行: /^$<CR>
  • 删除: d

密钥绑定

更强大的解决scheme:

 :set nowrapscan :nnoremap DV/^\s*$\\|\%$<CR>d 

说明

  • 禁用search包裹:set nowrapscan
  • 重新映射D键(到以下命令) :nnoremap D
  • input“linewise-visual”模式: V
  • 突出显示,直到下一个空/空行或EOF: /^\s*$\\|\%$<CR>
  • 删除: d