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

但是如何在不知道要删除多少行的情况下删除这么大的文本块呢?


当前回答

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

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

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

如果游标从注释块上方开始,'d}'将删除注释块,'d2}'将同时删除注释块和代码块。如果光标从代码块下方开始,'d{'删除代码,'d2{'删除两者。当然,您可以通过先移动光标跳过一个块:'{d{'或'}d}'。 如果你的空格是一致的,或者你可以一眼数一数段落,这应该是有效的。如果您感兴趣,Vim帮助文件有更多的光标技巧。

其他回答

你也可以使用可视化模式(一些命令也可以使用删除选项) 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                  

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

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

有几种可能,哪种最好取决于你处理的文本。

我想到了两种可能:

切换到可视模式(V, S-V, ),用光标选择文本 移动并按d 用:dap删除整个段落

如果你通过set number打开行号,你可以简单地dNNG,它将从当前位置删除到行NN。因此,您可以导航到您希望删除的行开头,并简单地d50G,假设这是您希望删除的最后一行。