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?
@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:
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.
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:
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.
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).
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.
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
danawk
, namun mereka lebih berorientasi pada aliran - mereka hanya membaca file dari awal hingga akhir sementaravim
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 perintahex
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?Contoh 1
Berikut ini adalah contoh sederhana dari perubahan
127
untuk128
andahosts
berkas dan mencetak output:setara dengan:
Untuk solusi lebih lanjut, Anda mungkin memiliki file dengan perintah vim dan menggunakannya dengan pendekatan yang lebih klasik untuk pengalihan I / O:
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:
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 :
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:
Pemakaian:
Lebih banyak contoh:
Lihat juga:
sumber
Ex-Mode sebagian besar untuk melakukan tindakan yang sama pada sejumlah file.
Katakanlah Anda memiliki 25 file .html semuanya dengan:
Alih-alih membuka masing-masing, Anda dapat menggunakan Ex-mode untuk mengubah semuanya menjadi
index.html
:sumber
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.
sumber
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).sumber
:!python
dll.