The tutorial menyebutkan bahwa Ex-mode adalah untuk batch processing. Karena ini merupakan gangguan, bukan alat, bagi saya, saya ingin melihat beberapa contoh praktis. Siapa yang menggunakannya? Mengapa?
Untuk apa EX-mode untuk pemrosesan batch?
The tutorial menyebutkan bahwa Ex-mode adalah untuk batch processing. Karena ini merupakan gangguan, bukan alat, bagi saya, saya ingin melihat beberapa contoh praktis. Siapa yang menggunakannya? Mengapa?
Untuk apa EX-mode untuk pemrosesan batch?
Jawaban:
Vim dalam mode Ex (juga dikenal sebagai ex
) berguna ketika:
Mengedit file secara non-interaktif adalah penggunaan yang paling umum dan orang-orang menggunakannya dengan cara yang sama sed
dan awk
, namun mereka lebih berorientasi pada aliran - mereka hanya membaca file dari awal hingga akhir sementara vim
berorientasi pada buffer - Anda dapat bergerak maju dan mundur dalam file yang Anda inginkan. Ekspresi reguler vim kedua lebih kuat daripada ekspresi awk dan sed (mereka tidak dirancang untuk bekerja dengan beberapa baris) - misalnya vim dapat mencocokkan beberapa baris dan mendukung zero match.
Ex juga merupakan editor (pendahulu langsung vi) dan dalam Vim - Mode Ex mengemulasi ex
(mereka masih menjalankan kode yang sama), sehingga dimungkinkan untuk mendapatkan ke mode perintah ex
dari dalam vi dan sebaliknya. Ada mode Ex ( vim -e
) dan mode Ex yang ditingkatkan yang memungkinkan untuk perintah lebih lanjut daripada mode-Ex yang kompatibel ( vim -E
). Lihat: Apa perbedaan antara mode Ex dan mode Ex yang ditingkatkan?
Ex adalah akar dari keluarga editor: edit, ex dan vi. Ex adalah super-set ed, dengan ekstensi yang paling terkenal adalah fasilitas pengeditan tampilan. ex (1)
Berikut ini adalah contoh sederhana dari perubahan 127
untuk 128
anda hosts
berkas dan mencetak output:
ex -s +%s/127/128/g +%p +q! /etc/hosts
setara dengan:
sed s/127/128/g /etc/hosts
Untuk solusi lebih lanjut, Anda mungkin memiliki file dengan perintah vim dan menggunakannya dengan pendekatan yang lebih klasik untuk pengalihan 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
Anda juga dapat menggunakan plugin vim untuk melakukan beberapa tugas.
Misalnya, satu-liner berikut ini akan mengubah file kode sumber Anda menjadi html menggunakan salah satu plugin standar:
ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c
Ini akan menghasilkan file html (dengan penyorotan sintaks) dari kode Anda (ditulis dalam bahasa yang didukung) yang siap untuk dicetak atau untuk penerbitan di situs web Anda.
Atau beberapa contoh nyata dari spesifikasi 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
Script berikut akan membuat file html baru dengan mengunduh html situs Contoh dan mengganti tubuhnya dengan tabel 20x20 yang dibuat secara otomatis dengan angka acak di dalamnya:
" 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
Pemakaian:
ex -s table.html < table.vim
Ini akan bekerja pada sistem * nix like dengan curl diinstal. Tambahkan
-V
untuk melihat skrip sedang beraksi.
Lebih banyak contoh:
Lihat juga:
Ex-Mode sebagian besar untuk melakukan tindakan yang sama pada sejumlah file.
Katakanlah Anda memiliki 25 file .html semuanya dengan:
<a href="/superuser//home.html"> ...
Alih-alih membuka masing-masing, Anda dapat menggunakan Ex-mode untuk mengubah semuanya menjadi 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
.
Pada 7.3 baru-baru ini yang sebagai dukungan undo persisten, mode ex dan bentuk lain dari pemrosesan batch vim lebih unggul daripada metode non-vim lainnya, karena itu tidak akan menghancurkan sejarah undo.
Menambahkan: 'persistent undo' jika diaktifkan, simpan semua perubahan pada file (hingga batas) di riwayat undo, di seluruh sesi pengeditan vim. Jika file diedit oleh program eksternal, vim akan mengatur ulang sejarah undo ketika mendeteksi dengan checksum bahwa itu telah berubah. vim -E akan memungkinkan Anda untuk mengedit file secara batch dan hasil edit akan berada dalam sejarah undo.
Ini tidak menjawab pertanyaan Anda tentang pemrosesan batch, tetapi ini adalah cara lain untuk menjelaskan apa itu Ex-mode. Anda tahu bagaimana Anda menekan:
untuk masuk ke mode baris perintah dan memasukkan perintah? Nah Ex-mode juga memungkinkan Anda memasukkan perintah yang sama, kecuali Vim tidak meninggalkan mode Ex setelah Anda memasukkan perintah, itu tetap dalam mode Ex dan Anda dapat memasukkan perintah lain. Jadi itu semacam REPL (baca, evaluasi, cetak, loop), tetapi tanpa cetak (jadi hanya REL ...). Saya akan kembali ke mengapa Anda mungkin menginginkan REL semacam itu nanti. Itulah mengapa ini disebut mode Ex, itu memungkinkan Anda memasukkan perintah Ex, yang merupakan hal yang sama dengan mode baris perintah, itu memungkinkan Anda memasukkan perintah Ex. Cara lain untuk menjelaskannya, adalah memungkinkan Anda untuk masuk dan segera menjalankan kode Vimscript / VimL. Vimscript / VimL adalah bahasa yang bisa Anda gunakan untuk menulis plugins Vim. Ini juga bahasa yang Anda gunakan untuk menulis file config (proably .vimrc) Anda. Ini juga merupakan bahasa yang Anda gunakan saat Anda memasukkan perintah Ex dari mode baris perintah atau Ex-mode. Jadi dari perspektif itu, Ex-mode dapat dilihat sebagai VIML REL. Mengapa Anda menginginkan VIML REL? Untuk alasan yang sama orang menyukai REPL untuk bahasa lain. Mereka dapat sangat membantu untuk men-debug kode atau bereksperimen dengan bahasa untuk melihat bagaimana segala sesuatu bekerja, terutama jika Anda menulis plugin di VimL atau sangat menyesuaikan file konfigurasi Anda (yang mungkin berarti Anda melanggar prinsip SRP dan harus memecahnya menjadi plugins).
:!python
dll.