Kiedy uruchamiam vima pod ekranem GNU, stwierdzam, że kombinacje klawiszy CTRLze strzałką i klawiszami Pg * nie działają zgodnie z oczekiwaniami.
Korzystam z vim-gnome
pakietu Ubuntu 10.10 .
Na innej maszynie, również z systemem Ubuntu, działało to bez problemów; niestety nie mam teraz dostępnej takiej konfiguracji.
Tutaj jest powiązane pytanie: jak naprawić Ctrl + strzałki w Vimie?
Jednak sugerowanym rozwiązaniem jest ponowne mapowanie skrótów klawiszowych vima do pracy z emulatorem terminala, w tym przypadku PuTTY. Nie przypominam sobie robienia czegoś podobnego i podejrzewam, że istnieje opcja konfiguracji ekranu, która rozwiąże ten problem.
Istnieje również wątek na liście mailingowej GNU, który sugeruje, że uruchomienie vim za pośrednictwem $ TERM=xterm vim
jest odpowiednią poprawką lub obejściem. To działa, ale jestem trochę zaniepokojony, że mogą wystąpić skutki uboczne. Nie brzmi też wystarczająco znajomo, aby być rozwiązaniem, które ustawiłem na innym komputerze (jeśli rozwiązanie było konieczne).
źródło
term xterm
do mojego~/.screenrc
pliku naprawiło to dla mnie. Dzięki jeszcze raz!Odpowiedzi:
Jak intuicyjnie stwierdził w swojej aktualizacji, dodanie
term xterm
do~/.screenrc
pliku wydaje się rozwiązać ten problem.źródło
screen
nie propaguje$TERM
zmiennej środowiskowej zamiast jej zastępowania"screen"
. Przypuszczalnie istnieją pewne okoliczności, w których warto to mieć$TERM == screen
.TERM=screen
jest to, że aplikacje działające w nim komunikują się wewnątrz terminala Screen: sekwencje sterujące, które wysyłają i odbierają, są sekwencjami Screen, a nie sekwencjami wyświetlanymi na ekranie. Ponieważ możesz odłączyć sesję Screen i ponownie podłączyć ją do innego rodzaju terminala, ta warstwa pośrednictwa jest konieczna.xterm
?infocmp screen
iinfocmp xterm
oraz sekwencje specjalne ekranu z sekwencjami wyjściowymi xterm . Nie mam podziału na ofertę; większości aplikacji nie będzie to przeszkadzało, ale niektóre mogą zachowywać się denerwująco.Istnieje kilka innych sposobów ustawienia terminala, który działa podczas uruchamiania procesów:
W uruchomionej instancji ekranu naciśnięcie
^A
-:
i wydanie poleceniaterm xterm
spowoduje, że nowo otwarte ekrany w tej instancji zaczną się ze$TERM
zmienną środowiskową ustawioną naxterm
; to z kolei rozprzestrzeni się na wywołanevim
instancje. Te instancje vim będą wyświetlać prawidłowe zachowanie w odniesieniu do kombinacji CTRL; Nie odkryłem jeszcze żadnych skutków ubocznych tej strategii. To polecenie nie wpływa na istniejące ekrany. Tego polecenia można oczywiście użyć w~/.screenrc
pliku, więc możliwe jest, że ta metoda została zastosowana na innym komputerze.W działającej instancji vim polecenie
set term=xterm
sprawi, że kombinacje CTRL będą działać w tej instancji vim. Ma to efekt uboczny odłączenia schowka X (tj.@*
I@+
) z powodów, których jeszcze nie rozumiem. Co ciekawe, efekt uboczny schowka występuje również wtedy, gdy polecenie:set term=screen
jest wykonywane w uruchomionej instancji vim$TERM=xterm
.źródło
Podstawowym problemem jest to, że mapowanie wykonane
screen
między rzeczywistym terminalem (identyfikowanym przezTERM
zmienną środowiskową na zewnątrzscreen
) a emulacją wewnątrzscreen
jest niepełne.Jeśli zdarzy ci się go przetestować (używając vttest lub tack ), możesz zauważyć braki
Próbując rozwiązać te problemy poprzez ustawienie
term
w.screenrc
ma tę wadę, że działa tylko na dany rzeczywisty-terminal, a nie jest przenośny do innych implementacjach terminali. W dokumentacji notatkiIstnieje inne rozwiązanie (z inną wadą), wykorzystujące tę funkcję z
screen
dokumentacji :ncurses zapewnia kilka przydatnych alternatywnych opisów terminali dla tego przypadku, np. screen.xterm-new , aby naprawić problemy z mapowaniem ekranu. W praktyce używam
TERM=xterm-new
, a podczas uruchamiania ekranu uzyskuję użyteczne mapowanie klawiszy funkcyjnych.Nawiązując do
term
ustawień ekranu , podczas testowania możesz zauważyć, że nadal występują problemy z mapowaniem, które są rozwiązane w tych alternatywach. Gdyby możliwe było uzyskanie dokładnego opisu terminala przy użyciuterm
, te alternatywy byłyby prostymi aliasami doscreen
. Oni nie są.ncurses nie zapewnia
screen.xterm
(sic), ponieważ:TERM=xterm
jest powszechnie wykorzystywany do emulatorów terminali, które różnią się od xterm; dodanie tego mapowania tylko pogorszyłoby tę sytuację (patrz na przykład: dlaczego nie użyć TERM ustawionego na „xterm”? w FAQ ncurses)screen.xterm
jest mniej prawdopodobna do zainstalowania na zdalnych systemach (patrz komentarz do zmiany od czerwca 2015 r. w bazie danych terminali).Ogólnie rzecz biorąc, używanie alternatywnych nazw jest ulepszeniem w stosunku do używania
term
w twoim.screenrc
: rozwiązuje więcej problemów niż tworzy. Odwrotna jest prawda w przypadkuterm
ustawienia.źródło