4

シェルスクリプトとvimマクロを使用して、UNIX環境でデータ処理を行っています。手順は次のとおりです。

  1. grep を使用して、ログ ファイルから有用な行をいくつか取得します。
  2. vim 内のマクロは、データを操作するために使用されます。
  3. ここでも、シェル スクリプトを使用してデータを処理します。

多くのファイルに対してこれを行う必要があります。それで、特別なラッパーを介してシェルスクリプトでvimのマクロを呼び出す方法があるのだろうかと思っています。

4

2 に答える 2

8

記録されたマクロをトリガーできます。

$ vim -c "normal! @q" file

これは脆弱なアプローチです。

代替案

特別な Vim 機能が本当に必要でない限り、 、、または Perl / Python / Ruby /ここでお気に入りのスクリプト言語などの非対話型ツールを使用した方がよいでしょう。sedawk

つまり、非対話的に 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.
于 2013-03-28T08:43:45.247 に答える
-1

私はあなたの要求を明確に知りません。しかし、おそらくvim -s、vim -W、vim -Wがあなたを助けることができます!

于 2013-03-28T08:26:13.570 に答える