Dalam vim, bagaimana saya bisa memetakan ulang <tab> tanpa juga memetakan ulang <Ctrl + i>?

14

Saya suka menggunakan tab untuk melompat di antara split windows, jadi ada map <tab> <C-W><C-W>di .vimrc saya. Namun saya perhatikan bahwa ini membuatnya agar Ctrl + I tidak berperilaku sebagai Ctrl + I lagi, tetapi sebagai Ctrl + W, Ctrl + W. Bagaimana saya bisa memetakan ulang <tab>tapi tidak <C-i>?

Jonathan
sumber

Jawaban:

10

Karena cara input keyboard ditangani secara internal, sayangnya ini tidak umum hari ini, bahkan di GVIM. Beberapa kombinasi tombol, seperti Ctrl+ non-alfabet tidak dapat dipetakan, dan Ctrl+ huruf vs. Ctrl+ Shift+ huruf tidak dapat dibedakan. (Kecuali jika terminal Anda mengirim kode termcap yang berbeda untuknya, yang kebanyakan tidak.) Dalam mode sisipan atau baris perintah, coba ketikkan kombinasi tombol. Jika tidak ada yang terjadi / dimasukkan, Anda tidak dapat menggunakan kombinasi tombol itu. Ini juga berlaku untuk <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>dll. (Satu-satunya pengecualian adalah <BS>/ <C-H>.) Ini adalah titik nyeri yang diketahui, dan menjadi subjek dari berbagai diskusi tentang vim_dev dan saluran #vim IRC.

Beberapa orang (terutama Paul LeoNerd Evans) ingin memperbaikinya (bahkan untuk konsol Vim di terminal yang mendukung ini), dan telah mengajukan berbagai proposal, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Tetapi sampai hari ini, belum ada tambalan atau sukarelawan yang maju, meskipun banyak yang menyatakan keinginan untuk memiliki ini dalam rilis utama Vim 8 di masa depan.

Ingo Karkat
sumber
1
Apakah masalah pemetaan / pengenalan kode kunci ini telah diselesaikan di Vim 8, seperti yang sekarang (tahun 2017)? Saya menemukan saya masih dapat mereproduksi contoh Jon pada Vim 8.0 saya
llinfeng
@llinfeng: Tidak, sayangnya tidak. Bram saat ini sedang berupaya mengintegrasikan terminal ke Vim; ini tampaknya menggunakan perpustakaan yang diproduksi oleh Paul Evans, jadi mungkin ini pada akhirnya akan mengarah pada peningkatan pada kunci yang ditangani juga. (Tapi ini spekulasi murni saat ini.)
Ingo Karkat
0

Tidak semua cara pintas dimungkinkan di Vim terutama jika itu di bawah terminal. Saya tidak merekomendasikan menggunakan pintasan tab untuk tujuan itu. Tetapi solusi alternatif mungkin sebagai berikut:

" Note: Allows faster switching between windows with "Ctrl+w"! By Questor
nnoremap <silent> <C-w> <C-w><C-w>
inoremap <silent> <C-w> <Esc><C-w><C-w>
vnoremap <silent> <C-w> <Esc><C-w><C-w>

Lihat contoh penggunaan di https://github.com/eduardolucioac/groovim/blob/master/.vimrc

[]

Eduardo Lucio
sumber