如何在 vim 中反转选择?

如何在 vim 中反转选择?

在使用命令选择一系列行后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

  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."

相关内容