在vim中,我经常发现自己删除(或复制)大块的文本。人们可以数一数文本的行数,并说(例如)50dd来删除50行。
但是如何在不知道要删除多少行的情况下删除这么大的文本块呢?
在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帮助文件有更多的光标技巧。
其他回答
删除一个文本块
假设你的光标位于块的开头:
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
您可以将光标放在块的开头或结尾,并进入可视模式(shift-v)。然后简单地向上或向下移动,直到所需的块突出显示。最后,通过按y复制文本或按d剪切文本。
这里有很多更好的答案,但为了完整起见,我将在阅读上面提到的一些很棒的答案之前,先介绍一下我曾经使用的方法。
假设您想从第24-39行删除。可以使用ex命令
:24,39d
您还可以使用
:24,39y
查找并替换第24-39行的使用
:24,39s/find/replace/g
您也可以输入一个非常大的数字,然后按dd,如果您希望删除光标下面的所有行。
有几种可能,哪种最好取决于你处理的文本。
我想到了两种可能:
切换到可视模式(V, S-V, ),用光标选择文本 移动并按d 用:dap删除整个段落