vimで選択を反転する方法は?


12

Vコマンドで行の範囲を選択した後、選択されていないファイルのすべての行を削除したいので、選択を反転する方法はありますか?選択されていないすべての行を選択しますか?

どうやって

:g!/FOO/d

ないすべての行を削除しないで含まれていFOOを

範囲を考えていて、その逆を使用したい場合:

'a,'b

2つの範囲を使用する必要があります。

1,'a-1

そして

'b+1,$

これは1ステップで行うことはできないと思いますが、それは素晴らしいことです!


「クロップ」スタイルの操作が必要ですか?
いんちきのキホーテ2009年

回答:


7

最初に次のマッピングを作成します(たとえば、<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、 '<-1は、行1から選択の開始までの範囲です。「> + 1、$は終わり件まで選択後の1行の範囲は...ある
アキラ

1つの「削除」コマンドだけでそれを行う方法はありますか?
ケビン・パン粉

1
@Kevin Panko:範囲を単一の式に結合する必要があります。私はドキュメントを見てきましたが、範囲構文がそのようなことをサポートしているとは思いません。 vimdoc.sourceforge.net/htmldoc/cmdline.html#cmdline-ranges ,,, vim.wikia.com/wiki/Ranges
クワックキホーテ2009年

15
  1. テキストを選択してください
  2. "*yggdG"*p つまり...

    "*y    " yank it to the selection register
    ggdG   " delete everything
    "*p    " and paste the selection again 
    

9
YGG「_dGPは同じですが短くなります。
ケビンパン粉

1
最終的には同じテキストが表示されます:)
akira

akiraとKevin Pankoの回答を参照したいだけです(コメントは追加できません)。「[o] pposite [d] elete in(v)isual mode vmap od ygg "_dGP
Marcin Rogacki

github.com/maxbrunsfeld/vim-yankstackのようなプラグインは、このアプローチを簡単にします。削除によってヤンクレジスタが破損することを心配する必要はありません。
ジャックオコナー

これをキーボードマッピングとしてどのように追加でき.vimrcますか?私はいくつかの試みを試みましたが、まだ得ていません。私の試みであったmap <F4> n"*yggdG"*p nmap <F4> "*yggdG"*p
ブラッド・パークス

7

後世のためだけに:

:v/\%V/d

これは、選択の一部ではない行で逆グローバルを行います。:vは行ベースのコンストラクトであるため、行、ストリーム、またはブロック選択などの選択を含む行は削除されません。


1

「multiselections」(元の選択の前と後のエリア)を作成するために、基本的な手段を「反転」以来、私は再びvimscriptsを検索http://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."
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.