質問
Vim (またはプラグイン) で用語を検索し、検索結果を反復処理する方法はありますか? n
Vim では)、行ではなく列で?つまり、私のファイルが次のようなものだったとします。
foo1 bar bar
baz baz foo3
baz baz foo4
foo2 bar bar
検索したら foo
結果を 1、2、3、4 の順に繰り返したいと思います。通常は n
1、3、4、2の順に見ていきます。
たとえば、列がフィールドを表す巨大な固定幅データ ファイルまたは CSV ファイルの検索結果を参照したいと考えています。
(代わりに Emacs でそれを行う方法も考えます。:)
解決
この質問を見た後、それを処理する vim プラグインを作成してみることにしました。初めての vim プラグインなので、かなりひどいかもしれません。ただし、あなたが挙げた例では機能します。
プラグインは vim.org からダウンロードできます。 SearchCols.vim
同じサイトの multvals プラグインも必要であることに注意してください。 multvals.vim
コマンドを作成します :SearchCols <string>
, を検索するために使用できます。 <string>
固定幅の列で、最初に最初の列、次に 2 番目の列などを検索します。vim の標準である行ごとの検索ではなく、経由でコマンドを繰り返します @:
その後 @@
コロンコマンドなので。
仮定:
- ファイルが空白で区切られた固定幅の列でフォーマットされていると仮定します。データ項目内にはスペースはなく、データ項目の間にのみスペースが存在します。
- ファイルの最初の行が、そこから列幅を推定できるようにフォーマットされていると仮定します。
私が考えることができる明らかな改善点は、次の項目を検索することを使用するよりも簡単にすることです。 @:
そして @@
, 、検索の強調表示を含む (コードは存在しますが、使用しているためコメントアウトされています) :match
そしてあなたは使用する必要があります :match none
オフにする)、multvals.vim への依存関係を排除します。
他のヒント
編集:私はちょうどテーブルのためのvimの正規表現を使用しての概要を説明したここに。 (これはあまりにも動作しますが、)それは私の素人の試みより多くのクリーナーです):
^foo
を検索する第二のカラムを検索し、.*\ foo
第三検索する一方、最初の列を検索する.*\ .*\ foo
探し。
それは行の先頭からブロック全体が一致するので、これは当然の完全ではないので、foo3とfoo4がありますが、位置0にカーソルを置きます。
ただし録画機能でこれを自動化することができます。まさに、通常モードで次のように入力します:
qa/.*\ .*\ foo
/foo
q
(私はあなたがリターンキーを押す必要があることを示すために新しい行を使用している場合)。
これは(QaはB下、QBなどの下記録を開始)レジスタの下に2つの検索を置きます。今@a
をヒットし、あなただけの3番目の列を検索する必要があります....
私はあなたが列番号を取るコマンドにこれを回すことができると確信しているが、私は、今オフごめんなさい:)