Bagaimana cara menonaktifkan tombol panah di vim?

24

Saya ingin belajar sendiri menggunakan hjkl lebih dari menggunakan tombol panah agar tetap di baris rumah. Dan ya, saya sangat sadar bahwa seseorang seharusnya tidak menggunakan hjkl sebagai tombol navigasi utama. Namun kebiasaan saya cukup kuat dan saya bahkan tidak menyadari bahwa itu membuat gerakan tangan ke tombol panah dan saya ingin melepaskannya.

Untuk menghentikan kebiasaan itu: Bagaimana saya bisa menonaktifkan tombol panah sehingga saya terpaksa menggunakan hjkl atau metode navigasi lainnya?

Sebagai bonus, akan sangat membantu jika ada pesan yang ditampilkan Dont't use this!bahwa itu tidak wajib. Jika mereka tidak berhasil, itu akan cukup membingungkan bagi saya untuk memikirkan kembali kebiasaan saya.

k0pernikus
sumber
4
Sama sekali tidak ada gunanya melakukan itu; HJKL menghisap sebanyak panah.
romainl
6
Saya pikir @romainl mungkin menunjukkan bahwa lebih penting untuk fokus menggunakan gerakan kuat vim (seperti wuntuk kata berikutnya, }untuk paragraf berikutnya, nuntuk pertandingan hasil pencarian berikutnya, fzuntuk kemunculan berikutnya zpada baris saat ini, dll.) Daripada bergerak lebih banyak granular oleh karakter tunggal. Saya pasti setuju dengan ini. Namun, HJKL jelas lebih baik daripada tombol panah karena Anda tidak perlu memindahkan tangan dari baris rumah. Saya akan sering mengetik sesuatu seperti jA, yang jauh lebih cepat daripada <Down>A, dan tidak bisa dikalahkan oleh gerakan apa pun.
wchargin
4
@romainl: Saya pikir saya sudah berdiskusi dengan Anda sebelumnya. Non-vimmers digunakan untuk panah, dan tidak digunakan untuk HJKL. Idealnya Anda juga tidak ingin menggunakan; tetapi memblokir panah (dan bukan HJKL) akan membuat orang berhenti sejenak dan merenungkan apa yang mereka lakukan (sambil tetap membiarkan HJKL terbuka sebagai alternatif jika itu benar-benar pilihan terbaik, atau jika pengguna bingung tentang bagaimana melakukannya dengan gerakan yang lebih kuat.). Yaitu ini bukan tentang belajar HJKL, ini tentang memblokir automatisme yang dipelajari di editor lain.
Amadan
1
@Carpetsmoker Apa yang pasti terbalik dari kunci hjkl adalah tidak harus meninggalkan baris home. Untuk tombol panah, tangan harus bergerak melintasi keyboard.
k0pernikus
1
@Carpetsmoker Pasti terasa lebih baik bagi saya. ;)
k0pernikus

Jawaban:

24

Anda dapat menginstal plugin hardmode dan .vimrcmemasukkannya ke dalam

let g:HardMode_level = 'wannabe'
let g:HardMode_hardmodeMsg = 'Don''t use this!'
autocmd VimEnter,BufNewFile,BufReadPost * silent! call HardMode()

Jika Anda tidak ingin menggunakan plugin, penggunaan (yang mungkin menjadi pilihan yang lebih baik, karena Anda bisa menyesuaikan segalanya sendiri!) nnoremap, vnoremapDan inoremappada <Left>, <Right>, <Up>, <Down>, <PageUp>dan <PageDown>, misalnya:

nnoremap <Left> :echo "No left for you!"<CR>
vnoremap <Left> :<C-u>echo "No left for you!"<CR>
inoremap <Left> <C-o>:echo "No left for you!"<CR>
Amadan
sumber
1
Ada juga <nop>jika Anda ingin menonaktifkan keymap sama sekali: nnoremap h <nop>.
akshay
25

Jika Anda, atau orang lain membaca topik ini, hanya ingin menonaktifkan gerakan kunci tanpa peringatan teks masukkan baris berikut di .vimrc

noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>

Perintah hanya akan menonaktifkan gerakan tombol dalam mode normal. Mereka masih bekerja dalam mode sisipkan. Jika Anda menggunakan inoremap, gerakan panah juga akan dihapus dari mode insert.

Topik populer besar-besaran ini berkaitan dengan perbedaan antara noremap, nnoremap, inoremap dll: Memetakan kembali dalam Vim

Gagasan umum dengan memetakan kembali seperti ini:

Choice-of-mode-to-remap <remap this command> <to this action/command instead>

Jadi, dalam contoh-contoh lain yang diberikan Anda remap perintah kiri Anda ke prompt teks yang secara tidak sengaja menghapus tindakan sebenarnya memindahkan kursor. Contoh yang saya berikan di atas hanya memetakan kembali tindakan yang tidak melakukan apa-apa, bukan sesuatu yang lain. Pertimbangkan untuk menghapus, alih-alih mengganti, fungsi vim.

Beyer
sumber
2

Anda bisa menambahkan ini ke Anda .vimrcuntuk menonaktifkan tombol panah di Command, Insert, Normal dan Visual Mode:

" Remove newbie crutches in Command Mode
cnoremap <Down> <Nop>
cnoremap <Left> <Nop>
cnoremap <Right> <Nop>
cnoremap <Up> <Nop>

" Remove newbie crutches in Insert Mode
inoremap <Down> <Nop>
inoremap <Left> <Nop>
inoremap <Right> <Nop>
inoremap <Up> <Nop>

" Remove newbie crutches in Normal Mode
nnoremap <Down> <Nop>
nnoremap <Left> <Nop>
nnoremap <Right> <Nop>
nnoremap <Up> <Nop>

" Remove newbie crutches in Visual Mode
vnoremap <Down> <Nop>
vnoremap <Left> <Nop>
vnoremap <Right> <Nop>
vnoremap <Up> <Nop>

Catatan: Checkout :help map-overviewuntuk detail lebih lanjut tentang berbagai jenis pemetaan

Buah Nonlinier
sumber
1
Anda dapat mengurangi jumlah perintah yang diperlukan dengan menggunakan noremap ... ...(untuk mode normal, visual, pilih dan operator-tertunda) dan noremap! ... ...(untuk mode penyisipan dan baris perintah).
Jürgen Krämer
Benar. Saya pikir yang lebih eksplisit noremapsakan membantu seseorang yang ingin menyesuaikan mode apa yang terpengaruh
NonlinearFruit