vim – 如何删除一大块文本不计算行?
在vim中,我经常发现自己删除(或复制)了大块的文本。 可以统计文本的行数,并说(例如) 50dd
删除50行。
但是,如何删除这个大块的文本而不必知道要删除多less行呢?
我不是vim大师,但是我在这种情况下使用的是“视觉模式”。 在命令模式下,键入V
(大写)。 然后向上/向下移动以突出显示要删除的块(所有常用的移动命令都可以)。 然后用x
或d
删除它。
转到起始行并键入m a (标记“a”)。 然后到最后一行inputd' a (删除标记“a”)。
这将删除从当前到标记的所有行(包括)。 它也与vi
和vim
兼容,因为你的环境不受后者的欢迎。
你也可以使用视觉模式(一些命令也可以使用删除选项) vip vapselect段落, v2apselect两个段落dap works, d2ap也可以。 你可以在[
]
块内删除像da [
供参考:对象的types。 从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
这里有很多更好的答案,但为了完整起见,我会在阅读上面提到的一些很好的答案之前提及我以前使用的方法。
假设你想从24-39行删除。 你可以使用ex命令
:24,39d
你也可以使用拉线
:24,39y
并find并replace使用24-39行
:24,39s/find/replace/g
如果你通过set number
打开行号,你可以简单的dNNG
它从当前位置删除到NN行。 所以你可以导航到你想要删除的行的开始,只需d50G
假设这是你想删除的最后一行。
这取决于那个大块是什么。 也许你只是想删除一个段落,在这种情况下,一个下降会做。
有几种可能性,最好的取决于你工作的文本。
想到两种可能性:
- 切换到视觉模式(
V
,SV
,…),用光标移动select文本,然后按d
- 用
dap
删除整个段落
如果整个块在屏幕上可见,则可以使用relativenumber设置。 请参阅:帮助relativenumber。 在7.3中可用
你可以把光标放在块的开始或结束处,并进入可视模式(shift-v)。 然后只需向上或向下移动,直到所需的块被突出显示。 最后,按y复制文本或按d剪切文本。
数线对我来说太单调乏味,但算“段落”并不是那么糟糕。 '{'和'}'分别将光标移动到光标前后的第一个空行。 游标移动操作可以与删除相结合,其他几个答案也使用了类似的方法(dd代表行,dG代表文档结尾)
例如:
/* Lorem ipsum dolor sit amet, consectetur adipiscing elit. */ Lorem *ipsum(void) { return dolor(sit, amet); }
如果光标在注释块上方开始,则“d”将删除注释块,“d2”将删除注释块和代码块。 如果你的光标在代码块的下面,'d {'删除代码,'d2 {'删除这两个代码。 当然,你可以先移动光标跳过一个块:'{d {'或'} d}'。
如果你符合你的空白,或者你可以一目了然地计算段落,这应该工作。 如果你感兴趣的话,Vim帮助文件有更多的光标技巧。
除了这里已经提到的其他动作之外,还有/{pattern}<CR>
动作,所以如果您知道要删除包含foo的行,则可以执行dV/foo<CR>
。 V
在这里强制运动是线性的,因为默认情况下是字符。
您也可以input一个非常大的数字,如果您想删除光标下的所有行,请按dd
。
删除一段文字
假设你的光标位于块的开头:
V/^$<CR>d (where <CR> is the enter/return key)
说明
- input“linewise-visual”模式:
V
- 突出显示,直到下一个空行:
/^$<CR>
- 删除:
d
密钥绑定
更强大的解决scheme:
:set nowrapscan :nnoremap DV/^\s*$\\|\%$<CR>d
说明
- 禁用search包裹
:set nowrapscan
- 重新映射
D
键(到以下命令):nnoremap D
- input“linewise-visual”模式:
V
- 突出显示,直到下一个空/空行或EOF:
/^\s*$\\|\%$<CR>
- 删除:
d