1

vim exモードを使用したスクリプトを使用して、一連のファイルに対するいくつかの簡単な変更を自動化しようとしています。私がやりたいのは、パターンを検索し、それを現在の場所 (行全体ではなくパターンのみ) から削除し、ドキュメントの最後に貼り付けることです。

次の URL に役立つ提案がいくつかありますが、特別な関数を定義せずにこれを行う方法があるはずです。 http://vim.wikia.com/wiki/Copy_the_search_results_into_clipboard

おすすめは?

4

1 に答える 1

5

Ex コマンドは通常、行全体で機能します。ただし、コマンドを使用して、:sすべての一致をレジスタに「キャプチャ」し、ドキュメントの最後に貼り付けることができます。

:let @a=""
:%s//\=matchstr(setreg('A',submatch(0),'l'),'')/g
:$put a

説明:

  • a経由でレジスタを消去しますlet @a=""
  • 最後に使用した検索パターンを置き換えます: %s//....
  • \=置換として式 を使用します
  • submatch(0)一致したパターンを表します
  • a次の方法で、一致するパターンを行ごとにレジスタに追加します。setreg('A',submatch(0),'l')
  • ゼロを返すのでsetreg()、基本的には空の文字列に変換するために matchstr() を使用します
  • フラグを使用して、/g1 行に複数回一致させる
  • レジスターで収集された一致aを、文書の最後に貼り付けます。$pu a

詳細については、次を参照してください。

:h :let
:h :s
:h range
:h :s\=
:h submatch(
:h setreg(
:h matchstr(
:h :pu
:h registers
于 2012-11-12T22:09:44.187 に答える