非対話型モードでVIMスクリプトを実行できますか?

非対話型モードでVIMスクリプトを実行できますか?

Gnatsのバグトラッカーには、$ EDITORでチケットを開くコマンド(edit-pr)があります。私の$ EDITORはVIMであり、このコマンドが$ EDITORでチケットを開くときに追加のキー入力なしでいくつかのスクリプト編集を自動化したいと思います。

このように非対話式で実行できるVIMスクリプトを作成する方法はありますか?

答え1

あなたの質問に対する回答をすでに受け取っていても、他の人はこの回答が役に立つと思うかもしれません。

Vim コマンドは、次のオプションを使用して実行されるファイルにも指定できます-s

    vim -s commands.txt file

例:

    echo 'gg=G' > indent.txt
    echo ':wq' >> indent.txt
    vim -s indent.txt file

その後、Vimを使用してファイルの内容をインデントし、保存して終了します。

答え2

プログラムを実行すると、次のようにコマンドラインでVimコマンドを指定できます。

vim file.txt "+:s/foo/bar/g"

"+[cmd]"パラメータを追加してコマンドを追加することもできます。ここで終了すると、エディタが開き、このコマンドを実行して待つか、1つを追加して"+:wq"ファイルを保存して閉じることができます。

vimscript構文を使用してスクリプトを作成し、ファイルが開かれたときに呼び出される関数でラップするか、上記の構文を使用して別のスクリプトにインポートしてバッファに適用することもできます。

答え3

非対話型モードで vim を実行するには、+{command}/-c {command}または-s引数を使用すると、最初のファイルを読み込んだ後に vim コマンドを実行できます。

以下でいくつかの例を確認してください。

パイプを使用した単純な標準入力と出力は、次のコマンドで実行できます。

$ echo Example | vim -es '+:wq! /dev/stdout' /dev/stdin | cat

あるファイルを編集し、変更を別のファイルに保存するには:

$ vim -es '+:0,$s/127/128/g' '+:wq! new_file' /etc/hosts
$ cat file1 file2 | vim - -es '+:0,$s/foo/test/g' '+:wq! file3'

-s {scriptin}ファイルを適切に編集するには、読み取りスクリプトファイルを使用できます。たとえば、次のようになります。

$ echo ':0,$s/foo/test/ge' > cmds.txt
$ echo ':wq' >> cmds.txt
$ vim -s cmds.txt -es file

ファイルを解析してパイプ出力に送信するには、次のことを試すことができます。

$ cat /etc/hosts | vim -es '+:0,$s/127/128/g' '+%print' '+:q!' /dev/stdin | cat

または:

$ cat /etc/hosts | vim -es '+:0,$s/127/128/g' '+:wq! /dev/stdout' /dev/stdin | cat

もっと見る:非対話型(パイプラインなど)でファイルを編集するにはどうすればよいですか?Vim SEから

答え4

edit-pr私は蚊を使ったことがないので、正確に何をすべきかを教えてくれません。しかし、あなたが提供した情報に基づいて、EDITOR環境変数をカスタムシェルスクリプト、おそらくPythonスクリプトなどに変更することができます。

EDITOR=/path/to/script.(sh|py) edit-pr <args>

しかし、前述したように、どのような編集をしたいのか、エディタではどのような作業をすべきかわかりません。自動化したい作業の例を挙げることができますか?

関連情報