Używasz Vima w terminalu, czy w wersji GUI (gvim, macvim)?
Nick Knowlson
Pamiętaj również, że jeśli encodingzmiany po uruchomieniu mapowania zostaną uruchomione, to, co uzyskasz z klawiszy Alt, może nie być zgodne z początkowo ustawionymi.
dash-tom-bang
Odpowiedzi:
136
Dla użytkowników komputerów Mac: do mapowania ALT + hjkl użyj zamiast tego prawdziwego wygenerowanego znaku (dowiedz się, który znak używając kombinacji w trybie INSERT), na przykład z moją klawiaturą otrzymuję:
<ALT+j> ==> ª
<ALT+k> ==> º
i tak dalej. Rozwiązanie znalezione tutaj w StackOverflow.
Użyłem tego do przesuwania linii w górę iw dół za pomocą ALT + k \ j, używając tego na moim .vimrc:
Właśnie po to tu przyszedłem (Alt + HJKL, aby przesunąć podziały)! Dzięki!
Jamie Schembri
6
Łatwym sposobem sprawdzenia, która to postać, jest użycie cat. Po prostu wpisz catw oknie kota żądaną kombinację klawiszy. Okazało się, że alt + nawiasy to „i” na moim Macu.
dvcrn
4
działa świetnie, jak Alt + HJKL, aby poruszać się między podziałami, moje palce to uwielbiają !! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
John Morales,
3
Te dokładne mapowania mogą nie działać zgodnie z oczekiwaniami w przyszłych wersjach OSX. Użyj, sed -n laby zobaczyć dane wyjściowe <Ak> i <Aj> przed skonfigurowaniem mapowania. W moim przypadku <Aj> jest, ∆a <Ak> jest˚
luk3thomas
4
W systemie MacOS podczas ustawiania Use Option as Meta Keylub w profilu iTerm ⌥ key to Esc+będzie zachowywać się w tradycyjny sposób (jak w systemie Linux / Unix). Więc nie musisz ustawiać w Vimie mapy <^[j>, po prostu zamapuj ją na <A+j>lub <M+j>i działa.
goetzc
40
:help key-notationopisuje, jakiego formatu należy użyć do odwzorowania różnych kluczy. W przypadku alt możesz użyć albo <A-lub <M-. Więc twoje mapowanie będzie
map <M-d> <C-d>
Polecam również użycie norewariantu :map(np. noremap), Chyba że wyraźnie chcesz zezwolić na ponowne oszacowanie prawej strony pod kątem mapowań.
To nadal nie ma żadnego efektu. Wejście Alt + D nadal wprowadza jakiś dziwny znak do Vima.
Thomson
9
To osobna kwestia. Twój terminal wysyła wielobajtowy znak do Vima, a Vim nie wie, jak go zinterpretować <A-d>. Prawdopodobnie musisz zmienić ustawienia terminala, aby wysyłał <A-d>jako plik <Esc>d.
jamessan
1
@jamessan jak to zrobić w iterm2?
Finn,
33
Nie jestem pewien, czy jest już „możliwe”. Przeczytaj aktualizację poniżej.
Tak, możesz nawet w terminalowym vimie, ale nie ma prawdziwej odpowiedzi na wszystkie pytania. Zasadniczo musisz wykonać dwa kroki:
Upewnij się, że <M-d>notacja istnieje i dokładnie odwzoruj dane wejściowe terminala ( ^[jest to znak ucieczki):
$ cat
^[d
$
" in your .vimrc
execute "set <M-d>=\ed"
" you have to use double quotes!
Przypisz coś do nowo „utworzonej” kombinacji:
noremap <M-d> :echo "m-d works!"<cr>
Rozumiejąc, jak to działa, możesz rozszerzyć tę "sztuczkę" na inne "dziwne" kombinacje, na przykład, ja używam termitu, a vim nie rozpoznaje <S-F1>, używając kota, którego dostałem ^[[1;2P. Następnie w moim vimrc robię:, execute "set <S-F1>=\e[1;2P"a potem mogę mapować to na cokolwiek.
Uwaga: nie wiem dlaczego, ale dla niektórych osób używa \<Esc>zamiast tego \e.
Aktualizacja (luty 2016)
W zależności od terminfo obsługiwanego przez twój terminal, być może mógłbyś ... w większości terminali mapowane jest na przykład "alt + h" ^[h, czyli: "escape + h". Więc może nadpisać klucze. Właśnie spróbowałem (ponownie) i wydaje się, że działa, ale uważam, że jest to implementacja bardzo błędna i podatna na błędy.
Niemniej jednak, dla odważnych, oto eksperymentalna wtyczka:
Zamiast tego execute "set...możesz po prostu bezpośrednio użyć set <M-d>=^[d. W ^[rzeczywistości jest to znak zmiany znaczenia wprowadzony za pomocą C-v-Esc. Było to konieczne w rxvt / urxvt, ale xterm nie powinien wymagać specjalnego traktowania. Więcej informacji na ten temat w wiki vim .
Micah Elliott,
Czy istnieje analogiczne podejście do tego, które działałoby z tmuxem, aby np. Można było powiązać Md?
George
2
Dla mnie, <Esc>po czym dteraz robi to samo co <Alt>+ d. Możesz to również zrobić w jednej linii za pomocą Ctrl-v, <Esc>jak tutaj .
Sparhawk
24
Mapuj klawisz Alt w Vimie na Mac OSx:
Zacznij od przejrzenia kodu klucza, który Twój terminal wysyła do vim:
$ sed -n l
^[[1;9D
W powyższym przykładzie uruchomiłem polecenie i nacisnąłem Alt + Left.
Jest ^[[1;9Dto sekwencja ucieczki wysyłana do vima, więc możemy użyć jej do naszego mapowania.
Jeśli korzystasz z aplikacji iTerm2, dobrze jest sprawdzić, jak przypisane są klawisze w menu Profile> Keys.
fikovnik
1
Z lewym Optionklawiszem ( ⌥) skonfigurowanym jak Esc+w iTerm2, mogłem zmapować alt+qwyjście z vima: nnoremap <silent> <Esc>q :qa!<cr>
ryenus
Możesz także skonfigurować iTerm2 do pracy z tym przemapowaniem, jeśli przejdziesz do Preferencje> Profile, wybierzesz bieżący profil, przejdź do zakładki „klucze” tego profilu i zmień opcję „Lewy ⌥ klawisz” na „Esc +” (dostępne dostępne opcje to „Normalny”, „Meta” i „Esc +”).
Wygląda na to, że to nadal nie działa. Alt + d wprowadzi dziwny znak do Vima, tak samo jak w przypadku unmap.
Thomson
Działa dla mnie (używam gvimw systemie Windows)
Deqing
8
Twój terminal może nie przesyłać „poprawnie” Alt-D. Możesz użyć CV, aby faktycznie otrzymać aktualną sekwencję ucieczki wysłaną do Vima i użyć jej do stworzenia swojego mapowania. To znaczy, wyedytuj swój plik .vimrc i zastąp rzeczywisty wpisując następującą sekwencję "CV Alt-D", abyś miał poprawną sekwencję ucieczki w swoim vimrc. To nie zadziała, jeśli twój terminal nie wyśle niczego do vima.
Musiałem też zmienić konfigurację na nnoremap <Esc>j :m .+1<CR>==i podobne ...
mihaipopescu
0
Witam, po wielu latach testowania wszystkich powyższych rozwiązań na Macu, bez dobrego rozwiązania, szukałem dalej.
Oto moje rozwiązanie:
Aby stworzyć kombinację klawiszy, w tym Alt, musisz zadeklarować kombinację w preferencjach> klawiatura i użyć tej kombinacji w pliku konfiguracyjnym vima (zaznacz opcję use jako klawisz meta).
Wynik musi być nietypowym znakiem ( ana przykład nie), aby nie nadpisywać zwykłego znaku.
W poniższym przykładzie powinieneś być w stanie całkiem vimować z ALT-Up.
encoding
zmiany po uruchomieniu mapowania zostaną uruchomione, to, co uzyskasz z klawiszy Alt, może nie być zgodne z początkowo ustawionymi.Odpowiedzi:
Dla użytkowników komputerów Mac: do mapowania ALT + hjkl użyj zamiast tego prawdziwego wygenerowanego znaku (dowiedz się, który znak używając kombinacji w trybie INSERT), na przykład z moją klawiaturą otrzymuję:
i tak dalej. Rozwiązanie znalezione tutaj w StackOverflow.
Użyłem tego do przesuwania linii w górę iw dół za pomocą ALT + k \ j, używając tego na moim .vimrc:
jak wyjaśniono tutaj .
Mam nadzieję, że to przydatne, ciesz się Vimem :)
DODATEK DYLAN_LARKIN (2019): Aby to działało na Macu, należy wyłączyć opcję „ Użyj opcji jako klucza meta ” w Terminal-> Preferencje-> Klawiatura
źródło
cat
. Po prostu wpiszcat
w oknie kota żądaną kombinację klawiszy. Okazało się, że alt + nawiasy to „i” na moim Macu.nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
sed -n l
aby zobaczyć dane wyjściowe <Ak> i <Aj> przed skonfigurowaniem mapowania. W moim przypadku <Aj> jest,∆
a <Ak> jest˚
Use Option as Meta Key
lub w profilu iTerm⌥ key to Esc+
będzie zachowywać się w tradycyjny sposób (jak w systemie Linux / Unix). Więc nie musisz ustawiać w Vimie mapy<^[j>
, po prostu zamapuj ją na<A+j>
lub<M+j>
i działa.:help key-notation
opisuje, jakiego formatu należy użyć do odwzorowania różnych kluczy. W przypadku alt możesz użyć albo<A-
lub<M-
. Więc twoje mapowanie będziePolecam również użycie
nore
wariantu:map
(np.noremap
), Chyba że wyraźnie chcesz zezwolić na ponowne oszacowanie prawej strony pod kątem mapowań.źródło
<A-d>
. Prawdopodobnie musisz zmienić ustawienia terminala, aby wysyłał<A-d>
jako plik<Esc>d
.Nie jestem pewien, czy jest już „możliwe”. Przeczytaj aktualizację poniżej.
Tak, możesz nawet w terminalowym vimie, ale nie ma prawdziwej odpowiedzi na wszystkie pytania. Zasadniczo musisz wykonać dwa kroki:
Upewnij się, że
<M-d>
notacja istnieje i dokładnie odwzoruj dane wejściowe terminala (^[
jest to znak ucieczki):Przypisz coś do nowo „utworzonej” kombinacji:
Rozumiejąc, jak to działa, możesz rozszerzyć tę "sztuczkę" na inne "dziwne" kombinacje, na przykład, ja używam termitu, a vim nie rozpoznaje
<S-F1>
, używając kota, którego dostałem^[[1;2P
. Następnie w moim vimrc robię:,execute "set <S-F1>=\e[1;2P"
a potem mogę mapować to na cokolwiek.Uwaga: nie wiem dlaczego, ale dla niektórych osób używa
\<Esc>
zamiast tego\e
.Aktualizacja (luty 2016)
W zależności od terminfo obsługiwanego przez twój terminal, być może mógłbyś ... w większości terminali mapowane jest na przykład "alt + h"
^[h
, czyli: "escape + h". Więc może nadpisać klucze. Właśnie spróbowałem (ponownie) i wydaje się, że działa, ale uważam, że jest to implementacja bardzo błędna i podatna na błędy.Niemniej jednak, dla odważnych, oto eksperymentalna wtyczka:
źródło
execute "set...
możesz po prostu bezpośrednio użyćset <M-d>=^[d
. W^[
rzeczywistości jest to znak zmiany znaczenia wprowadzony za pomocąC-v-Esc
. Było to konieczne w rxvt / urxvt, ale xterm nie powinien wymagać specjalnego traktowania. Więcej informacji na ten temat w wiki vim .<Esc>
po czymd
teraz robi to samo co<Alt>
+d
. Możesz to również zrobić w jednej linii za pomocąCtrl-v
,<Esc>
jak tutaj .Mapuj klawisz Alt w Vimie na Mac OSx:
Zacznij od przejrzenia kodu klucza, który Twój terminal wysyła do vim:
W powyższym przykładzie uruchomiłem polecenie i nacisnąłem Alt + Left.
Jest
^[[1;9D
to sekwencja ucieczki wysyłana do vima, więc możemy użyć jej do naszego mapowania.źródło
Option
klawiszem (⌥
) skonfigurowanym jakEsc+
w iTerm2, mogłem zmapowaćalt+q
wyjście z vima:nnoremap <silent> <Esc>q :qa!<cr>
Posługiwać się:
Zobacz
:help key-notation
.źródło
gvim
w systemie Windows)Twój terminal może nie przesyłać „poprawnie” Alt-D. Możesz użyć CV, aby faktycznie otrzymać aktualną sekwencję ucieczki wysłaną do Vima i użyć jej do stworzenia swojego mapowania. To znaczy, wyedytuj swój plik .vimrc i zastąp rzeczywisty wpisując następującą sekwencję "CV Alt-D", abyś miał poprawną sekwencję ucieczki w swoim vimrc. To nie zadziała, jeśli twój terminal nie wyśle niczego do vima.
źródło
Mój terminal produkowałby
^[x
polecenia (np. Dla alt-x). To, co sprawiło, że działał w Vimie, to ten mały skrypt z vim.wikia.com :Dodaj do .vimrc, aby naprawić wszystkie mapowania klawiszy alt.
źródło
jako kontynuacja odpowiedzi Bruno dla użytkowników komputerów Mac, spróbuj upewnić się, że klucz opcji jest zmapowany
Esc+
.To da ci "normalne" zachowanie
A
klawisza option ( ) w Vimie.Na przykład w programie
iterm2
tę opcję można znaleźć podPreferences > Profiles > Keys
:źródło
nnoremap <Esc>j :m .+1<CR>==
i podobne ...Witam, po wielu latach testowania wszystkich powyższych rozwiązań na Macu, bez dobrego rozwiązania, szukałem dalej.
Oto moje rozwiązanie:
Wynik musi być nietypowym znakiem (
a
na przykład nie), aby nie nadpisywać zwykłego znaku.W poniższym przykładzie powinieneś być w stanie całkiem vimować z ALT-Up.
ustawienie vim:
ustawienie mac:
źródło