Odwzorowanie lewego klawisza Alt w Vimie?

12

Jestem w stanie zmapować kombinację klawiszy Right Alt+ Left Arrowz <a-left>lub przez <m-left>. Ale nie jestem w stanie zmapować Left Altklucza.

Czy jest na to sposób?

Edycja:
Dla jasności <a-left>oznacza Alt+ Left Arrow.
Ważnym pytaniem jest tutaj, jaka jest różnica pomiędzy Left Alti Right Altz punktu widzenia mapowania klawiszy w Vimie?

Yogesh Arora
źródło

Odpowiedzi:

14

Jeśli zrobisz to :help key-notationw vimie, zobaczysz, że jedynymi modyfikatorami, które rozpoznaje Vim, są shift, control, alt / meta (traktowane jako synonimy) i klawisz poleceń Mac. Możesz łatwo użyć xmodmap do zmapowania prawego klawisza alt na nowy modyfikator, który rozpoznaje Vim, ale być może żaden z tych modyfikatorów nie jest obecnie przez ciebie nieużywany. (Nie wiem, czy jest możliwe, aby systemy Linux reprezentowały modyfikator klawisza poleceń Maca, tak jak Vim to widzi.) Istnieją inne modyfikatory, które X rozpoznaje: Mod4, Hyper itd., Ale wygląda na to, że Vim właśnie wygrał ” ich zobaczyć, a przynajmniej nie mogę ich związać.

Inną opcją jest ustawienie generowania określonej sekwencji klawiszy przez RightAlt-Left Arrow, na przykład Esc- [MyUniqueGarbageHere. Jest to z pewnością wykonalne, a następnie możesz powiedzieć Vimowi, aby powiązał to z dowolną akcją, którą lubisz, która jest inna niż jest to związane z twoim lewym klawiszem Alt. Wadą tego jest to, że musisz to zrobić dla każdej kombinacji RightAlt + Key indywidualnie. Ale jeśli chcesz to zrobić tylko dla kilku kluczy, jest to bardzo wykonalne.

Dokładny sposób implementacji zależy od tego, czy mówisz o korzystaniu z Vima w X, konsoli Linux, czy w innym środowisku. Zakładam, że mówisz o używaniu go w X.

  1. Użyj xmodmap, aby powiązać RightAlt z, powiedzmy, Mod3. Ustal, aby uruchamiało się to raz po rozpoczęciu sesji X. Niektóre dystrybucje mają już plik / etc / X11 / xinit / xinitrc, który ładuje pliki w określonych lokalizacjach zawierających polecenia xmodmap.

    xmodmap -e "remove Mod1 = Alt_R" -e "add Mod3 = Alt_R"
    
  2. Korzystam z terminala urxvt. Pozwala zdefiniować skróty klawiszowe w pliku typu Xresources. Możesz to zrobić w ~ / .config / Xresources; Robię to w ~ / .config / app-defaults / URxvt. W tym pliku umieściłem taką linię (dokładna składnia jest zależna od tego, w którym pliku ją umieścisz):

    URxvt.keysym.Mod3-Left:    \033<RAlt-Left>
    

    Teraz uruchom nowy terminal, wpisz ctrl-V, a następnie wpisz RightAlt + Left. Powinieneś zobaczyć w linii poleceń znaki ^ [[<RAlt-Left>. Czy to działa? Dobry.

  3. W ~ / .vimrc umieść to:

    set t_Ff=^[<RAlt-Left>
    

„^ [” Tutaj jest pojedynczym znakiem ucieczki. Każdy z pozostałych znaków („<”, „R”, „A” itd.) Jest sobą. Użyj prefiksu „dosłownego” vima, a następnie znaku ucieczki, aby wprowadzić „^ [” (Zapomniałem, czym domyślnie jest „dosłowny” --- --- ctrl-V, być może?) T_Ff to po prostu nieużywany wpis na terminalu . Innym jest t_Fg. Możesz użyć :set termcapw vimie, aby zobaczyć, które wpisy terminala są przypisane, i po prostu użyj t_XX dla niektórych XX, które nie są używane. Postępuj zgodnie z linią .vimrc przedstawioną powyżej z następującymi:

    map <t_Ff> whatever-vim-keys-you-want-it-mapped-to
    map! <t_Ff> whatever-vim-keys-you-want-it-mapped-to

Możliwe jest również bezpośrednie wykonanie:

    map ^[<RAlt-Left> whatever-vim-keys-you-want-it-mapped-to

Znalazłem jednak technikę, która wykorzystuje bezczynny wpis terminala, aby działać znacznie bardziej niezawodnie.

Podjąłem tutaj wiele założeń: używasz Linuksa, X i tak dalej. Jeśli używasz innego programu terminalowego niż urxvt, może on zapewniać wystarczająco silne techniki przypisywania klawiszy, aby zrobić to, co opisałem. Jeśli wybierzesz mniej egzotyczne klucze, nadal możesz zrobić coś takiego, jak tutaj opisałem. Na przykład możesz ustawić, aby R-lewy był związany z F21, a następnie stamtąd. Daj nam znać, jakie są twoje wymagania.

dubiousjim
źródło
Czy dotyczy to również gvim?
Glyph
Uważam to za szczególnie pomocne. Używam lxterminal i chcę zmapować mój klawisz alt w vimie. W terminalu, gdy wpisałem Ctrl-V, a następnie wybraną kombinację klawiszy (na przykład Alt-T), wypluł ^ [t. Użyłem tego w moim .vimrc zamiast <At> do wykonania mapowania (^ [oczywiście jako pojedynczy znak zmiany znaczenia) i działało bezbłędnie. (^ [^ T również poprawnie wiąże Ctrl + Alt + T)
elynnaie