"Jangan pernah gunakan tombol panah di Vim!"
Saya mendengar ini dari pembicara acak, tetapi tidak memiliki kesempatan untuk bertanya mengapa. Juga, jika Anda tidak menggunakan tombol panah, bagaimana Anda bisa memindahkan kursor dalam mode Sisipkan ?
Jawaban:
Menggunakan tombol panah dianggap sebagai kebiasaan buruk, karena jika Anda menggunakan tombol panah, Anda mungkin kehilangan banyak fitur indah vim.
Ketika orang pertama kali mulai menggunakan vim, mereka cenderung tetap dalam mode memasukkan karena ini lebih seperti mengedit teks konvensional. Agar efektif dalam vim, Anda hanya boleh dalam mode sisipkan saat Anda benar-benar memasukkan teks. Jika Anda ingin memindahkan kursor, Anda harus dalam mode normal. Anda seharusnya cukup banyak berada dalam mode normal secara default.
Dalam mode normal ada sejuta pintasan untuk bergerak. Anda dapat menggunakan
hjkl
untuk bergerak di sekitar satu ruang pada suatu waktu, atau Anda dapat bergerak dengan kata-kata, paragraf, dan sebagainya. Jika Anda dalam mode normal, tidak ada gunanya menggunakan tombol panah daripadahjkl
karena mereka lebih jauh.Ada sikap bahwa jika Anda menggunakan tombol panah, Anda menggunakan vim "salah". Yang benar adalah bahwa vim memiliki kurva belajar yang benar-benar curam, jadi saat Anda belajar melakukan apa pun yang membuat Anda tetap waras. Ketika saya pertama kali mulai menggunakan vim, saya melakukan semuanya dengan cara yang "salah" dan saya tidak punya masalah untuk menghentikan kebiasaan itu begitu saya mempelajari lebih lanjut tentang perintah vim.
Sebagai contoh, ketika saya mulai, katakan saya ingin mengubah teks dalam tanda kutip:
Saya akan masuk ke mode insert, pindah ke ujung string menggunakan tombol panah, tekan backspace sampai string hilang, dan masukkan teks baru.
Cara yang jauh lebih baik adalah dengan meletakkan kursor di mana saja dalam string (mode normal), lalu tekan ci". Ini akan
change
in
"
. Ini akan menghapus semua yang ada di antara tanda kutip dan menempatkan Anda ke dalam mode insert sehingga saya bisa memasukkan teks baru.sumber
ci<
danci)
bekerja juga, dan Anda tidak harus memindahkan tangan dari keyboard ke mouse. Jika Anda ingin menavigasi ke awal tanda kurung dan kemudian mengubah kontenf(ci(
berfungsi./want
dan tekan enter untuk mendarat di kata 'inginkan', lalu lakukanci"
.hjkl
): pemetaanup
dandown
ke 2 kunci yang secara vertikal tidak dapat dibedakan satu sama lain, apalagi dari kunci kiri dan kanan ..... itu adalah demonstrasi tragis dari arogansi yang dibutakan secara ideologis.Penempatan Kunci
Singkatnya,
Vim
menggunakanhjkl
tombol sebagai antarmuka navigasi karena merupakan sisa dari terminal "ADM-3A" lama, yang memiliki kunci-kunci ini ditandai dengan panah.Kebiasaan Baru
Penggantian berbasis huruf untuk tombol panah memungkinkan Anda menavigasi teks tanpa melepaskan tangan dari konfigurasi pengetikan standar . Ini bisa dibilang lebih efisien dan lebih cepat daripada menggerakkan tangan Anda untuk menekan tombol panah. Seperti diuraikan dalam referensi # 2 (lihat sumber daya) ini bukan akhir dari keuntungan untuk ini: VIM memiliki banyak cara pintas lain yang dapat Anda akses tanpa menggerakkan tangan Anda.
Sumber Daya dan Mode Sisipkan
Ada beberapa jawaban yang sangat terperinci dan akurat untuk 2 bagian dari pertanyaan Anda: dalam hal penggantian kunci panah, saya telah menjawab dengan cepat dan ringkas, namun untuk pertanyaan insert Anda , silakan lihat sumber daya yang tercantum di bawah ini.
sumber
hjkl
tidak berfungsi dalam mode penyisipan, jadi bagaimana ini menjawab pertanyaan?hjkl
dalam vim tidak memberi tahu mengapa seseorang tidak boleh menggunakan kunci panah, seperti halnya fakta bahwa saya dapat mengendarai sepeda ke kantor tidak menjelaskan mengapa seseorang mengatakan kepada saya untuk tidak pernah joging.Mantra bodoh itu sering diulang oleh pengetik-sentuh yang untuknya barisan rumah seperti tulang belakang kedua atau oleh pengetik-pengetik non-sentuh yang ingin terlihat keren. Untuk non-mengetik-mengetik, baris rumah tidak begitu istimewa dan sedikit menggerakkan tangan kanan untuk mencapai panah bukan masalah sama sekali.
Yang penting untuk dipertimbangkan adalah apa yang diusulkan orang-orang yang mengulangi mantra itu untuk digunakan.
Sebagian besar waktu, mereka bersikeras menggunakan
hjkl
.Jika kita mengabaikan fakta bahwa tombol-tombol ini hanya digunakan karena keyboard yang digunakan oleh penulis vi tidak memiliki tombol panah fisik dan dengan demikian bahwa setiap argumen yang menentang tombol panah hanya rasionalisasi,
hjkl
hanya sedikit lebih baik daripada panah. Ya, satu-satunya manfaat menggunakanhjkl
lebih dari panah adalah Anda melewatkan gerakan kecil tangan kanan ke dan dari panah. Apakah manfaat itu sepadan dengan masalahnya adalah panggilan Anda.Tapi gerakan tangan kanan itu bukan alasan mengapa hanya menggunakan panah tidak efisien. Itu tidak efisien karena mereka menahan Anda untuk memindahkan karakter demi karakter dan baris demi baris sementara sebagian besar gerakan yang diperlukan untuk mengedit teks memiliki jangkauan yang jauh lebih besar.
Memalu panah kanan 13 kali tidak efisien dan membosankan. Apakah yang lebih baik untuk palu
l
kunci 13 kali? Tidak. Itu sama bodohnya.Tetap menekan panah kanan sampai Anda mencapai target Anda tidak terlalu membosankan, tetapi rawan kesalahan dan hampir tidak efisien seperti 13 hit karena perlambatan yang diperlukan dan non-deterministik pada akhirnya. Apakah yang lebih baik untuk menjaga
l
tombol ditekan? Tidak, tentu saja tidak.Untungnya sebagian besar toolkit GUI menyediakan kombo seperti
Ctrl+Right
itu memungkinkan kita untuk memindahkan kata demi kata atau melompat ke EOL, ke paragraf berikutnya atau apa pun. Cara pintas ini membantu kami menavigasi lebih cepat dan lebih cerdas daripada dengan panah tunggal. Apakah kita memiliki hal yang samahjkl
? Tidak, kami tidak. Kita bisa menggunakan hitungan, jika kita mau, tetapi siapa yang mau menghitung karakter untuk setiap gerakan? Melakukan14k
dengan bantuanrelativenumber
itu bagus tetapi bagaimana dengan gerakan horisontal? Untuk gerakan besar,hjkl
sebenarnya lebih buruk daripada pengubah + panah. Dan coba tebak? Gerakan besar adalah yang paling kita butuhkan.Tapi kami adalah bajingan yang beruntung, editor favorit kami memiliki lusinan gerakan yang berputar di sekitar panah dan
hjkl
:bBeEwW/?*#{}()
dan seterusnya. Perintah-perintah ini jauh lebih memberdayakan daripadahjkl
dan sebagian besar jauh lebih logis dan intuitif jika Anda terbiasaCtrl+Right
dan berteman.Beralih dari
<Right><Right><Right><Right><Right><Right><Right><Right><Right>
kelllllllll
atau bahkan9l
ridiculously sia-sia.Beralih dari
<Right><Right><Right><Right><Right><Right><Right><Right><Right>
ke<C-Right>
jauh lebih baik. Dari sana, beralih kew
mudah dan cepat. Tidak perlu<nop>
panah Anda!Jika perintah-perintah ini lebih bermanfaat, lebih kuat dan lebih intuitif daripada
hjkl
, mengapa semua blogger dan komentator bersikeras untuk mengganti panahhjkl
?Saya sudah. Tidak ada ide.
Kesimpulannya,
hjkl
dapatkan tempat mereka di toolbelt kami karena kami selalu harus bergerak dengan 2 karakter atau garis tetapi mereka lebih sering daripada tidak pohon yang menyembunyikan hutan. Berhati-hatilah terhadap orang-orang yang berkhotbah menentang panah: apa yang mereka miliki untuk Anda mungkin tidak lebih baik sama sekali.sumber
hjkl
ada gunanya tetapihjkl
berguna.Yang lain telah menjelaskan mengapa cara lain untuk menggerakkan kursor lebih disukai, tetapi sedikit yang dikatakan untuk menjawab pertanyaan, mengapa dianggap ide yang buruk untuk menggunakan tombol panah?
Saya pikir alasan utama (dan @Squeezy agak menyinggung ini) adalah bahwa pada zaman terminal seperti VT100, tombol panah menghasilkan urutan pelarian yang ditafsirkan oleh program yang sedang berjalan. (Karena tombol panah tidak terwakili dalam ASCII, pengetikan tombol panah harus dikomunikasikan dengan cara "khusus".) Urutan melarikan diri biasanya seperti
tergantung pada properti terminal Anda, koneksi Anda, dan mode kursor Anda . Jika shell atau program Anda tidak dikonfigurasikan dengan benar untuk terminal, mereka tidak akan memahami urutan pelarian sebagai tombol panah.
Ketika saya masih kuliah, masuk ke Ultrix melalui terminal VT100, jika saya menekan panah ketika sedang dalam mode insert,
ESC
akan ditafsirkan sebagai "keluar dari mode insert", dan kemudian yang berikut[ A
ditafsirkan sebagai perintah mode normal. . Jelas bukan yang diinginkan atau diharapkan pengguna!Saat ini, penanganan terminal dan tombol panah tampaknya lebih kuat, terutama di lingkungan GUI. Tetapi masalah yang sama masih terjadi ketika menggunakan vim melalui SSH atau Telnet.
sumber
Menggunakan tombol panah disukai karena memaksa Anda untuk memindahkan jari-jari Anda dari homerow saat menggunakan tata letak QWERTY dan dari pad karakter (?) Saat menggunakan Dvorak atau tata letak lainnya.
sumber
Tombol panah menunjukkan masalah - itu sudah dikenal di vi - pada koneksi lambat, seperti pada modem 1200 baud. Panah diterjemahkan menjadi urutan ESC seperti
ESC a
. Sekarang ketika waktu antara ESC dan terlalu lama, Anda akhirnya mendengar BEL (atau melihat flash) diikuti oleh mode tambahkan. Ini tidak akan muncul denganhjkl
tombol.sumber
ESC [ A
apa yang Anda maksud?ESC [ A
adalah terminal DEC VT-100 (terminal ANSI sangat turunan dari DEC VT-100) panah. IIRC,ESC A
adalah panah ADM-3A, atau mungkin panah DEC VT-52. Intinya tetap sama, namun,ESC
karakter yang dikirim sebagai bagian dari tombol panah mudah dikacaukan dengan yangESC
diketik secara manual.Mengenai pertanyaan kedua:
Bagi orang yang menguasai, dan karena itu meremehkan tombol panah, konsep "mode" juga tidak ada.
Master menambahkan teks baru menggunakan bukan mode penyisipan, tetapi lebih lengkap memasukkan atau mengganti perintah yang dimulai dengan opcode seperti
i
,o
ataucw
yang diikuti oleh teks muatan, dan diakhiri olehESC
. Perintah memiliki sintaks, dan mesin melintasi status dalam menerima sintaks perintah, tetapi dalam model master editor, ini tidak memunculkan mode. Apa yang secara naif disebut oleh para murid sebagai "mode", bagi sang master adalah sebuah status perintah yang belum selesai, sebuah situasi yang paling menjijikkan yang dihindari sang master.Setiap kali master menyadari, sementara di tengah-tengah perintah insert atau replace, teks itu harus dimasukkan atau dihapus selain pada posisi karakter berikutnya yang ditunjukkan oleh kursor, master mengakhiri perintah insert, dan melepaskan salah satu dari lusinan efisien perintah gerakan (beralih ke yang rendah
hjkl
jika cara yang lebih kuat tidak jelas berlaku).Juga, karena master jarang menjadi terganggu sedemikian rupa sehingga meninggalkan perintah yang belum selesai, master jarang, jika pernah, menyebabkan editor berbunyi bip karena masuknya berlebihan yang
ESC
dikeluarkan "untuk berjaga-jaga".(Namun, ketika jaringan tertinggal atau mesin macet, master meninju
ESC
kunci dengan marah dan berulang kali, sama seperti orang lain.)sumber
vi
entri perintah penyisipan adalah mode, maka untuk bersikap adil, kita harus mengidentifikasi semua mode tersebut di editor lain dan menyebutnya modal. Misalnya, ketika kita menekan Ctrl-X di Emacs, kita berada dalam "mode" di mana dimungkinkan, misalnya, untuk menekan Ctrl-S untuk menyimpan dokumen, yang tidak akan bekerja di luar "mode" itu.sumber
Ya, karena banyak alasan yang disebutkan di atas,
vi
pada awalnya ditulis untuk digunakanhjkl
, tetapi " tidak pernah " adalah pernyataan yang cukup besar.Saya cenderung memodifikasi
vim
(dan alat lain yang saya gunakan) untuk berperilaku seperti yang saya inginkan. Ini bekerja sangat baik pada mesin saya, tetapi sebagai pengembang tertanam, saya tidak selalu bisa memilih apa yang ada pada mesin yang saya dukung. Saya menemukan mesin lama yang hanya memilikihjkl
navigasivi
pada kesempatan. Saya akhirnya mendapatkan kode kontrol dimasukkan ke dalam file saya selama satu atau dua detik sampai saya menghentikan kebiasaan saya dan beralih kehjkl
.Satu-satunya alasan valid yang dapat saya kemukakan adalah "jangan pernah menggunakan tombol panah di Vim!" begitu Anda bisa menggunakan mesin yang tidak bisa menangani tombol panah. Itu terasa seperti alasan yang cukup tipis untuk mengatakan " tidak pernah ."
sumber
Alasan utama mengapa saya mencegah orang menggunakan tombol panah secara eksplisit karena ini memungkinkan Anda untuk bergerak sambil memasukkan mode.
Salah satu masalah paling aneh dengan mempelajari vim untuk pendatang baru adalah perintah undo vim beroperasi dengan membatalkan tindakan terakhir , bukan penekanan terakhir . Banyak teman saya akhirnya tetap dalam mode sisipan sepanjang waktu karena tidak pernah ada alasan untuk meninggalkannya. Ketika mereka bertanya kepada saya, "Bagaimana saya membatalkan?" Saya membalas dengan "tekan huruf u dari mode perintah" mereka menjadi frustrasi ketika vim menghapus seluruh file.
"Vim adalah editor teks yang sangat tidak berharga jika tidak dapat membatalkan semuanya dengan benar."
Sulit untuk menggunakan alat sebelum Anda mempelajari caranya.
Vim menjadi berguna hanya setelah Anda belajar bagaimana menggunakannya. Kekuatan vim adalah bagaimana Anda dapat mengatakannya "lakukan hal itu lagi" atau "batalkan hal itu" atau "lakukan hal itu hanya ketika saya menekan tombol pintas makro ini" melalui memori otot bawah sadar. Jika "benda itu" menjadi "ketik seluruh file dari awal hingga selesai", saya setuju, vim sama sekali tidak berguna.
Karena alasan itulah Anda hanya boleh memasukkan teks saat Anda berada di
insert mode
. Menghindari tombol panah hanyalah salah satu cara yang kami temukan untuk membantu Anda menjadi pengguna vim yang lebih baik, lebih cepat.sumber
Menjalankan vim sementara dipasangkan ke perangkat Android saya yang menjalankan daemon ssh di kbox membuat saya keluar dari zona nyaman saya. Karena Anroid Terminal Emulator pada perangkat menggunakan tombol volume untuk mengganti kombo tombol khusus (ctrl + apa pun), beberapa tombol yang biasanya saya gunakan pada keyboard tidak berfungsi dalam situasi ini.
Misalnya, tombol Sisipkan tidak berfungsi di lingkungan ini, jadi saya gunakan
I
untuk beralih ke mode penyisipan. Tombol Esc, yang biasanya saya gunakan untuk keluar dari mode penyisipan, juga tidak berfungsi, jadi saya gunakanctrl + [
untuk melarikan diri. Tombol Home dan End tidak berfungsi seperti yang biasa saya lakukan. Alih-alih, saya mengandalkan0
dan$
pintasan yang tidak pernah saya pedulikan sebelumnya untuk mencapai awal atau akhir garis.Lagi pula, tombol panah masih berfungsi seperti biasa dalam situasi saya, tetapi senang mengetahui bahwa pintasan keyboard minimalis ada di sana.
sumber
cukup tulis perintah berikut sebelum menulis di vim: -
satu masalah dengan ini adalah bahwa Anda mungkin harus menulisnya setiap kali.
sumber
Ini 2 ¢ saya.
Lakukan apa pun yang Anda rasa nyaman. Jika Anda menggunakan editor berbeda, mungkin lebih mudah menggunakan tombol panah untuk konsistensi.
Di sisi lain, itu sangat brilian, vi (dan vim) tidak memerlukan kunci khusus, kecuali mungkin. Anda mungkin dapat meretas IBM Selectric lama agar berfungsi sebagai terminal.
Hal lain yang harus diperhatikan adalah bahwa tombol panah mungkin tidak berfungsi seperti yang diharapkan. Saya telah menggunakan terminal di mana mereka tidak bekerja. Saya tidak yakin persis bagaimana mereka diimplementasikan di Vim tapi saya cukup yakin itu tidak seragam. Memori jerawatan saya bahkan tampaknya mengingat satu implementasi di mana mereka diimplementasikan sebagai makro vim.
sumber
Nama gim dengan editor teks yang disempurnakan tampaknya "bergerak dengan tergesa-gesa" dan mengurangi gerakan yang sia-sia / berulang. Ada beberapa waktu yang hilang ketika Anda berpindah dari tombol huruf ke tombol panah (tergantung pada dimensi keyboard) dan daripada kembali ke baris awal. Tetapi jika Anda bisa mendapatkan kunci ESC dengan tangan Anda yang pinky atau jari yang beralih mode menjadi satu gerakan yang lancar dan selama sesi pengeditan akan ada peningkatan kecepatan.
Dan ini adalah kunci untuk bagian kedua dari pertanyaan Anda, keluar dari mode insert dengan menekan ESC dengan kiri Anda dan bergerak dengan hjkl dengan kanan Anda. Akhirnya Anda akan dapat melakukan ini tanpa berhenti berdetak.
Yang sedang berkata saya tidak pernah ke mana-mana dengan Vim sampai saya mencoba beberapa hal yang disebutkan di sini , yang paling penting adalah bagian " Dapatkan efisien: pemetaan jalan pintas "
sumber