vim
Kluczowe mapowania w Vimie
Szukaj…
Wprowadzenie
Aktualizacja mapowania klawiszy Vima pozwala rozwiązać dwa rodzaje problemów: Ponowne przypisywanie poleceń kluczowych do liter, które są bardziej zapadające w pamięć lub dostępne, oraz tworzenie poleceń kluczowych dla funkcji, które nie mają żadnych. Tutaj dowiesz się o różnych sposobach [re] mapowania kluczowych poleceń i kontekście, do którego się odnoszą (tj. Tryby vim)
Podstawowe mapowanie
Przegląd mapy
Sekwencję klawiszy można ponownie map na inną sekwencję klawiszy za pomocą jednego z wariantów map .
Jako przykład, następujący typowy map wyjdzie z trybu Insert po naciśnięciu J K w szybkiej sekwencji:
:inoremap jk <Esc>
operator mapy
Istnieje wiele wariantów :map dla różnych trybów.
| Polecenia | Tryby |
|---|---|
:map :noremap :unmap | Tryb normalny, wizualny i tryb oczekiwania operatora |
:map! , :noremap! :unmap! | Tryb wstawiania i wiersza polecenia |
:nmap :nnoremap :nunmap | Tryb normalny |
:imap :inoremap :iunmap | Tryb wstawiania i zastępowania |
:vmap :vnoremap :vunmap | Tryb wizualny i wybierz |
:xmap :xnoremap :xunmap | Tryb wizualny |
:smap :snoremap :sunmap | Wybierz tryb |
:cmap :cnoremap :cunmap | Tryb wiersza poleceń |
:omap :onoremap :ounmap | Tryb oczekiwania operatora |
Zwykle powinieneś używać :noremap wariantów ; sprawia, że mapowanie jest odporne na ponowne mapowanie i rekurencję.
polecenie map
- Możesz wyświetlić wszystkie mapowania za pomocą
:map(lub jednej z powyższych odmian). - Aby wyświetlić bieżące mapowanie dla określonej sekwencji klawiszy, użyj
:map <key>gdzie<key> to sekwencja kluczy - Klucze specjalne, takie jak Esc, są mapowane przy użyciu specjalnej notacji
<>, na przykład<Esc>. Pełna lista kodów kluczy znajduje się na stronie http://vimdoc.sourceforge.net/htmldoc/intro.html#keycodes -
:nmapclear- Wyczyść wszystkie mapy w trybie normalnym -
:nunmap-:nunmapmapowanie mapy trybu normalnego - Można skonfigurować maksymalny czas pomiędzy klawisze sekwencji poprzez zmianę
timeoutittimeoutzmienne
Przykłady
-
imap jk <Esc>: wpisaniejkw trybie wstawiania spowoduje powrót do normalnego trybu -
nnoremap tt :tabnew<CR>: wpisaniettw trybie normalnym otworzy stronę nowej karty -
nnoremap <Cj> <Cw>j: wpisanie<Cj>w trybie normalnym spowoduje przejście do okna poniżej i po lewej stronie -
vmap <Cc> \cc: wpisanie<Cc>w trybie wizualnym spowoduje wykonanie\cc(polecenie NERDCommenter w celu skomentowania linii). Ponieważ zależy to od mapowania wtyczek, nie możesz użyć:vnoremaptutaj!
dalsze czytanie tutaj
Kombinacja klawiszy lidera mapy
Klucz lidera może być wykorzystany jako sposób na utworzenie mapowania z powiązaniem klawiszy, które może zostać zastąpione przez użytkownika końcowego.
Lider jest domyślnie kluczem \ . Aby go zastąpić, użytkownik końcowy musiałby wykonać :let g:mapleader='somekey(s)' przed zdefiniowaniem mapowania.
W typowym scenariuszu mapleader jest ustawiany w .vimrc , a wtyczki używają <Leader> w kluczowej części swoich mapowań, aby można je było dostosowywać.
We wtyczce zdefiniowalibyśmy mapowania za pomocą:
:nnoremap <Leader>a somecomplexaction
To byłoby odwzorować działanie somecomplexaction do \ + kombinacji klucza.
A działanie bez lidera nie zmienia.
Możliwe jest również użycie <Plug>Mappings aby pozostawić więcej miejsca na dostosowanie skrótów klawiszowych wtyczek.
Ilustracja podstawowego mapowania (przydatne skróty).
W większości edytorów tekstu standardowym skrótem do zapisywania bieżącego dokumentu jest Ctrl + S (lub Cmd + S na macOS).
Vim nie ma domyślnie tej funkcji, ale można ją zmapować, aby ułatwić. Dodanie następujących wierszy w pliku .vimrc wykona zadanie.
nnoremap <c-s> :w<CR>
inoremap <c-s> <c-o>:w<CR>
Polecenie nnoremap odwzorowuje Ctrl + s na :w (zapis bieżącej zawartości do pliku), natomiast polecenie inoremap odwzorowuje polecenie Ctrl + S na :w i wraca do trybu wstawiania ( <co> przechodzi w tryb normalny dla jednego polecenia i powraca później do trybu wstawiania, bez zmiany pozycji kursora, czego inne rozwiązania, takie jak <esc>:w<cr>a nie mogą zapewnić).
Podobnie,
" This is commented, as Ctrl+Z is used in terminal emulators to suspend the ongoing program/process.
" nnoremap <c-z> :u<CR>
" Thus, Ctrl+Z can be used in Insert mode
inoremap <c-z> <c-o>:u<CR>
" Enable Ctrl+C for copying selected text in Visual mode
vnoremap <c-c> <c-o>:y<CR>
PS: Należy jednak zauważyć, że Ctrl + S może nie działać zgodnie z oczekiwaniami podczas korzystania z ssh (lub PuTTY). Rozwiązanie tego problemu nie wchodzi w zakres tego dokumentu, ale można je znaleźć tutaj .