在vim中,我经常发现自己删除(或复制)大块文本。可以计算文本行并说(例如)50dd
删除50行。
但是如何删除这一大块文本而不必知道要删除多少行呢?
答案 0 :(得分:286)
转到起始行并输入 m a (标记为“a”)。然后转到最后一行并输入 d ' a (删除以标记“a”)。
这将删除当前到标记的所有行(包括)。它也与vi
以及vim
兼容,因为您的环境不会受到后者的庇护。
答案 1 :(得分:277)
我不是vim guru,但我在这种情况下使用的是“视觉模式”。在命令模式下,键入V
(大写)。然后向上/向下移动以突出显示要删除的块(所有常用的移动命令都有效)。然后使用x
或d
将其删除。
答案 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)
有几种可能性,最好的取决于你所使用的文字。
有两种可能性浮现在脑海中:
V
,S-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)
V
/^$<CR>
d
更强大的解决方案:
:set nowrapscan
:nnoremap D V/^\s*$\\|\%$<CR>d
:set nowrapscan
D
密钥(以下命令): :nnoremap D
V
/^\s*$\\|\%$<CR>
d