Walaupun saya tidak dapat menyangkal bahwa saya terlalu berjuang dengan vi pada awalnya, saya pikir argumen dapat dibuat bahwa vi sebenarnya sangat mudah dipelajari. (Ketika saya mulai menggunakan Unix pilihannya adalah vi atau emacs, jadi pada saat itu saya memilih ed, ed menjadi editor baris yang sangat sederhana, yang telah saya pelajari dari membaca buku teks Unix awal.) Saya menggunakan vi setiap hari, tetapi saya mungkin gunakan hanya sebagian kecil dari fitur-fiturnya.
Inilah argumen pertama untuk menggunakan vi: vi ada di semua sistem, menggunakan sangat sedikit sumber daya, dan dapat digunakan pada koneksi yang tidak stabil dan lambat, di mana editor lain mungkin gagal atau lambat dan tidak dapat digunakan. Atau dalam situasi di mana sistem rusak, jadi tombol panah tidak diartikan dengan benar (misalnya pengaturan terminfo yang buruk.) Jadi vi dapat digunakan untuk memperbaiki file konfigurasi yang mengarah ke masalah, tanpa terpengaruh oleh masalah.
Dan di sini adalah cara mempelajari subset vi yang berguna: Pertama: berhenti memikirkan vi sebagai "editor" terminal-GUI yang interaktif, dan melihatnya sebagai bahasa pemrograman untuk memanipulasi file teks. Pada awalnya "vi" berarti mode VIsual, dan vi memiliki counterpart nonvisual, yang merupakan tempat yang baik untuk memulai. Ketik ex pada prompt shell (saya akan menggunakan ¬ untuk merepresentasikan return):
$ ex¬
Entering Ex mode. Type "visual" to go to Normal mode.
:
Sekarang tekan enter.
:¬
E749: empty buffer
:
Jadi, mari kita letakkan sesuatu di dalamnya. Ketik "a¬", dan ketikkan satu baris teks, lalu satu titik pada baris dengan sendirinya:
:a¬
Hello World¬
.¬
:
Itu adalah perintah append. Mudah, pendek, dan mnemonik. Tetapi akan menyenangkan untuk melihat apa yang ada di buffer:
:%p¬
Hello World
:
Itu adalah perintah cetak, p, jelas. % Adalah singkatan rentang garis. Setiap perintah dapat didahului dengan nomor baris atau rentang yang harus diterapkan oleh perintah. % berarti "semua baris". $ berarti baris terakhir, dan titik berarti baris saat ini. Angka berarti garis tertentu. Kisaran ditulis n, m dan angka dapat ditambahkan atau dikurangi, jadi +1, $ - 1 berarti dari baris berikutnya ke baris kedua-terakhir. Perintah yang terdiri dari hanya nomor baris menuju ke baris itu. Berikut adalah sebagian kecil dari perintah yang saya gunakan:
:1i¬
this text is inserted before line 1.¬
.¬
:
:w /tmp/filename¬
"/tmp/filename" [New] 2L, 49C written
:
w menulis semua (atau rentang yang dipilih) baris ke file.
:1d¬
menghapus baris 1.
:.s/Hello/Hello,/¬
Hello, World
:.s/$/!/¬
Hello, World!
Mengganti ekspresi reguler. Adalah baik untuk mengetahui ekspresi reguler!
:q¬
E37: No write since last change (add ! to override)
q berhenti. wq menulis dan berhenti. q! berhenti tanpa menulis, dan dengan nada yang sama, w! memaksa penulisan ke file jika memungkinkan.
Sekarang yang keren:
:p
Hello, World!
:.!tr a-z A-Z
:p
HELLO, WORLD!
! sebagai perintah menyaring baris ke perintah shell.
Dan akhirnya:
:vi¬
memasuki mode VISUAL. Jangan tertipu. Itu terlihat seperti editor, tetapi itu masih sebuah shell pemrograman interaktif. Anda hanya perlu melihat buffer setiap saat, dan beberapa perintah lagi. Dalam mode visual a: menampilkan prompt: dari mode ex. Tombol panah (jika berfungsi) bergerak, dan jika tidak, maka lakukan! h kiri, j bawah, k atas dan aku kanan. 0 berpindah ke karakter pertama dan ^ (pikirkan regex di sini!) Ke karakter non-spasi pertama di telepon. $ (regex lagi!) pindah ke akhir baris. Mengetik: 999¬ pergi ke baris 999, secara alami, seperti dalam mode ex.
"i" memasuki mode penyisipan, yang sekarang memasukkan karakter sebagai ganti garis, dan diakhiri dengan menekan pelarian alih-alih ".¬". "Saya" menyisipkan di awal, "a" setelah karakter di bawah kursor, dan "A" setelah akhir baris saat ini. Selalu tekan tombol escape saat selesai mengetik teks. "x" menghapus karakter di bawah kursor, dan "D" menghapus dari kursor ke akhir baris. "Y" menarik (salinan) baris saat ini, dan "P" menempelkannya kembali. ": pu" melakukan hal yang sama, tetapi dapat didahului dengan nomor baris. ": ya" adalah setara dengan "Y", dan sekali lagi, berguna untuk diterapkan ke rentang garis. Saya pikir ada tanda perintah juga, tetapi saya akui saya tidak mengingatnya. Saya tidak ketinggalan.
Di atas adalah apa yang saya gunakan, dan saya tahu saya mungkin bukan pengguna vi yang sangat "efisien". Di sisi lain, saya menggunakan fleksibilitas ex, misalnya untuk skrip mengedit file konfigurasi. Perlu mengubah nama host Anda foo.bar.com ke www.foobar.com di sejumlah file conf?
for file in conf/*
do (echo "%s/foo.bar.com/www.foobar.com/" ; echo "wq") |ex $file ; done
Yang ingin saya katakan adalah, bahwa saya pikir masalah dengan vi adalah orang-orang menganggapnya sebagai editor yang sulit. Yang diperlukan hanyalah mengubah sedikit pola pikir Anda, dan melihatnya sebagai bahasa pemrograman interaktif yang sangat sederhana namun juga sangat kuat. Begitu kuat sehingga bahkan dengan subset dari perintah yang tersedia, Anda dapat menggunakannya dengan sangat baik - tidak hanya sebagai editor tetapi sebagai alat umum, skrip yang terintegrasi dengan baik dengan seluruh Unix. Saya ragu nano akan melakukan semua ini - emacs ... mungkin.