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


20

チュートリアルでは、元のモードは、バッチ処理のためのものであることを言及しています。私にとってはツールではなく迷惑なものなので、いくつかの実用的な例を見てみたいと思います。誰が使用しますか?どうして?

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


@Masi:アカウントをリンクして、移行後の投稿がSUアカウントに関連付けられるようにします。
グレッグヒューギル

回答:


4

ExモードのVim(別名ex)は次の場合に便利です。

  • (スクリプトの一部として)非インタラクティブに(複数の)ファイルを編集する必要があります。
  • 接続が非常に遅いか、操作後に画面が更新されません。
  • マッピングと略語は無効になっています。
  • Escapeまたはなどの共通キーControlは正常に機能しません。

非対話形式でファイルをされて編集する最も一般的な使用法と似たような方法でそれを使用している人々sedとはawk、しかし、彼らはより多くのストリーム指向されている-彼らは唯一の間、始まりから終わりまで前方にファイルを読み込むvim指向のバッファである-あなたが前後に移動することができます好きなようにファイルに。第二に、vimの正規表現はawkやsedの表現よりも強力です(複数行で動作するようには設計されていません)。たとえば、vimは複数の行で一致し、ゼロ一致をサポートします。

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

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


例1

ここでは変更の簡単な例である127128あなたのhostsファイルと出力を印刷は:

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

例2

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

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

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

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


例3

または、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

例4

次のスクリプトは、サンプルサイトの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スクリプトを実際に見るために追加します。

その他の例:


こちらもご覧ください:


22

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

25個の.htmlファイルがすべてあるとします。

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

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

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

7
完全な(より簡潔な)実装はになりますfor file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done
直観

6

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

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


2
これはかなり大げさなように思えますが、確かに合理的で賢い方法です!+1
Tarrasch

1

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


元モードの有用性を示すビデオとしていくつかの例を取得することは素晴らしいことです。Linuxウィンドウマネージャーやvimのビジュアルモード:!pythonなどを使用できるため、私はそれを実現したことがありません。
LéoLéopoldHertz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.