在使用命令选择一系列行后V
,我想删除文件中未选择的每一行,那么有没有一种方法可以反转选择——选择未选择的每一行?
就像
:g!/FOO/d
删除每一行不是包含富。
如果我心中有一个范围并想使用它的逆:
'a,'b
我需要使用两个范围:
1,'a-1
和
'b+1,$
我认为这不可能一步完成——但如果能做到就好了!
答案1
首先创建以下映射(例如绑定到<F4>
键)
map <F4> :<C-U>1,'<-1:delete<CR>:'>+1,$:delete<CR>
然后,在可视模式下选择一个范围后,只需按<F4>
即可触发相关命令。该命令可以很容易地分为几部分解释:
- “
:
”进入命令行模式。 - “
<C-U>
”删除光标位置和行首之间的所有字符。 - “
1,'<-1
”指定从文件第一行到当前选择开始前一行的范围。 - “
:delete<CR>
”删除(之前指定的行范围)。 - “
:'>+1,$:delete<CR>
” 删除“”范围内的行'>+1,$
,即从选择结束后的行到文件末尾。
答案2
- 选择文本
"*yggdG"*p
意思是 ..."*y " yank it to the selection register ggdG " delete everything "*p " and paste the selection again
答案3
仅供后人参考:
:v/\%V/d
这会针对不属于选择的行执行逆全局操作。请注意,:v 是基于行的构造,因此任何包含任何选择的行(无论是行、流还是块选择)都将被保留不被删除。
答案4
因为“反转”基本上意味着创建“多重选择”(原始选择之前和之后的区域),所以我再次搜索了 vimscriptshttp://www.vim.org/scripts/script.php?script_id=953。 尝试这个。
There are a number of operations to very
easily manipulate selections such as modifying
the regions (add/delete/inverte/clear), hiding,
refreshing, saving and restoring etc."