Gnatsバグトラッカーには、$ EDITORでチケットを開くコマンド(edit-pr)があります。私の$ EDITORはVIMです。このコマンドが$ EDITORでチケットを開くと、追加のキーストロークを行わなくても、スクリプトによる編集を自動的に実行したいと思います。
このように非対話的に実行できるVIMスクリプトを作成する方法はありますか?
Gnatsバグトラッカーには、$ EDITORでチケットを開くコマンド(edit-pr)があります。私の$ EDITORはVIMです。このコマンドが$ EDITORでチケットを開くと、追加のキーストロークを行わなくても、スクリプトによる編集を自動的に実行したいと思います。
このように非対話的に実行できるVIMスクリプトを作成する方法はありますか?
回答:
私はブヨを使ったことがないので、正確に何edit-pr
が行われるのかを言うのは難しいです。しかし、あなたが私たちに与えたものから、EDITOR env変数をカスタムシェルスクリプト、あるいは多分pythonスクリプトか何かに変更してみることができます。
EDITOR=/path/to/script.(sh|py) edit-pr <args>
しかし、私が言ったように、それがどのような編集を必要としているのか、またはエディターで何を行う必要があるのかわかりません。多分、自動化したいものの例を私たちに教えてくれたら?
質問への回答はすでに得られていますが、他の人はこれが役に立つと思うかもしれません。
Vimコマンドは、-s
オプションを使用して実行されるファイルでも指定できます。
vim -s commands.txt file
例:
echo 'gg=G' > indent.txt
echo ':wq' >> indent.txt
vim -s indent.txt file
これはVimを使用してファイルの内容をインデントし、保存して終了します。
非対話モードでvimを実行するには、最初のファイルが読み取られた後にvimコマンドを実行できるようにする+{command}
/ -c {command}
または-s
パラメーターを使用できます。
以下のいくつかの例を確認してください。
パイプを使用した単純な標準入出力は、次のコマンドで実現できます。
$ echo Example | vim -es '+:wq! /dev/stdout' /dev/stdin | cat
1つのファイルを編集して変更を別のファイルに保存するには:
$ 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で
:hi
サポートしているの-- More -- SPACE/d/j: screen/page/line down, b/u/k: up, q: quit
か、たとえば、どこがスクロール可能で、どこに表示されるのか、などのアイデアはありますか?バッファリストには表示されず:w
、空のファイルが書き込まれます(「Enter」キーを押すとページャーがスクロールまたは終了します)。スクロール:redir! >file | :hi | :redir END
するだけキャプチャするを使用できます。機械的には2方向のように機能すると思いますmore
。私は、なぜ不思議に持っている:help
と:hi
、両方のページングまたは両方がRO-バッファリングされていません...