シェルスクリプトとvimマクロを使用して、UNIX環境でデータ処理を行っています。手順は次のとおりです。
- grep を使用して、ログ ファイルから有用な行をいくつか取得します。
- vim 内のマクロは、データを操作するために使用されます。
- ここでも、シェル スクリプトを使用してデータを処理します。
多くのファイルに対してこれを行う必要があります。それで、特別なラッパーを介してシェルスクリプトでvimのマクロを呼び出す方法があるのだろうかと思っています。
記録されたマクロをトリガーできます。
$ vim -c "normal! @q" file
これは脆弱なアプローチです。
特別な Vim 機能が本当に必要でない限り、 、、または Perl / Python / Ruby /ここでお気に入りのスクリプト言語などの非対話型ツールを使用した方がよいでしょう。sed
awk
つまり、非対話的に Vim を使用できます。
:substitute
非常に単純なテキスト処理 (つまり、強化された 'sed' や 'awk' のように Vim を使用し、おそらくコマンド内の強化された正規表現の恩恵を受ける) には、 Ex-modeを使用します。
REM Windows
call vim -N -u NONE -n -es -S "commands.ex" "filespec"
注: サイレント バッチ モード-s-ex
は Windows コンソールを台無しにするためcls
、Vim の実行後にクリーンアップを行う必要がある場合があります。
# Unix
vim -T dumb --noplugin -n -es -S "commands.ex" "filespec"
注意: "commands.ex" ファイルが存在しない場合、Vim は入力待ちでハングアップします。その存在を事前に確認することをお勧めします!あるいは、Vim は stdin からコマンドを読み取ることができます。- 引数を使用すると、stdin から読み取ったテキストを新しいバッファに入力したり、stderr からコマンドを読み取ったりすることもできます。
複数のウィンドウを含むより高度な処理、および Vim の実際の自動化 (ユーザーとやり取りしたり、Vim を実行したままにしてユーザーに引き継がせる場合) には、次を使用します。
vim -N -u NONE -n -c "set nomore" -S "commands.vim" "filespec"
使用される引数の概要は次のとおりです。
-T dumb Avoids errors in case the terminal detection goes wrong.
-N -u NONE Do not load vimrc and plugins, alternatively:
--noplugin Do not load plugins.
-n No swapfile.
-es Ex mode + silent batch mode -s-ex
Attention: Must be given in that order!
-S ... Source script.
-c 'set nomore' Suppress the more-prompt when the screen is filled
with messages or output to avoid blocking.
私はあなたの要求を明確に知りません。しかし、おそらくvim -s、vim -W、vim -Wがあなたを助けることができます!