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
-:nunmap
mapowanie mapy trybu normalnego - Można skonfigurować maksymalny czas pomiędzy klawisze sekwencji poprzez zmianę
timeout
ittimeout
zmienne
Przykłady
-
imap jk <Esc>
: wpisaniejk
w trybie wstawiania spowoduje powrót do normalnego trybu -
nnoremap tt :tabnew<CR>
: wpisaniett
w 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ć:vnoremap
tutaj!
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 .