在vim中,我经常发现自己删除(或复制)大块的文本。人们可以数一数文本的行数,并说(例如)50dd来删除50行。
但是如何在不知道要删除多少行的情况下删除这么大的文本块呢?
在vim中,我经常发现自己删除(或复制)大块的文本。人们可以数一数文本的行数,并说(例如)50dd来删除50行。
但是如何在不知道要删除多少行的情况下删除这么大的文本块呢?
当前回答
这里有很多更好的答案,但为了完整起见,我将在阅读上面提到的一些很棒的答案之前,先介绍一下我曾经使用的方法。
假设您想从第24-39行删除。可以使用ex命令
:24,39d
您还可以使用
:24,39y
查找并替换第24-39行的使用
:24,39s/find/replace/g
其他回答
你也可以使用可视化模式(一些命令也可以使用删除选项) 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
删除一个文本块
假设你的光标位于块的开头:
V/^$<CR>d (where <CR> is the enter/return key)
解释
进入“直线-视觉”模式:V 高亮直到下一个空行:/^$<CR> 删除:d
密钥绑定
一个更健壮的解决方案:
:set nowrapscan
:nnoremap D V/^\s*$\\|\%$<CR>d
解释
禁用搜索换行::set nowrapscan 重新映射D键(到以下命令) 进入“直线-视觉”模式:V 高亮直到下一个空/空白行或EOF: /^\s*$\\|\%$<CR> 删除:d
回到起跑线,输入ma(标记“a”)。然后转到最后一行,输入d'a(删除以标记“a”)。
这将删除从当前到标记的所有行(包括)。它还兼容vi和vim,如果您的环境不支持后者的话。
如果整个块在屏幕上可见,您可以使用相对编号设置。参见:help relativenumber。7.3版提供
如果你通过set number打开行号,你可以简单地dNNG,它将从当前位置删除到行NN。因此,您可以导航到您希望删除的行开头,并简单地d50G,假设这是您希望删除的最后一行。