Gnome-terminal + Vim i Ctrl-Shift mapowania


11

Czy możliwe jest odwzorowanie sekwencji za pomocą Ctrl- Shiftw Gnome Terminal?

Próbuję dodać mapowania

  • map <C-S-[> gT
  • map <C-S-]> gt

i to nie działa. Jak to zrobić?

Jakoś zmapowałem <C-S-]>, ale okazało się, że nie <C-S-]>, ale <C-]>wygląda na to, że nie rozpoznaje Shift w tej sekwencji. Jest źle skonfigurowany czy to wina gnomiego terminala?

Oprócz. Mapowanie <C-[>po naciśnięciu wygląda jak vim czeka. Przypuszczam, że to limit czasu mapowania, ale jak pozbyć się tego limitu czasu, kiedy naciskam dokładnie <C-[>i nie chcę naciskać niczego innego?

Właśnie zacząłem uczyć się vima, więc przepraszam, jeśli coś jest oczywiście nie tak z tymi mapowaniami.

Odpowiedzi:


8

Myślę, że problem polega na tym, że próbujesz uzyskać vima, który oczekuje na uruchomienie w terminalu, aby rozpoznać sekwencję CTRL-SHIFT. Chociaż X może rozpoznać takie kombinacje, aplikacje działające w terminalu (lub obecnie emulator terminala) nie mogą. Jest tak, ponieważ historycznie terminale mogły wysyłać i odbierać tylko siedmio- lub ośmiobitowe sekwencje danych ASCII przez połączenie szeregowe (chociaż może to obejmować „sekwencje specjalne”, które pozycjonują kursor, przewijają lub usuwają linie, zmieniają kolor i inne pomocne efekty).

W zestawie znaków ASCII znajdują się 32 „Kody sterujące”, w tym znane CTRL-A do CTRL-Z. Ale nie ma odpowiednich kodów ASCII dla „CTRL-SHIFT” od A do Z. Teraz sam terminal gnome może rozpoznać te kody (na przykład CTRL-SHIFT-V wklei tekst ze schowka), ale vim nie będzie mieć bezpośredni dostęp do tego.

Oczywiście może być możliwe (nie wiem) skonfigurowanie emulatora terminala w celu konwersji naciśnięć klawiszy CTRL-SHIFT na sekwencję zmiany znaczenia, którą można następnie rozpoznać po mapowaniu vim.

=======

AKTUALIZACJA

Możesz być zainteresowany gvimem, który jest graficzną wersją vima, który działa jako program X, a nie program terminalowy. Może gvim będzie w stanie zrozumieć kody CTRL-SHIFT?


4

Wydaje się, że problem polega na tym, że GNOME Terminal nie pozwala na pewne kombinacje z Ctrlkluczem. Wyszukiwanie online pokazuje wiele takich przypadków.

Na wypadek, gdybyś nie wiedział, Ctrl+ page up/ page downprzełącza między kartami.


3

Jak zauważył Bartleby , jest to ostateczne ograniczenie, ponieważ vi widzi kody klawiszy jako takie same.

W przypadku takich terminali xtermmożesz to zmienić. W przypadku gnome-terminal których ignoruje ustawienia zasobów X nie wiem, jak wykonać następujące czynności:

To pytanie SO obejmuje ten sam temat, a ten przykład pokazuje, że jest używany do mapowania wielu kluczy w .Xresourcespliku. Na przykład:

XTerm*vt100.translations: #override \
  Ctrl ~Meta Shift <Key>a: string(0x1b) string("[65;5u") \n\
  Ctrl ~Meta Shift <Key>b: string(0x1b) string("[66;5u") \n\ 
  Ctrl ~Meta Shift <Key>f: string(0x1b) string("[70;5u")  

Teraz mamy różne sekwencje klawiszy wejścia w VI dla Ctrlavs. CtrlShifta, Ctrlbkontra CtrlShiftb, Ctrlfkontra CtrlShiftf.

Teraz możemy odwzorować je inaczej w ~/.vimrc:

map <ESC>[66;5u   :echo "ctrl-shift-b received"<CR>
map <ESC>[70;5u   :echo "ctrl-shift-f received"<CR>
map <C-b>         :echo "ctrl-b received"<CR>
map <C-f>         :echo "ctrl-f received"<CR>

Pierwotne pytanie dotyczyło gnome-terminal, podczas gdy twoja odpowiedź dotyczy xterm.
egmont

@egmont: Dobra uwaga i niedopatrzenie po mojej stronie. Według tej odpowiedzi.Xresources są ignorowane przez gnome-terminal. To jest niefortunne. Zaktualizowana odpowiedź.
cfi

Nieznacznie przeredagowałem / crosssposted tę odpowiedź jako parę pytań i odpowiedzi do SuperUser , ponieważ prawdopodobnie powinienem ją tutaj usunąć, ponieważ nie dotyczy ona terminala pytającego.
por.


1

W gnome-terminalsekwencjach specjalnych generowanych przez klucze nie można konfigurować. Dla wielu klawiszy Ctrl+ keyi Shift+ Ctrl+ keygeneruj różne sekwencje; niestety [i ]nie, więc nie można ich rozróżnić.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.