私はあなたとまったく同じ欲望を持っていました。通常のvimコマンドを書き、それらにパイプラインストリームを編集させたかったのです。デフォルトのvimオプションで提供されているように、この方法で通常のvimを使用するのが難しい(非常に多くのフラグ!)ことに失望しました。
そのため、vimにhttps://github.com/MilesCranmer/vim-stream/の小さなラッパーを作成しました。という名前vims
です。
ラッパーの中心は次のコマンドです。
vim - -nes "${vim_cmds[@]}" -c ':q!' | tail -n +2
これを使用して、コマンドを生成すると、非常に簡潔になり、vimはモーダルエディターであるためvims
、モーダルストリームエディターを作成しました。パイプライン編集の考え方に役立つ3つの主なモードがあります。
[-t|--turn-off-mode] - (Default mode)
Every string is a vim command line, e.g., '%g/foo/d' deletes
all lines with foo.
[-e|--exe-mode] - Translated to '%g/$1/exe "norm $2"', see examples below
[-s|--simple-mode] - Like exe-mode, but runs on 1st line only
これを見て:
$ echo "Hello World" | vims -s "ea Beautiful"
Hello Beautiful World
したがって、e
の最後に移動してから、追加Hello
をa
開始します。
exeモードで、を含む行をコメントアウトしmy_bad_var
、前の行を削除するための、より洗練されたもの
cat my_script.cpp | vims -e 'my_bad_var' 'I//\<esc>kdd'
どちらに変換vims '%g/my_bad_var/exe "norm I//\<esc>kdd"'
- I
行の先頭に挿入を開始するコマンドであること、および//
コメントの配列です。
\<esc>kdd
エスケープキーを押して、行を上に移動してから行を削除します。
リポジトリには合計11の例がありますので、ぜひチェックしてみてください。繰り返しになりますが、これはvimの上で実行されます。これは、vimをストリーム入力用のsedに近づける方法にすぎません(ただし、すべての最愛のvimマクロを保持します!)
|
文字パイプを別のコマンドの出力。wea-this
コマンドではありません。配管を使用して、目的の処理を実行することもできません。Vimの標準入力がキーボードではなく、左側のアプリケーションになります。vimのバッファーにstdinを取得する場合は、ファイル名のマイナス記号で開始しますecho Hello, world! | vim -
。