ファイルのフォルダー全体で関数またはマクロを実行するにはどうすればよいですか?


11

という名前の関数があるとしStripWhitespaceます。

ファイルを開いてを実行すると、1つのファイルで実行できます:StripWhitespace

ファイルのフォルダーに対してその関数を自動的に実行し、結果を保存する方法を教えてください。


3
詳細はどうぞ!
200_success

回答:


9

-c引数を使用して、起動時に次のコマンドを実行できますvim(1)

   -c {command}
               {command} will be executed after the first  file  has  been
               read.   {command}  is interpreted as an Ex command.  If the
               {command} contains spaces it must  be  enclosed  in  double
               quotes  (this depends on the shell that is used).  Example:
               Vim "+set si" main.c
               Note: You can use up to 10 "+" or "-c" commands.

例:

vim -c ':call StripWhitespace()' file1 file2

後で終了するには、次を追加し| :wqaます:

vim -c ':call StripWhitespace() | :wqa' file1 file2

1
:argdoが必要です。これをコマンドラインでいくつかのファイルに対して実行する場合
Christian Brabandt

18

すでにVimを使用している:argdo場合は、または:bufdoコマンドを使用して、引数リストまたはバッファリストのすべての項目に対してそれぞれコマンドを実行できます。

たとえば:、引数リストのすべてのファイルに対してコマンドを実行するには、次のようにします。

:argdo StripWhitespace

または、バッファリスト内のすべてのファイルから関数を呼び出すには:

:bufdo call StripWhitespace()

またはq、引数リストのすべてのファイルでマクロを実行するには:

:argdo normal @q

次に、変更されたすべてのバッファを:wallで保存するか、すべて保存してVimを終了し:wqallます。

途中でファイルを書き込む場合は、次のようにへの呼び出しを追加できます:update

:argdo s/foo/bar/ge | update

ファイルを最初にVimに取り込むには、さまざまな方法があります。

  • vimコマンドラインにパラメーターを指定しますvim *(これにより、すべてのファイルが引数リストに追加されます)。
  • 使用する:args引数リスト、または移入する(ワイルドカードとバッククォート式をサポート)コマンドを:argadd、そこにファイルを追加するには、コマンドを
  • 、、またはファイルを開くプラグインを使用して:e、すべて手動で:Ex開きます。

1
Vimを離れる必要がないため、この回答が好きです。私の意見では、これは高すぎる(私の貴重なバッファリストです!)。私はいくつかの注意事項を持っています:(1)書き込みなしでバッファを残す'hidden'には設定が必要です。(2): updateコマンドがオーバーわずかな改善である:wので、変更が行われた場合にのみ書き込むため:bufdo updateか、:argdo updateすべての変更のバッファまたは引数を記述します。
tommcdo 2015

良い点updatehidden答えを書いているときに言及することを検討しましたが、過度に複雑にしたくないので反対しました。反省については、そこにあるはずです。回答を更新して、現在両方の提案を含めます。
リッチ

@tommcdo:wallのドキュメントを確認したところ、変更されたバッファのみが書き込まれるため、結局:bufdoの更新は必要ありません。
リッチ

についての良いキャッチ:wall。これには、バッファを循環させず、開始した場所から離れるという利点もあります。私:argdo updateはまだ別の話だと思います-おそらくあなたはあなたの引数リストにないバッファに書きたくないでしょう。
tommcdo 2015

@tommcdo良い点。
リッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.