如何在vim中反转选择?

Kev*_*nko 12 vim

使用V命令选择一系列行后,我想删除文件中未被选中的每一行,那么有没有一种方法可以反转选择——选择每一行未被选中的行?

喜欢怎么样

:g!/FOO/d
Run Code Online (Sandbox Code Playgroud)

删除包含FOO 的每一行。

如果我有一个范围并想使用它的倒数:

'a,'b
Run Code Online (Sandbox Code Playgroud)

我需要使用两个范围:

1,'a-1
Run Code Online (Sandbox Code Playgroud)

'b+1,$
Run Code Online (Sandbox Code Playgroud)

我怀疑这不能一步完成——但这会很好!

aki*_*ira 16

  1. 选择你的文字
  2. "*yggdG"*p 意思是 ...

    "*y    " yank it to the selection register
    ggdG   " delete everything
    "*p    " and paste the selection again 
    
    Run Code Online (Sandbox Code Playgroud)

  • ygg"_dGP 相同但更短。 (9认同)

小智 8

只为后人:

:v/\%V/d
Run Code Online (Sandbox Code Playgroud)

这对不属于选择的行执行反向全局。请注意 :v 是基于行的构造,因此任何包含任何选择的行,无论是行、流还是块选择,都不会被删除。


mru*_*cci 7

首先创建以下映射(例如绑定到<F4>键)

map <F4> :<C-U>1,'<-1:delete<CR>:'>+1,$:delete<CR>
Run Code Online (Sandbox Code Playgroud)

然后,在视觉模式下选择一个范围后,只需按<F4>即可触发相关命令。该命令可以很容易地分几部分解释:

  • " :" 进入命令行模式。
  • " <C-U>" 删除光标位置和行首之间的所有字符。
  • " 1,'<-1" 指定从文件的第一行到当前选择开始前的行的范围。
  • " :delete<CR>" 删除(先前指定的行范围)。
  • " :'>+1,$:delete<CR>" 删除" "范围内'>+1,$的行,即从选择结束后的行到文件末尾。

  • 只是解释一下:1,'&lt; - 1 是从第 1 行到选择开始的范围。'&gt; + 1,$ 是从选择后的第 1 行到最后的范围... (2认同)