Keuntungan menggunakan set -o vi


55

Saya telah melihat banyak pengembang menggunakan perintah ini untuk mengatur opsi ke vi. Saya tidak pernah mengerti penggunaan sebenarnya dari ini?

Saat menggunakan perintah bash, bantuan apa yang diberikan oleh switching ke vi?

Jawaban:


58

Dengan mengatur pengeditan readline Anda menjadi emacs (default) atau vi ( set -o vi), Anda pada dasarnya menstandarkan perintah pengeditan Anda, melintasi shell dan editor pilihan Anda 1 .

Jadi, jika Anda ingin mengedit perintah dalam shell Anda menggunakan perintah 2 yang sama seperti yang Anda lakukan jika Anda berada di editor teks Anda. Ini berarti hanya harus mengingat satu sintaks perintah dan (jika itu tidak cukup menguntungkan) mungkin akan membuat pengeditan Anda di kedua lingkungan lebih cepat dan lebih sedikit kesalahan ...

Anda dapat lebih meningkatkan hubungan ini dalam mode-vi dengan menarik perintah apa saja dari riwayat shell Anda, menekan Escapeuntuk masuk ke mode perintah dan kemudian menekan v, yang akan membuka $ EDITOR Anda dengan perintah yang dimuat untuk pengeditan yang lebih kompleks dengan kekuatan penuh vim. Setelah Anda selesai mengedit perintah untuk kepuasan Anda, :wqdan perintah dijalankan kembali di shell Anda.


1. Dengan asumsi, tentu saja, bahwa Anda menggunakan Emacs atau Vi / m sebagai editor Anda.
2. Atau, lebih tepatnya, bagian dari ...


1
Saya mendapatkan cawan suci:) ....
Sathyam

3
Trik Esc-v adalah salah satu fitur terbaik set -o viyang tidak diketahui kebanyakan orang. Ini terutama benar jika Anda ingin mengeluarkan perintah yang sama beberapa kali dengan argumen yang berbeda (seperti beberapa perintah baris perintah).
Michael Goldshteyn

2
Trik Esc-v sebenarnya bukan keuntungan khusus untuk set -o vi. Di bawah pengaturan default set -o EMACS, Cx, Ce akan memunculkan jendela emacs (atau $EDITOR, jika diatur) di mana Anda dapat mengedit perintah sebelum menjalankannya.
John Gowers

8

Mode Vi adalah peningkatan kegunaan yang sangat besar jika Anda menggunakan klien SSH seluler seperti ConnectBot untuk Android.

Ini karena berkurangnya ketergantungan pada kunci pengubah.

Vim jauh lebih mudah digunakan dengan keyboard virtual di smartphone atau tablet daripada ... apa pun, termasuk metode pengeditan asli yang dibangun ke dalam Android UI. Ironisnya, lebih mudah untuk mengedit sumber C dengan Vim dalam sesi SSH daripada mengedit, katakanlah, pesan instan dengan widget pengeditan platform sendiri untuk tujuan itu.

Mode Shell vi membawa manfaat serupa.


Saya berharap ada mode vi pada keyboard ponsel saya. Anda menyebutkan ini seolah-olah sudah ada. Bagaimana cara mendapatkan mode vi di ponsel saya?
meh

6

Ini memungkinkan Anda mengedit hal-hal di baris perintah menggunakan mode vi dan operasi.

Contoh akan membantu membuatnya lebih jelas:

Anda mengetik cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

tetapi Anda mendapatkan kesalahan - Anda seharusnya mengetik file1.txttidakfile1.xt

Tanpa opsi ini disetel, Anda menekan panah atas dan kemudian menekan panah kiri dan membiarkannya mengulangi ... 35 kali, sampai Anda mendapatkan .xtdan kemudian Anda mengetik ekstra t. Total penekanan tombol: 37 .

Dengan opsi ini Anda dapat (misalnya) menekan panah ke atas satu kali, kemudian Escape untuk mode perintah, 0 untuk pergi ke awal baris dan kemudian /xt[return]untuk sampai ke xtdan kemudian Anda dapat mengetik iuntuk memasukkan mode dan ketik t hilang. Ini mungkin tampak sangat rumit dalam beberapa hal tetapi jika Anda adalah pengguna vim perintah ini sudah sangat terkenal. Total penekanan tombol: 9


1
Anda dapat menggunakan beberapa Alt+Bs atau a Ctrl+Alt+] .dalam mode Emacs juga, jadi ini sepertinya bukan contoh yang kuat bagi saya.
Mikel

2
Berhubung kami golf sedang: modus Emacs: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi modus: Up, F, ., a, t, Enter= 7. :)
Mikel

@Mikel Anda lupa bahwa mode vi dimulai dalam mode Sisipkan sehingga Anda miliki Escdi sana juga, itu panas sekali.
dragon788

5

Saya tidak yakin apakah ada keuntungan langsung. Saya telah menjadi vipengguna selama lebih dari 20 tahun. Saya juga screenpengguna lebih lama, dan dari program lain yang menggunakan vikunci. Wajar bagi saya untuk lebih memilih untuk mengatur mode "vi" di bash. Tapi saya juga bekerja pada ratusan server dalam pekerjaan saya, sebagian besar diatur ke mode "emacs" default. Jadi saya harus menggunakan kedua mode. Tapi itu benar-benar hanya masalah preferensi.


Situasi serupa untuk saya - saya sering menggunakan vim tapi saya selalu merasa lebih sulit untuk menjadi mahir di kunci readline seperti emacs (yang bisa sama mudahnya dengan subset vi) daripada menambahkan pergantian baris ke mode vi pada setiap sistem baru yang saya temui.
jw013

1
Saya tidak bekerja pada ratusan server, tetapi saya menggunakan sshrc untuk menjaga agar pengaturan bash saya serupa di antara komputer yang berbeda saat sshing. Tentu saja, itu tidak membantu ketika saya menggunakan mesin lokal yang tidak memiliki .bashrcbarang - barang saya di atasnya.
Kyle Strand

4

Keuntungan utama adalah pengeditan modal dari baris perintah Anda. Jika Anda terbiasa dengan Vim dan menyukai filosofinya, manfaatnya harus jelas. Jika Anda berpengalaman dengan itu, memori otot jari Anda akan membuat Anda mengedit perintah bash Anda dalam kecepatan kilat.

NB : Jika Anda tidak menyukai pengeditan modal, Anda harus tetap belajar untuk mengambil keuntungan dari mode-emacs (default). Berikut adalah beberapa pintasan keyboard bagus yang akan bekerja pada proses apa pun dengan readline, seperti bash.


1

Jika Anda terbiasa vi, maka Anda mengaturnya ke mode vi sebagai editor shell Anda. Itu akan menjadi alasan yang jelas. Yang lain adalah ketika bashtidak tersedia secara default di beberapa OS (kebanyakan UNIX seperti AIX, Solaris), sehingga fitur riwayat shell tidak tersedia, jadi cara Anda mendapatkan perintah sebelumnya dengan mengatur editor shell ke vi, dan Esc, Ctrl+ Katau Ctrl+L


1

Itu dapat membuat Anda dengan mudah menavigasi dan mengedit baris perintah menggunakan pintasan vim, misalnya dengan cepat pindah ke satu kata ke kanan, menghapus kata.

Dengan pintasan default, ketika Anda harus pergi ke akhir baris, Anda perlu Ctrl+ e, sedangkan dengan set -o vi, Anda cukup menekan $, seperti di vim.


1

Mungkin terlambat ke pesta, tetapi bagi saya menggunakan mode vi lebih tentang membuat skrip interaktif .. misalnya

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

contoh yang sangat sederhana dari apa yang bisa sangat rumit .. menggunakan ESCkvmenempatkan Anda ke dalam sesi vi di mana Anda dapat memodifikasi skrip, dan kemudian :wqmenjalankannya.


1
Ini mungkin contoh yang baik dari menggunakan bash dalam vimode, tetapi ini adalah contoh buruk dari kode bash. (1) Menggunakan output dari lssebagai input ke segala jenis pemrosesan adalah ide yang buruk. (2) $(…)Sintaksis untuk substitusi perintah secara luas dianggap lebih mudah dibaca daripada `…`sintaksis. (3) Anda harus selalu mengutip variabel shell kecuali Anda memiliki alasan yang kuat untuk tidak melakukannya, dan Anda yakin tahu apa yang Anda lakukan.
G-Man Mengatakan 'Reinstate Monica'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.