如何删除一个大的文本块而不计算行?

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

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

192011 次浏览

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

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

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

我想到了两种可能:

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

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

转到起始线并键入一个(标记“a”)。然后转到最后一行,输入d一个(删除以标记“a”)。

这将删除从当前到标记的所有行(包括)。它还兼容vivim,如果你的环境不支持后者的话。

你也可以使用可视模式(一些命令也可以使用删除选项) 贵宾 特许经销商选择段落,v2ap选择两个段落 >有效,d2ap也有效。你可以像达(一样在[ ]块内删除

供参考:对象类型。 来自vim文档:第4节。http://vimdoc.sourceforge.net/htmldoc/visual.html < / p >

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

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

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

如果整个块在屏幕上可见,您可以使用相对编号设置。参见:help relativenumber。7.3版提供

这里有很多更好的答案,但为了完整起见,我将在阅读上面提到的一些很棒的答案之前,先介绍一下我曾经使用的方法。

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

:24,39d

您还可以使用

:24,39y

查找并替换第24-39行的使用

:24,39s/find/replace/g

你也可以输入一个非常大的数字,然后按dd如果你想删除光标下面的所有行。

删除一个文本块

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

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

解释

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

密钥绑定

一个更健壮的解决方案:

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

解释

  • 禁用搜索换行::set nowrapscan
  • 重新映射D键(到以下命令)
  • 进入"linewise-visual"模式:V
  • 高亮直到下一个空/空白行或EOF: /^\s*$\\|\%$<CR>
  • 删除:d
计数行数对我来说太乏味了,但计数“段落”也没那么糟糕。'{'和'}'分别将光标移动到光标前面和后面的第一个空行。光标移动操作可以与删除相结合,其他几个答案使用了类似的方法(dd表示一行,dG表示文档的末尾,等等)。
例如:< / p >
/* Lorem ipsum dolor sit amet, consectetur adipiscing elit. */


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

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