Memetakan ctrl-backspace di terminator

8

Saya baru-baru ini mulai menggunakan Vim. Dari editor sebelumnya, saya terbiasa menghapus seluruh kata dengan menekan Ctrl- Backspace. Setelah melihat dokumentasi saya menemukan bahwa ini dilakukan dengan menekan Ctrl- wdi Vim. Masalahnya adalah setelah terbiasa menekan Ctrl- w, saya mulai menutup tab dan obrolan setiap kali saya salah mengeja kata (saat menulis pertanyaan ini, saya menutup tab ini 5 kali). Jadi saya memeriksa cara memetakan kunci di Vim dan mencoba ini:

:imap <C-BS> <C-w>

Sayangnya, itu tidak berhasil. Setelah sedikit riset saya menemukan bahwa terminal tidak membedakan antara Ctrl- Backspacedan Backspace. Saya melihat beberapa peretasan dan tambalan untuk memperbaiki masalah ini, tetapi saya tidak bisa membuatnya bekerja pada terminator (yang merupakan emulator yang ingin saya gunakan).

Apakah ada cara untuk memetakan Ctrl- Backspacedi Vim saat menggunakan terminator?

pengguna1026044
sumber
2
Selamat datang di neraka Vim.
romainl
2
Saya suka fakta bahwa neraka ini cukup produktif dan dapat diperbaiki dengan tambalan.
Ingo Karkat
BTW, saya mengumpulkan pertanyaan-pertanyaan semacam ini untuk mudah-mudahan dapat membuat kasus bahwa masalah khusus ini ditangani dalam Vim 8.0. Saya benar-benar ingin semakin banyak kandidat pemetaan yang seragam.
Ingo Karkat
Masalah ini tidak dapat benar-benar diperbaiki dalam vim (AFAIK). Tergantung vim terminal berjalan. Untuk berbagai pengguna yang menggunakan vte (Gnone Terminal, Mate Terminal, Guake, dll) masalah ini telah mendapat perhatian baru-baru ini dan mungkin segera diperbaiki. Lihat bug gnome ini: bugzilla.gnome.org/show_bug.cgi?id=420039
trusktr
@IngoKarkat Lihat komentar di atas. ^
trusktr

Jawaban:

8

Karena cara input keyboard ditangani secara internal, sayangnya ini tidak umum hari ini. Beberapa kombinasi kunci, seperti Ctrl+ non-alfabet tidak dapat dipetakan, dan Ctrl+ huruf vs. Ctrl+ Shift+ huruf tidak dapat dibedakan. (Kecuali jika terminal Anda mengirimkan 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 subyek 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
Terima kasih atas jawaban cepatnya. Saya kira saya hanya harus terbiasa menggunakan ctrl-w untuk vim dan ctrl-backspace untuk browser.
user1026044
Hal yang baik tentang Ctrl-W adalah bahwa ia juga berfungsi di Bash dll.
Ingo Karkat
Ya aku tahu. Tetapi Anda masih harus menggunakan ctrl-backspace untuk yang lainnya, dan fakta bahwa ctrl-w tampaknya menjadi standar untuk menutup tab dan jendela di tempat lain membuatnya menjengkelkan. Saya mungkin akan terbiasa setelah beberapa saat.
user1026044
Tetapi dapatkah ini diselesaikan murni di basis kode vim? Bagaimana setiap kode dalam basis kode vim membedakan antara backspace dan ctrl + backspace jika terminal yang sedang berjalan mengirimkan vim input yang sama persis untuk kombinasi tombol mana saja? Sepertinya ini adalah sesuatu yang harus diperbaiki di terminal yang menjalankan vim, bukan vim. Sebagai contoh, Guake mengirimkan ^?backspace dan ctrl + backspace, yang membuat mereka (AFAIK) tidak bisa dibedakan. xterm, di sisi lain, mengirimkan ^Huntuk backspace dan ^?untuk ctrl + backspace, membuat mereka dapat dibedakan.
trusktr
Namun sayangnya, dalam xterm, backspace ( ^H) tidak dapat dibedakan dari ctrl + h ( ^H). Mungkin kita bisa membuat urutan pelarian baru untuk bisa membedakan ketiganya? Saya tidak tahu betapa mudahnya itu, tetapi sepertinya itu akan aman untuk dilakukan karena dengan keadaan saat ini (beberapa terminal digunakan ^?untuk backspace, yang lain ^H, dan sebaliknya) Saya tidak dapat membayangkan sangat banyak aplikasi terminal (jika ada sama sekali) pertimbangkan skenario ctrl + backspace (itu akan sepenuhnya tidak dapat ditentukan karena berbagai terminal) ...
trusktr