チュートリアルでは、元のモードは、バッチ処理のためのものであることを言及しています。私にとってはツールではなく迷惑なものなので、いくつかの実用的な例を見てみたいと思います。誰が使用しますか?どうして?
バッチ処理のEXモードとは何ですか?
チュートリアルでは、元のモードは、バッチ処理のためのものであることを言及しています。私にとってはツールではなく迷惑なものなので、いくつかの実用的な例を見てみたいと思います。誰が使用しますか?どうして?
バッチ処理のEXモードとは何ですか?
回答:
ExモードのVim(別名ex
)は次の場合に便利です。
非対話形式でファイルをされて編集する最も一般的な使用法と似たような方法でそれを使用している人々sed
とはawk
、しかし、彼らはより多くのストリーム指向されている-彼らは唯一の間、始まりから終わりまで前方にファイルを読み込むvim
指向のバッファである-あなたが前後に移動することができます好きなようにファイルに。第二に、vimの正規表現はawkやsedの表現よりも強力です(複数行で動作するようには設計されていません)。たとえば、vimは複数の行で一致し、ゼロ一致をサポートします。
Exはエディター(viの直接の前身)であり、VimではExモードがエミュレートしますex
(それらは同じコードを引き続き実行します)ので、ex
vi内からまたはその逆からコマンドモードに到達することが可能です。Exモード(vim -e
)および改良されたExモードがあり、vi互換のExモード(vim -E
)よりも高度なコマンドを使用できます。参照:Exモードと改良されたExモードの違いは何ですか?
exは、editor、ex、viのエディターファミリのルートです。Exはedのスーパーセットであり、最も注目すべき拡張機能はディスプレイ編集機能です。ex(1)
ここでは変更の簡単な例である127
に128
あなたの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
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サイトに公開する準備ができています。
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
スクリプトを実際に見るために追加します。
その他の例:
こちらもご覧ください:
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
for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done
。
永続的なアンドゥサポートとしてexモードおよび他の形式のvimバッチ処理は、アンドゥ履歴を上書きしないため、他の非vimメソッドよりも優れている最近の7.3の時点で。
追加:「永続的な取り消し」を有効にすると、vim編集セッション全体で、ファイルへのすべての変更(最大)を取り消し履歴に保持します。ファイルが外部プログラムによって編集されている場合、vimは変更がチェックサムによって検出されたときに元に戻す履歴をリセットします。vim -Eを使用すると、ファイルをバッチ編集でき、編集は元に戻す履歴に記録されます。
これはバッチ処理に関する質問には答えませんが、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プリンシパルに違反していて、それを分割する必要がある場合)、コードのデバッグや言語の実験に役立ちますプラグイン)。
:!python
などを使用できるため、私はそれを実現したことがありません。