vim
Mappature chiave in Vim
Ricerca…
introduzione
L'aggiornamento dei mapping dei tasti Vim consente di risolvere due tipi di problemi: riassegnare i comandi chiave alle lettere che sono più memorizzabili o accessibili e creare comandi chiave per funzioni che non ne contengono. Qui apprenderete i vari modi per [re] mappare i comandi chiave e il contesto a cui si applicano (cioè le modalità vim)
Mappatura di base
panoramica della mappa
Una sequenza di tasti può essere rimappata su un'altra sequenza di tasti usando una delle varianti di map
.
Ad esempio, la seguente map
tipica uscirà dalla modalità di inserimento quando si preme j k nella sequenza rapida:
:inoremap jk <Esc>
mappa Operatore
Ci sono più varianti di :map
per diverse modalità.
comandi | Modalità |
---|---|
:map :noremap :unmap | Modalità normale, visiva e operatore in attesa |
:map! , :noremap! , :unmap! | Inserisci e modalità riga di comando |
:nmap :nnoremap :nunmap | Modalità normale |
:imap :inoremap :iunmap | Modalità Inserisci e sostituisci |
:vmap :vnoremap :vunmap | Modalità visiva e selezione |
:xmap :xnoremap :xunmap | Modalità visiva |
:smap :snoremap :sunmap | Seleziona la modalità |
:cmap :cnoremap :cunmap | Modalità della riga di comando |
:omap :onoremap :ounmap | Operatore in attesa |
Di solito, dovresti usare le varianti :noremap
; rende la mappatura immune al remapping e alla ricorsione.
comando di mappa
- Puoi visualizzare tutti i mapping usando
:map
(o una delle varianti sopra). - Per visualizzare la mappatura corrente per una sequenza di tasti specifica, utilizzare
:map <key>
dove<key
> è una sequenza di tasti - I tasti speciali come Esc sono mappati usando la notazione speciale
<>
, come<Esc>
. Per l'elenco completo dei codici chiave, vedi http://vimdoc.sourceforge.net/htmldoc/intro.html#keycodes -
:nmapclear
: cancella tutte le mappe in modalità normale -
:nunmap
-:nunmap
una mappa in modalità normale - È possibile configurare il tempo massimo tra le chiavi di una sequenza cambiando i
timeout
ettimeout
variabili
Esempi
-
imap jk <Esc>
: digitandojk
in modalità inserimento tornerai alla modalità normale -
nnoremap tt :tabnew<CR>
: digitandott
in modalità normale si aprirà una nuova scheda -
nnoremap <Cj> <Cw>j
: digitando<Cj>
in modalità normale ti farà saltare alla finestra in basso ea sinistra -
vmap <Cc> \cc
: digitando<Cc>
in modalità visuale verrà eseguito\cc
(comando NERDCommenter per commentare la riga). Poiché si basa su una mappatura dei plugin, non puoi usare:vnoremap
qui!
a leggere qui
Combinazione di tasti leader della mappa
La chiave leader potrebbe essere utilizzata come un modo per creare una mappatura con un'associazione di chiavi che può essere sostituita dall'utente finale.
Il leader è il tasto \ per impostazione predefinita. Per sovrascriverlo, l'utente finale dovrebbe eseguire :let g:mapleader='somekey(s)'
prima di definire la mappatura.
In uno scenario tipico, il mapleader è impostato in .vimrc
ei plug-in utilizzano <Leader>
nella parte relativa alla combinazione di tasti dei loro mapping per renderli personalizzabili.
Nel plugin, definiremmo i mapping con:
:nnoremap <Leader>a somecomplexaction
Questo mapperebbe l' azione di somecomplexaction alla combinazione di tasti \ + a .
L'azione senza il leader non cambia.
È anche possibile usare <Plug>Mappings
per lasciare più spazio per personalizzare i collegamenti dei plugin.
Illustrazione della mappatura di base (scorciatoie utili).
Nella maggior parte degli editor di testo, la scorciatoia standard per salvare il documento corrente è Ctrl + S (o Cmd + S su macOS).
Vim non ha questa caratteristica di default ma può essere mappata per semplificare le cose. L'aggiunta delle seguenti righe nel file .vimrc
farà il lavoro.
nnoremap <c-s> :w<CR>
inoremap <c-s> <c-o>:w<CR>
Il comando nnoremap
mappa Ctrl + s per :w
(scrive il contenuto corrente su file) mentre il comando inoremap
esegue il mapping di Ctrl + S per :w
comando e ritorna alla modalità di inserimento ( <co>
entra nella modalità normale per un comando e ritorna alla modalità di inserimento in seguito, senza alterare la posizione del cursore che altre soluzioni come <esc>:w<cr>a
non possono garantire).
Allo stesso modo,
" 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: Tuttavia, è necessario notare che Ctrl + S potrebbe non funzionare come previsto durante l'utilizzo di ssh (o PuTTY). La soluzione a questo non è nell'ambito di questo documento, ma può essere trovata qui .