vim - 如何在不计算行数的情况下删除大块文本?

时间:2011-03-19 13:29:16

标签: vim

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

但是如何删除这一大块文本而不必知道要删除多少行呢?

13 个答案:

答案 0 :(得分:286)

转到起始行并输入 m a (标记为“a”)。然后转到最后一行并输入 d ' a (删除以标记“a”)。

这将删除当前到标记的所有行(包括)。它也与vi以及vim兼容,因为您的环境不会受到后者的庇护。

答案 1 :(得分:277)

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

答案 2 :(得分:44)

您也可以使用可视模式(某些命令也可以与删除选项一起使用) vip vap 选择段落, v2ap 选择两个段落 dap 也适用, d2ap 。您可以在[ ]的块内删除,例如 da [

供参考:对象的类型。 从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                  

答案 3 :(得分:36)

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

假设您要从第24-39行删除。您可以使用ex命令

:24,39d

你也可以使用

划线
:24,39y

使用

查找并替换24-39行
:24,39s/find/replace/g

答案 4 :(得分:11)

如果您通过set number启用了行号,则只需dNNG即可从当前位置删除NN行。因此,您可以导航到要删除的行的开头,只需d50G,假设这是您要删除的最后一行。

答案 5 :(得分:10)

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

答案 6 :(得分:7)

有几种可能性,最好的取决于你所使用的文字。

有两种可能性浮现在脑海中:

  • 切换到可视模式(VS-V, ...),用光标选择文本 移动并按d
  • 使用以下内容删除整个段落:dap

答案 7 :(得分:6)

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

答案 8 :(得分:3)

您可以将光标放在块的开头或结尾,然后进入可视模式(shift-v)。然后只需向上或向下移动,直到突出显示所需的块。最后,按y复制文本或按d切割文本。

答案 9 :(得分:3)

除了此处已提及的其他动作外,还有/{pattern}<CR>动作,因此如果您知道要删除包含foo的行,则可以执行dV/foo<CR>V此处强制移动是行式的,因为默认情况下/是字符。

答案 10 :(得分:3)

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

/* Lorem ipsum dolor sit amet, consectetur adipiscing elit. */

Lorem *ipsum(void) {
  return dolor(sit, amet);
}

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

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

答案 11 :(得分:1)

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

答案 12 :(得分:1)

删除文本块

假设光标位于块的开头:

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

解释

  • 输入&#34; linewise-visual&#34;模式: V
  • 突出显示直到下一个空行: /^$<CR>
  • 删除: d

键绑定

更强大的解决方案:

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

解释

  • 禁用搜索包: :set nowrapscan
  • 重新映射D密钥(以下命令): :nnoremap D
  • 输入&#34; linewise-visual&#34;模式: V
  • 突出显示,直到下一个空/空白行或EOF: /^\s*$\\|\%$<CR>
  • 删除: d
相关问题