it-swarm-ja.tech

バッチ処理のEXモードとは何ですか?

tutorial は、Exモードがバッチ処理用であることを示しています。ツールというよりは煩わしいので、実際の例をいくつか見てみたいと思います。誰が使用しますか?どうして?

バッチ処理のEXモードとは何ですか?

ExモードのVim(別名ex)は、次の場合に役立ちます。

  • (スクリプトの一部として)非対話的に(複数の)ファイルを編集する必要があります。
  • 接続が非常に遅いか、アクション後に画面が更新されません。
  • マッピングと略語は無効になっています。
  • などの一般的なキー Escape または Control 正常に動作しません。

非インタラクティブなファイルの編集は最も一般的な使用法であり、人々はsedおよびawkと同様の方法でファイルを使用しますが、よりストリーム指向であり、最初から最後までファイルを読み取るだけですvimはバッファ指向ですが、ファイル内を好きなように前後に移動できます。第2に、vimの正規表現はawkおよびsedの表現よりも強力です(これらは複数の行で機能するようには設計されていません)。たとえば、vimは複数の行にわたって一致し、ゼロ一致をサポートできます。

Exもエディター(viの直接の前身)であり、VimのExモードはexをエミュレートします(これらはまだ同じコードを実行します)。したがって、exのコマンドモードにアクセスできます。 vi内からおよびその逆。 Exモード(vim -e)と改善されたExモードがあり、vi互換のExモード(vim -E)よりも高度なコマンドを使用できます。参照: Exモードと改善されたExモードの違いは何ですか?

Exは、edit、ex、viというエディターファミリーのルーツです。 Exはedのスーパーセットであり、最も注目すべき拡張機能はディスプレイ編集機能です。ex(1)


hostsファイルの127128に変更して出力を出力する簡単な例を次に示します。

ex -s +%s/127/128/g +%p +q! /etc/hosts

と同等です:

sed s/127/128/g /etc/hosts

より高度なソリューションの場合、vimコマンドを含むファイルがあり、I/Oリダイレクトへのより古典的なアプローチで使用できます。

echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts

Vimプラグインを使用していくつかのタスクを実行することもできます。

たとえば、次のワンライナーは、標準プラグインの1つを使用してソースコードファイルをhtmlに変換します。

ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c

コード(サポートされている言語で記述)からhtmlファイル(構文の強調表示付き)が生成され、印刷またはWebサイトでの公開の準備が整います。


または [〜#〜] rpm [〜#〜] 仕様の 実際のライブ例

vim -E -s Makefile <<-EOF
   :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
   :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
   :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
   :update
   :quit
EOF

次のスクリプトは、サンプルサイトのhtmlをダウンロードし、その本文を乱数を含む自動生成された20x20テーブルに置き換えることにより、新しいhtmlファイルを作成します。

" table.vim
%!curl -s example.com 
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq

使用法:

ex -s table.html < table.vim

これは、curlがインストールされている* nixライクなシステムで機能します。 -Vを追加して、スクリプトの動作を確認します。

その他の例:


以下も参照してください。

4
kenorb

Ex-Modeは主に、多数のファイルに対して同じアクションを実行するためのものです。

あなたが25の.htmlファイルをすべて持っているとしましょう:

<a href="/home.html"> ...

それらをそれぞれ開く代わりに、Exモードを使用してすべてをindex.htmlに変更できます。

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF
22
Jack M.

永続的な元に戻すサポートとして、exモードおよび他の形式のvimバッチ処理は、元に戻す履歴を壊さないため、他の非vimメソッドよりも優れている最近の7.3の時点で。

追加: '永続的な元に戻す'が有効になっている場合、vim編集セッション全体で、ファイルへのすべての変更を(上限まで)元に戻す履歴に保持します。ファイルが外部プログラムによって編集されている場合、vimは、ファイルが変更されたことをチェックサムで検出すると、元に戻す履歴をリセットします。 vim -Eを使用すると、ファイルをバッチ編集することができ、編集内容は元に戻す履歴に含まれます。

6
u0b34a0f6ae

これはバッチ処理に関する質問には答えませんが、Exモードとは何かを説明するもう1つの方法です。 :を押してコマンドラインモードに入り、コマンドを入力する方法を知っていますか? Exモードでも同じコマンドを入力できますが、Vimはコマンドを入力した後にExモードを終了せず、Exモードのままで、別のコマンドを入力できます。つまり、REPL(読み取り、評価、印刷、ループ)のようなものですが、印刷はありません(つまり、RELだけです...)。なぜ必要なのかを説明します。そのようなRELは後でExモードと呼ばれるので、Exコマンドを入力できます。これはコマンドラインモードと同じで、Exコマンドを入力できます。別の説明としては、 Vimscript/VimLコードを入力してすぐに実行できます。Vimscript/ VimLはVimプラグインの書き込みに使用できる言語です。また、構成(おそらく.vimrc)ファイルの書き込みに使用する言語でもあります。これは言語でもあります。コマンドラインモードまたはExモードからExコマンドを入力するときに使用しているので、その観点からは、ExモードはVimLRELと見なすことができます。なぜVimLRELが必要なのですか?同じ理由で、REPLが好きな人は他の言語:特にVimLでプラグインを作成している場合や、confiを高度にカスタマイズしている場合は、コードのデバッグや言語の実験でどのように機能するかを確認するのに非常に役立ちます。 gファイル(SRPプリンシパルに違反していて、プラグインに分割する必要があることを意味します)。

1