Navigasi dalam mode penyisipan

20

Saya akhirnya memutuskan untuk membuang tombol panah untuk navigasi hjkl. Saya menggunakan Vim hardmodeplugin untuk menonaktifkan tombol panah.

Saya terbiasa navigasi cukup cepat, tetapi ternyata navigasi dalam mode insert tiba-tiba tidak mungkin.

Apakah ada solusi untuk ini? (mode insert yang ada bukan solusi).

stdcall
sumber
8
Ya: gunakan tombol panah :-) Itulah tujuan mereka ;-)
Martin Tournoij
@Carpetsmoker jika tombol panah tersedia saya akan menggunakannya alih-alih hjkl ....
stdcall
5
Tetapi idenya adalah keluar dari mode insert (yaitu, menggunakannya hanya untuk apa yang dimaksudkan, yaitu, insersi kecil diselingi dengan perintah lain) sebenarnya adalah solusinya. Jika saya tidak salah, saya sudah melihatnya dalam bantuan, jika saya menemukan tautan saya akan mempostingnya. Sepertinya Anda sudah terbiasa dengan hal itu, tidak dengan tombol panah.
The Vee
Anda dapat mengikat keyboard Anda untuk menggunakan panah sebagai pintasan seperti <kbd> super </kbd> + <kbd> j </kbd> untuk bergerak ke bawah. <kbd> super </kbd> dapat berupa tombol apa saja, misalnya <kbd> Caps Lock </kbd> cukup umum
ivanjermakov

Jawaban:

26

Ada banyak opsi yang Anda miliki. Salah satu pilihan, dan IMO yang paling sederhana dan paling mudah adalah dengan berhenti menonaktifkan tombol panah. Saya mengerti mengapa banyak hardcore vimmers mengatakan hal-hal seperti

Anda seharusnya tidak pernah menggunakan tombol panah lagi! Setiap kali Anda menggunakan tombol panah, Anda membuang waktu 3 menit, seekor anak anjing mati dan seseorang beralih ke Emacs!

(Jelas saya bercanda) Namun, ada tujuan untuk tombol panah. Mereka sangat berguna untuk navigasi:

  • Dalam mode sisipkan

  • Di baris perintah

Umumnya ketika orang mengatakan kepada Anda untuk tidak menggunakan tombol panah, itu karena mereka ingin Anda mempelajari kembali navigasi dengan cara yang lebih mirip vim. Jika Anda merasa nyaman hjkl, dan Anda sebagian besar menggunakan tombol panah dalam mode insert, tidak ada alasan kuat untuk memaksa diri Anda untuk tidak menggunakannya.

Opsi # 2 adalah untuk memetakan kembali ctrl-hjkluntuk bertindak seperti tombol kursor. Ini bagus karena Anda dapat tetap di homerow, dan itu cocok dengan memori otot yang telah Anda pelajari hjkldalam mode normal. Sebenarnya, inilah yang saya lakukan . Kelemahan utama dari pendekatan ini adalah bahwa in dapat merepotkan untuk pemasangan di terminal vim karena <C-j>menghasilkan NULbyte. Saya menyiasati ini dengan menggunakan Gvim. Saya tidak tahu apakah ada perbaikan yang mudah untuk konsol vim atau tidak.

Opsi # 3 digunakan <C-o>untuk membuat gerakan mode normal kecil. Misalnya, jika Anda mengetik

Hello world!
     cursor^

dan Anda menyadari Anda lupa koma, daripada melakukan leftleftleftleftleftleft, Anda bisa melakukan <C-o>b<C-o>hatau <C-o>2Fo, atau kombinasi lain dari gerakan mode normal yang Anda suka.

Tentu saja, opsi lain, dan yang sangat saya sukai adalah menggunakan saja Esc, buat beberapa gerakan kecil sebelum kembali ke mode normal. Anda menyebutkan bahwa Anda lebih suka tidak melakukannya, tetapi kadang-kadang ini benar-benar cara yang paling efisien.

Mungkin ada beberapa pendekatan lain juga, tetapi ini adalah yang saya sukai yang berhasil bagi saya.

DJMcMayhem
sumber
2
Menarik - Saya perhatikan Anda menggunakan <c-o>gkdan <c-o>gjbukannya <Up>dan <Down>. Mengapa demikian?
Kyle Strand
4
@kylestrand gkdan gjsecara visual naik dan turun garis bahkan jika garis dibungkus.
DJMcMayhem
4
Saya tidak berpikir ini cukup untuk menjamin jawaban sendiri, tetapi saya suka menonaktifkan tombol panah dalam mode normal (yang memaksa saya untuk belajar HJKL), dan diaktifkan di semua mode lainnya ( noremap <Up> <NOP>...) . Anda menghabiskan cukup waktu dalam mode normal untuk belajar HJKL, tetapi mereka ada di sana saat Anda membutuhkannya. Atau setidaknya, saya menemukan ini sebagai jalan tengah yang nyaman antara membiarkannya selalu mati atau selalu menyala, dan itu tidak memerlukan memetakan kembali kunci lain (banyak orang seperti Ctrl-HJKL untuk bergerak di antara panel).
Itai Ferber
Btw, BASH dkk mendukung binding kunci. Dengan pemetaan ini, Anda dapat <ESC> dan menggunakan hjkl untuk menelusuri sejarah cmd (atas / bawah) atau mengubah perintah saat ini (kiri / kanan)
Rolf
9

Saya suka menggunakan tombol Kontrol untuk mengubah hjkltombol gerakan menjadi tombol gerakan "universal". Inilah bagian saya yang relevan .vimrc:

" In insert or command mode, move normally by using Ctrl
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>

The inoremappernyataan berlaku untuk modus memasukkan, sedangkan cnoremapyang berlaku untuk modus perintah. (Saya telah menggunakan pemetaan ini begitu lama sehingga saya lupa apakah ada cara untuk menavigasi sejarah mode-perintah tanpa itu.)

(Sunting: Saya melihat jawaban lain telah menyebutkan kemungkinan ini. Namun, mungkin membantu untuk melihat perintah pemetaan yang sebenarnya.)

Kyle Strand
sumber
3

Tekan esclalu gunakan hjkldan wWbBdan semua navigasi lain yang ingin Anda buat. Inti dari mode keras adalah membuat Anda belajar menavigasi dengan gerakan vim yang lebih kompleks. Lakukan pengeditan kecil kemudian pindah ke lokasi baru, menggunakan mode normal.

Jika Anda tidak ingin mempelajari cara menavigasi lebih cepat dengan mengaktifkan hardmode, lihat jawaban saya dari pertanyaan lain tentang topik yang sama.

Malaikat Agung33
sumber
3

Jika Anda ingin memindahkan lebih dari SATU atau DUA posisi ...

... pilihan terbaik adalah menekan ESC, bergerak, dan kembali ke mode memasukkan lagi.

Tidak ada gunanya membuat pemetaan seperti <C-h>bergerak ke kiri dan kemudian mulai memukulnya berkali-kali ... sebagai pengguna vim Anda tidak seharusnya menekan tombol yang sama beberapa kali untuk mencapai gerakan cerdas.

(Jika ESCkunci tidak dekat dengan jari Anda, itu akan menjadi pilihan yang baik untuk membuat pemetaan untuk itu.)

Jika Anda ingin memindahkan satu atau dua posisi pada mode penyisipan ...

... pilihan yang baik adalah mendefinisikan beberapa gerakan menggunakan <Leader>kunci Anda :

(Saya menggunakan ,sebagai <Leader>kunci karena rasanya dekat dan nyaman untuk jari saya)

noremap! <Leader>h <left>   "move cursor left
noremap! <Leader>j <down>   "move cursor down
noremap! <Leader>k <up>     "move cursor up   
noremap! <Leader>l <right>  "move cursor right
noremap! <Leader>w <esc>wi  "move one word forward
noremap! <Leader>e <esc>ei  "move forward to the end of word
noremap! <Leader>b <esc>bi  "move one word backward
rossijonas
sumber
1

Jika Anda hanya perlu memodifikasi sejumlah kecil teks atau kata, Anda dapat menggunakannya <Ctrl-O>h/j/k/l.

<Ctrl-O> membawa Anda kembali ke mode Normal hanya untuk perintah itu, dan kemudian menjatuhkan Anda kembali ke mode insert, sehingga menghemat sejumlah penekanan tombol, jika Anda perlu masuk ke mode normal untuk gerakan kecil.

Ref: 1. http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings

alpha_989
sumber