Untuk apa EX-mode untuk pemrosesan batch?

20

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?

Léo Léopold Hertz 준영
sumber
@Masi: tautkan akun Anda sehingga pos yang dimigrasikan akan dikaitkan dengan akun SU Anda setelah migrasi.
Greg Hewgill

Jawaban:

4

Vim dalam mode Ex (juga dikenal sebagai ex) berguna ketika:

  • Anda perlu mengedit (banyak) file secara non-interaktif (sebagai bagian dari skrip).
  • Koneksi Anda sangat lambat atau layar tidak diperbarui setelah tindakan Anda.
  • Pemetaan dan singkatan dinonaktifkan.
  • Kunci umum seperti Escapeatau Controltidak berfungsi dengan baik.

Mengedit file secara non-interaktif adalah penggunaan yang paling umum dan orang-orang menggunakannya dengan cara yang sama seddan awk, namun mereka lebih berorientasi pada aliran - mereka hanya membaca file dari awal hingga akhir sementara vimberorientasi 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 exdari 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)


Contoh 1

Berikut ini adalah contoh sederhana dari perubahan 127untuk 128anda hostsberkas 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

Contoh 2

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.


Contoh 3

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

Contoh 4

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 -Vuntuk melihat skrip sedang beraksi.

Lebih banyak contoh:


Lihat juga:

kenorb
sumber
22

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
Jack M.
sumber
7
Implementasi penuh — dan lebih singkat — akan terjadi for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done.
intuited
6

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.

u0b34a0f6ae
sumber
2
Ini tampaknya sangat dibuat-buat, tetapi sudah pasti masuk akal dan pintar! +1
Tarrasch
1

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).

still_dreaming_1
sumber
Akan sangat bagus untuk mendapatkan beberapa contoh sebagai video untuk menunjukkan kegunaan ex-mode. Saya tidak pernah menyadarinya karena saya dapat menggunakan Linux window manager dan mode visual vim dengan :!pythondll.
Léo Léopold Hertz 준영