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