正規表現の一致に通常モードのコマンドを適用する


10

次の正規表現を使用して、Clojure関数定義の下のドキュメンテーション文字列を照合しています。

\vdefn.*\n\s*\zs"([^"]|\n)*"

gq特定のファイル内のこのパターンのすべての一致で通常モード(フォーマット行)コマンドを実行する方法はありますか?

回答:


10

の力g

:g/\vdefn.*\n\s*\zs"([^"]|\n)*"/normal gngq

/sの間の部分は、元の質問の正規表現であるため、かなり自明です。

normal gngq最後に少し興味深いです。gnは、正規表現の次の一致を選択し、gqもちろん、この選択をフォーマットします(質問で述べたとおり)。

:g本当に素晴らしい部分です。私の意見では、これはVimの最も便利な機能の1つです。gEXコマンドは、正規表現とExコマンドを受け取り、それがすべての行に正規表現マッチをコマンドを実行します。まだ学習して:gいない場合は、生産性が大幅に向上するので、そうすることを強くお勧めします。いくつかのリソースは、Vim独自のもの:help :gか、Vim wikiのPower of gです。


gnピースがラインから選択されるVようにトリガされ、次のパターンの発生(同一線上にないもの)。Vimのドキュメントには、ビジュアルモードがアクティブな場合、選択範囲が現在の行から次のパターンまで拡張されると記載されています。これは望ましくない動作を引き起こしています。

@merbおっと、それに気づかなかった。編集。
ドアノブ2015

選択は、マッチの行から次のマッチまでです。通常モードのコマンドを手動でステップ実行//s<cr>すると、現在の行での一致の先頭に移動しますが、現在の//e<cr>一致ではなく次の一致の最後に移動します。

1
問題はにあるよう//s<cr>Vです。実行する:normal Vと、期待どおりにビジュアルラインモードになります。実行すると、予想どおり:normal //s<cr>カーソルが最初"の試合に移動します。実行する:normal //s<cr>Vと、視覚的な選択が表示されません。

1
解決しました。コマンドはである必要がありますnormal gngq。編集を提案しています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.