vim
Nyckelkartläggningar i Vim
Sök…
Introduktion
Genom att uppdatera Vim-nyckelmappningar kan du lösa två typer av problem: Tilldela nyckelkommandon till bokstäver som är mer minnesvärda eller tillgängliga och skapa nyckelkommandon för funktioner som inte har några. Här lär du dig om de olika sätten att [re] kartlägga nyckelkommandon och det sammanhang som de gäller (dvs. vim-lägen)
Grundläggande kartläggning
kartöversikt
En tangentsekvensen kan vara re-mappad till en annan tangent sekvens genom att använda någon av map
varianter.
Som exempel kommer följande typiska map
att lämna Infoga-läge när du trycker på j k i snabb sekvens:
:inoremap jk <Esc>
kartoperatör
Det finns flera varianter av :map
för olika lägen.
kommandon | lägen |
---|---|
:map :noremap :unmap | Normalt, visuellt och operatörsvänt läge |
:map! , :noremap! , :unmap! | Infoga och kommandoradsläge |
:nmap :nnoremap :nunmap | Normalt läge |
:imap :inoremap :iunmap | Infoga och ersätt läge |
:vmap :vnoremap :vunmap | Visuellt och Välj läge |
:xmap :xnoremap :xunmap | Visuellt läge |
:smap :snoremap :sunmap | Välj läge |
:cmap :cnoremap :cunmap | Kommandoradsläge |
:omap :onoremap :ounmap | Operatörs väntande läge |
Vanligtvis bör du använda :noremap
varianterna ; det gör kartläggningen immun mot omappning och rekursion.
karta Kommando
- Du kan visa alla mappningar med
:map
(eller en av variationerna ovan). - För att visa den aktuella kartläggningen för en specifik tangentsekvens, använd
:map <key>
där<key
> är en sekvens av nycklar - Specialnycklar som Esc mappas med speciell
<>
notation, som<Esc>
. För fullständig lista över nyckelkoder, se http://vimdoc.sourceforge.net/htmldoc/intro.html#keycodes -
:nmapclear
- Rensa alla normala läge kartor -
:nunmap
- Ta bort en karta över ett normalt läge - Du kan konfigurera den maximala tiden mellan tangenterna i en sekvens genom att ändra
timeout
ochttimeout
variablerna
exempel
-
imap jk <Esc>
:jk
skriverjk
i insert-läge kommer du tillbaka till normalt läge -
nnoremap tt :tabnew<CR>
: att skrivatt
i normalt läge öppnar en ny flikssida -
nnoremap <Cj> <Cw>j
: att skriva<Cj>
i normalt läge får dig att hoppa till fönstret nedan och till vänster -
vmap <Cc> \cc
: att skriva<Cc>
i visuellt läge kommer att köra\cc
(NERDCommenter-kommando för att kommentera raden). Eftersom detta bygger på en plugin-mappning kan du inte använda:vnoremap
här!
vidare läsning här
Kartledare-tangentkombination
Ledarknappen kan användas som ett sätt att skapa en kartläggning med en nyckelbindning som kan åsidosättas av slutanvändaren.
Ledaren är \ nyckeln som standard. För att åsidosätta det, måste slutanvändaren köra :let g:mapleader='somekey(s)'
innan han definierar kartläggningen.
I ett typiskt scenario är kartläsaren inställd i .vimrc
, och plugins använder <Leader>
i nyckelbindningsdelen av deras mappningar för att anpassa dem.
I plugin definierar vi mappningar med:
:nnoremap <Leader>a somecomplexaction
Detta skulle kartlägga somkomplexaktionen till \ + en tangentkombination.
A åtgärd utan ledaren ändras inte.
Det är också möjligt att använda <Plug>Mappings
att ge mer utrymme för att anpassa plugins nyckelbindningar.
Illustration av grundläggande kartläggning (praktiska genvägar).
I de flesta textredigerare är standardgenvägen för att spara det aktuella dokumentet Ctrl + S (eller Cmd + S på macOS).
Vim har inte den här funktionen som standard men den kan kartläggas för att göra det lättare. Att lägga till följande rader i .vimrc
filen kommer att göra jobbet.
nnoremap <c-s> :w<CR>
inoremap <c-s> <c-o>:w<CR>
Kommandot nnoremap
kartlägger Ctrl + s till :w
(skriv nuvarande innehåll till fil) inoremap
medan kommandot inoremap
kartlägger Ctrl + S till :w
kommandot och återgår tillbaka till insert-läget ( <co>
går till normalt läge för ett kommando och återgår till infogningsläge efteråt, utan att ändra markörens position som andra lösningar som <esc>:w<cr>a
inte kan säkerställa).
Liknande,
" 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: Det måste dock noteras att Ctrl + S kanske inte fungerar som förväntat när du använder ssh (eller PuTTY). Lösningen på detta ligger inte inom ramen för detta dokument utan kan hittas här .