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?
źródło
Odpowiedzi:
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.
źródło
^?
zarówno backspace, jak i ctrl + backspace, co czyni je (AFAIK) nierozróżnialnymi. Z drugiej strony xterm wysyła^H
znaki backspace i^?
ctrl + backspace, dzięki czemu można je rozróżnić.^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^H
i 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) ...