非対話モードでVIMスクリプトを実行することは可能ですか?


8

Gnatsバグトラッカーには、$ EDITORでチケットを開くコマンド(edit-pr)があります。私の$ EDITORはVIMです。このコマンドが$ EDITORでチケットを開くと、追加のキーストロークを行わなくても、スクリプトによる編集を自動的に実行したいと思います。

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

回答:


3

私はブヨを使ったことがないので、正確に何edit-prが行われるのかを言うのは難しいです。しかし、あなたが私たちに与えたものから、EDITOR env変数をカスタムシェルスクリプト、あるいは多分pythonスクリプトか何かに変更してみることができます。

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

しかし、私が言ったように、それがどのような編集を必要としているのか、またはエディターで何を行う必要があるのか​​わかりません。多分、自動化したいものの例を私たちに教えてくれたら?


gnatsコマンドは単なる例でした。私は一般的な解決策を探していましたが、あなたの答えは行く方法だと思います。ありがとう!
Matt Pfefferle、2011年

20

質問への回答はすでに得られていますが、他の人はこれが役に立つと思うかもしれません。

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

    vim -s commands.txt file

例:

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

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


14

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

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

"+[cmd]"引数を追加することで、コマンドを追加し続けることができます。ここで終了してエディターを開き、これらのコマンドを実行して待機するか、またはを追加し"+:wq"てファイルを保存して閉じます。

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


5

非対話モードで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で


とても便利な!どのリソースがVimのページャーを: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-バッファリングされていません...
ジョン・P
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.