Jak zmapować klawisz Alt?

37

Próbuję zmapować Altklucz w następujący sposób:

:map <A-j> j
:map <A-k> k

ale to nie działa (dzwonek dzwoni na Alt + j/ Alt + k).

Czego mi brakuje?

Używam terminalu w OSX, to samo dzieje się na zdalnym Linuxie.


Na Ctrl + v, Alt + j, mam: ?~H~F( kiedy encoding=utf-8).

Na Ctrl + v, Alt + k, mam: ?~Z( ˚kiedy encoding=utf-8).

Uruchamianie vima bez wtyczek ( -u NONE) nie robi żadnej różnicy.

kenorb
źródło
1
Czy Alt(naciśnij, nie przytrzymaj), a następnie jdziała? Z xtermprzynajmniej muszę ustawić metaSendsEscape, aby true dostać się do tych sekwencji do pracy ... Nie wiem, czy masz ten sam problem, i nie używam OSX więc nie mogę sprawdzian ...
Martin Tournoij
@Carpetsmoker Naciśnięcie Alt, zwolnienie, następnie jlub dowolny inny klawisz działa normalnie. Sprawdziłem i znalazłem opcję „Użyj opcji jako klucza meta” , włączyłem ją i działa teraz. Więc ustawienie metaSendsEscapezałatwiło sprawę, dzięki.
Kenorb
3
Odpowiedź na to pytanie była wcześniej udzielona (z lepszą odpowiedzią) tutaj: stackoverflow.com/questions/6778961/…
user3751385,

Odpowiedzi:

35

Tak to robię w systemie Linux lub Cygwin:

Najpierw sprawdź, jakie znaki są wysyłane przez twój terminal po naciśnięciu ALT+ J:

Aby to zrobić, idę do konsoli i uruchamiam sed -n l(możesz też użyć catdo tego). Następnie naciskam ALT+ Ji widzę, że znaki na ekranie są ^[j.

Zamieniam ^[się \e(bo to co jest wysyłane przez mój zacisk po naciśnięciu esc) i końcowy łańcuch jest dla mnie \ej.

Następnie piszę to do mojego .vimrc:

execute "set <M-j>=\ej"
nnoremap <M-j> j

I mapowanie działa.

Kossak
źródło
4
Nie mogę znaleźć dokumentacji :set <M-j>=\ejczęści. Czego powinienem szukać?
Evgeni Sergeev
1
Dzięki za odpowiedź, to było jedyne rozwiązanie, które zadziałało dla mnie w /
Iterm
Nie, to nie działa. Czasami ESC-J będzie działać jako ALT-J
użytkownik3751385
1
@EvgeniSergeev See:help :set-termcap
Rich
9

Z pomocą Carpetsmoker wydaje się, że Terminal nie został skonfigurowany do „Użyj Alt / Option jako meta-klucza” (jest to szczególnie powszechne w terminalach GUI).

W terminalu w OSX jest w Preferencjach -> Ustawienia -> zakładka Klawiatura -> „Użyj opcji jako klawisza meta” . Sprawdź: Jak mogę zmienić Terminal, aby używał opcji jako meta-klucza? ( Mavericks ).

W przypadku XTerm zaznacz: Konfigurowanie XTerm jako domyślnego do Meta Sends Escape, który mówi:

Dodaj ten wiersz w dowolnym miejscu w swoim osobistym pliku .Xdefaults ( ~/.Xdefaults):

xterm*metaSendsEscape: true

Następnie załaduj ponownie konfigurację za pomocą xrdb. Bez tego kroku zmiany .Xdefaultsnie zostaną zastosowane, dopóki nie uruchomi się ponownie X:

xrdb -l ~/.Xdefaults

Następnie standardowe odwzorowania z Altkluczem takim jak:

:map <A-j> j
:map <A-k> k

działa w porządku.

Aby uzyskać pomoc, zobacz: :h :map-alt-keys.

kenorb
źródło
4
Może także chcieć spojrzeć na :h :map-alt-keysinne źródło informacji
Peter Rincker
4

Podobne do odpowiedzi Kossaka, ale nieco prostsze, poprzez mapowanie dosłownych naciśnięć klawiszy.

Albo w trybie normalnym po naciśnięciu :, albo wstawiony do twojego .vimrc, mapuj dane wejściowe bezpośrednio, rozpoczynając mapowanie:

nnoremap 

następnie naciśnięcie Ctrl+, Va następnie naciśnięcie klawisza, aby nagrać, np . Alt+ . Będzie to wyglądać następująco:

nnoremap ^[[1;3D

ale każdy z nich ^[jest pojedynczym, dosłownym znakiem ucieczki i wyróżnienie składni powinno to pokazywać. Zamień dosłowne znaki ucieczki na tekst <Esc>i dołącz polecenie, którego chcesz użyć:

nnoremap <Esc>[1;3D <C-w>h

Wiem, że OP mapował Alt+ litery, ale użyłem strzałek, aby pokazać, jak to zrobić dla czegoś, co może nie być domyślnie mapowane.

Walf
źródło
Działa jak urok, wielkie dzięki!
aryndin
2

Działa to dla mnie na terminalu Ubuntu 16.04 xfce (i terminalu rdzy alacritty)

Ustaw wyzwalacz fragmentów ultisnip na Meta-/(podobnie jak fragment kodu emacsa)

let g:UltiSnipsExpandTrigger="^[/"

Oto teraz piszę ^[/w vimie

W trybie wstawiania Ctrl-V Alt-/

( Metajest Altklawiszem na klawiaturze komputera)

użytkownik178047
źródło
1

Jeśli Control+Vpo niej pojawią sięALT-x pokazy ^[x(wpisz terminal), możesz to naprawić za pomocą tego małego skryptu z vim.wikia.com :

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

Dodaj do .vimrc dla wszystkich mapowań klawiszy alt.

laktak
źródło