Mapowanie ctrl-backspace w terminatorze

8

Ostatnio zacząłem używać Vima. Od poprzednich edytorów przyzwyczaiłem się do usuwania całego słowa, naciskając Ctrl- Backspace. Po przejrzeniu dokumentacji stwierdziłem, że dokonano tego naciskając Ctrl- ww Vimie. Problem polega na tym, że po przyzwyczajeniu się do naciskania Ctrl- wzacząłem zamykać tabulatory i czaty za każdym razem, gdy źle wpisuję słowo (pisząc to pytanie, zamykałem tę zakładkę 5 razy). Więc sprawdziłem, jak mapować klucze w Vimie i wypróbowałem to:

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

Niestety nie zadziałało. Po kilku badaniach odkryłem, że terminal nie rozróżnia między Ctrl- Backspacea Backspace. Widziałem kilka hacków i łatek do rozwiązania tego problemu, ale nie mogłem zmusić ich do pracy na terminatorze (którym jest emulator, którego chcę użyć).

Czy jest jakiś sposób na zmapowanie Ctrl- Backspacew Vimie przy użyciu terminatora?

użytkownik1026044
źródło
2
Witaj w piekle Vima.
romainl
2
Podoba mi się fakt, że to piekło jest dość produktywne i można je poprawić za pomocą łatek.
Ingo Karkat,
BTW, zbieram tego rodzaju pytania, aby, mam nadzieję, móc przedstawić przypadek rozwiązania tego konkretnego problemu w Vimie 8.0. Naprawdę chcę też coraz bardziej jednolitych kandydatów do mapowania.
Ingo Karkat
Tego problemu nie da się naprawić w vimie (AFAIK). Zależy to od uruchomionego vima terminala. Dla wielu różnych użytkowników używających vte (Gnone Terminal, Mate Terminal, Guake itp.) Problem ten został ostatnio zauważony i może zostać wkrótce rozwiązany. Zobacz ten błąd gnome: bugzilla.gnome.org/show_bug.cgi?id=420039
trusktr
@IngoKarkat Zobacz powyższy komentarz. ^
trusktr

Odpowiedzi:

8

Ze względu na sposób, w jaki klawiatura jest obsługiwana wewnętrznie, nie jest to dzisiaj ogólnie możliwe. Niektórych kombinacji klawiszy, takich jak Ctrl+ niealfabetyczne, nie można zmapować i nie można odróżnić Ctrllitery + litera od litery Ctrl+ Shift+. (O ile twój terminal nie wyśle ​​dla niego odrębnego kodu termcap , co większość tego nie robi). W trybie wstawiania lub wiersza poleceń spróbuj wpisać kombinację klawiszy. Jeśli nic się nie dzieje / jest wstawione, nie możesz użyć tej kombinacji klawiszy. Dotyczy to również <Tab>/ <C-I>, <CR>/ <C-M>/ <Esc>/ <C-[>itp. (Jedynym wyjątkiem jest <BS>/ <C-H>.) Jest to znany problem i temat różnych dyskusji na vim_dev i kanale IRC #vim.

Niektórzy ludzie (przede wszystkim Paul LeoNerd Evans) chcą to naprawić (nawet dla konsoli Vima w terminalach, które to obsługują) i przedstawili różne propozycje, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

Ale na dzień dzisiejszy nie pojawiły się żadne łatki ani ochotnicy, choć wielu wyraziło chęć posiadania tego w przyszłym wydaniu Vim 8.

Ingo Karkat
źródło
Dzięki za szybką odpowiedź. Chyba będę musiał przyzwyczaić się do używania ctrl-w dla vima i ctrl-backspace dla przeglądarek.
user1026044
Zaletą
Tak, wiem. Ale nadal musisz używać ctrl-backspace do wszystkiego innego, a fakt, że ctrl-w wydaje się być standardem do zamykania kart i okien wszędzie indziej, czyni go denerwującym. Prawdopodobnie jednak po jakimś czasie się do tego przyzwyczaję.
user1026044
Ale czy można to rozwiązać wyłącznie w podstawie kodu vim? Jak dowolny kod w bazie kodu vim rozróżnia backspace i ctrl + backspace, jeśli terminal, w którym działa, wysyła vimowi takie same dokładne dane wejściowe dla dowolnej kombinacji klawiszy? Wygląda na to, że jest to coś, co należy naprawić w terminalu, w którym działa vim, a nie vim. Na przykład Guake wysyła ^?zarówno backspace, jak i ctrl + backspace, co czyni je (AFAIK) nierozróżnialnymi. Z drugiej strony xterm wysyła ^Hznaki backspace i ^?ctrl + backspace, dzięki czemu można je rozróżnić.
trusktr
Niestety, w xterm, backspace ( ^H) jest nie do odróżnienia od ctrl + h ( ^H). Być może możemy stworzyć nową sekwencję ucieczki, aby móc rozróżnić wszystkie trzy? Nie wiem, jakie to łatwe, ale wydaje się, że byłoby to bezpieczne, ponieważ przy obecnym stanie rzeczy (niektóre terminale używają ^?backspace, inne ^Hi odwrotnie) nie wyobrażam sobie wielu aplikacji terminalowych (jeśli w ogóle) rozważ scenariusz ctrl + backspace (byłby całkowicie nieokreślony ze względu na różnorodność terminali) ...
trusktr 13.10.13