2009-04-21 15 views
3

VIMで「hello」という単語が含まれていない行をすべて選択するにはどうすればよいですか?私はそれをヤンクしてからファイルに保存する必要があります。どうしたらいいですか?あなたは、このコマンドを使用することができ、あなたのシステムにgrepを持って提供VIMでの線形選択

:v/!(hello) > file

答えて

11
:g!/hello/ yank A 

ラインは現在、彼らは「AP

編集を行う貼り付けるために、レジスタAに格納されています

:g =グローバル検索
!=ブールテストの否定
/hello/=「hello」と一致する正規表現
y =一致する各行(この場合は「yank」)で実行するコマンド
A = "yank"コマンドへの引数のレジスタ。この場合、レジスタ 'a'は大文字の形で置き換えるのではなく、レジスタに追加することを意味します。

+3

:vは:g!と同等です。 – sjh

+0

ああ、そのdysmsydのおかげで。私は実際にそれをたくさん使用します。 – bfabry

+0

あなたの答えは質問の残りの部分に答えてくれないようです: ">ファイル"。人々が賞金の中で返信を再評価しよう。 –

9

:私のようなものを探しています

:!grep -v hello % > file 
+0

「%」はgrepのための特別な文字ではない、それはvimのコマンドラインのための特別な文字で、以下を参照してくださいヘルプCMDLINE-特別 – user55400

5

私は通常

:g/hello/d 

のいくつかのバリエーションでこれを行いますすなわち「hello」を含むすべてを削除し、次に選択するか、取り消すか、何をする必要があるかを決定し、最後にuを押し戻します。 これは、精神的に税金が少なく、コマンドラインパイプを構築することが少なくなっています。

+0

これは、同じ問題に私のものよりもはるかに短いコマンドです。 –

1

を選択して、新しいファイルに書き込む:Vimのコマンド

:let @a='' | g!/hello/normal "Ayy 

した後は、レジスタ 'A' に 'ハロー' を持っていないすべての行を持つことになります

:g/hello/ . w!>> file 
+0

+1 - helloを含まないすべての行を選択するには、そのg /をv /に切り替える必要があります。 – rampion

+2

どうしますか?平均? –

0

。あなた「AP通常のコマンドを使用して、その値を貼り付けるか、

:let @*[email protected] 

をシステムクリップボードにこの値を入れて、あなたは、WindowsまたはMac OSや「マウスの中で 『Cmdを+ V』にし、 『はCtrl + V』を使用することができますすることができます「テキストを貼り付けるために、Linux上で魔法の

簡単な説明。:

@aはに格納された値にバインドされているVimの変数である 『クリック』レジスタ
」。 p"bp" cp、..は特定のレジスタの値を超えてVimノーマルモードでのキーの組み合わせです。
@ *は、システムクリップボードにバインドされたVim変数です。
@ a = @a「a」の値をシステムクリップボードに入力します。

これを.vimrcに追加するか、またはプラグインディレクトリでファイルを作成します。

CopyUnmatchedLines hello 

してからちょうど任意のエディタに貼り付けコマンドを使用します。

function s:copy_unmathced_lines(pattern) 
    let result_lines = [] 

    for line in getline(1, '$') 
     if line !~ a:pattern 
     call add(result_lines, line) 
     endif 
    endfor 

    let @* = join(result_lines, "\n") 
endfunction 

command -nargs=1 CopyUnmatchedLines call s:copy_unmathced_lines(<q-args>) 

ユースケースは簡単です。 これはVIMに何を意味するのかに興味がある方のため

:g!/hello/y A 

と省略することができます::

+0

この回答はとても涼しいようですが、なんとなく分かりにくいです。おそらく、物事が表面の下でどのように働くかを誰かが答えて明らかにすることができます。 "@a"や "let"のような奇妙なものは何ですか? ex、vimまたは何か他のもの? –

6

これまでに言及していなかった代替案がredirectonです。

だからあなたの場合のために、これは

:redir > file 
:g!/hello/ 
:redir END 

も参照

:help redir 
:help verbosefile 
4

FGMの答えはほとんどあり

だっただろう:Vはそう

に一致しない行を選択します以下は、 "hello"を含まない行をeeeというファイルに追加し、iを作成します必要に応じてt。

:v/hello/ . w!>>eee 
0

Blixtorのスニペットと実用例: ":verbosefile" で失われたメールfriends。

I.オープンマニュアル ":電子を/ tmp/NEW_FILE" と ":時間verbosefile"、その後のコピー・猫blixtorの先端みましょう:

:redir > /tmp/verbosefile_instructions 
:g/verbosefile/ 
:redir END 

IIを。あなたのメールのレグに関する標準的なルールに従っていることを確認し、標準的な挨拶を出してください:

:match ErrorMsg /\%>73v.\+/ 
:so /bin/greetings.vim 

III。 Muttでファイルを送信してください。視覚的な選択とコピーについて

0

例:はあなたが一部を分離するとします:

  1. ビジュアル選択し、それを押し ":"

  2. が、その後のコマンドを使用します。

    : '<、'>! > ../new_file_in_a_subdirectory

エラー:色がファイルにコピーされ、それが実際にカットアンドペーストではなく対処されていません。

1

かなりストレートです。

:v/hello/ |redir >> file 
関連する問題