vim
Mappages de touches dans Vim
Recherche…
Introduction
La mise à jour des mappages de clés Vim vous permet de résoudre deux types de problèmes: Réaffecter des raccourcis clavier aux lettres les plus mémorables ou accessibles, et créer des raccourcis clavier pour les fonctions qui n'en ont pas. Vous apprendrez ici les différentes façons de mapper les commandes clés et le contexte auquel elles s'appliquent (par exemple les modes vim)
Cartographie de base
carte Aperçu
Une séquence de touches peut être ré-associée à une autre séquence de touches à l'aide de l'une des variantes de la map
.
Par exemple, la map
va sortir du mode Insertion lorsque vous appuyez sur j k en séquence rapide:
:inoremap jk <Esc>
Opérateur de carte
Il existe plusieurs variantes de :map
pour différents modes.
Commandes | Modes |
---|---|
:map :noremap :unmap | Mode normal, visuel et en attente d'opérateur |
:map! , :noremap! , :unmap! | Mode d'insertion et de ligne de commande |
:nmap :nnoremap :nunmap | Mode normal |
:imap :inoremap :iunmap | Mode d'insertion et de remplacement |
:vmap :vnoremap :vunmap | Mode visuel et sélection |
:xmap :xnoremap :xunmap | Mode visuel |
:smap :snoremap :sunmap | Sélectionnez le mode |
:cmap :cnoremap :cunmap | Mode ligne de commande |
:omap :onoremap :ounmap | Mode en attente de l'opérateur |
En règle générale, vous devez utiliser les variantes :noremap
; Cela rend le mappage insensible aux remappages et aux récursions.
commande de carte
- Vous pouvez afficher tous les mappages en utilisant
:map
(ou l'une des variantes ci-dessus). - Pour afficher le mappage actuel pour une séquence de touches spécifique, utilisez
:map <key>
où<key
> est une séquence de clés - Les touches spéciales comme Esc sont mappées en utilisant une notation spéciale
<>
, comme<Esc>
. Pour la liste complète des codes clés, voir http://vimdoc.sourceforge.net/htmldoc/intro.html#keycodes -
:nmapclear
- Effacer toutes les cartes en mode normal -
:nunmap
- Décompressez une carte en mode normal - Vous pouvez configurer le temps maximum entre les clés d'une séquence en modifiant les variables
timeout
etttimeout
Exemples
-
imap jk <Esc>
: taperjk
en mode insertion vous ramènera au mode normal -
nnoremap tt :tabnew<CR>
:tt
en mode normal ouvrira une nouvelle page d’onglet -
nnoremap <Cj> <Cw>j
: taper<Cj>
en mode normal vous fera sauter à la fenêtre ci-dessous et à gauche -
vmap <Cc> \cc
: taper<Cc>
en mode visuel exécutera\cc
(commande NERDCommenter pour commenter la ligne). Comme cela repose sur un mappage de plugin, vous ne pouvez pas utiliser:vnoremap
ici!
Lire plus ici
Combinaison de touches du leader de la carte
La clé principale peut être utilisée pour créer un mappage avec une liaison de clé pouvant être remplacée par l'utilisateur final.
Le leader est la touche \ par défaut. Pour le remplacer, l'utilisateur final doit exécuter :let g:mapleader='somekey(s)'
avant de définir le mappage.
Dans un scénario classique, le mapleader est défini dans le .vimrc
, et les plug-ins utilisent <Leader>
dans la partie keybinding de leurs mappages pour les personnaliser.
Dans le plugin, nous définirions des mappages avec:
:nnoremap <Leader>a somecomplexaction
Ce mapperait l'action somecomplexaction à la \ + une combinaison de touches.
L'une action sans le leader ne change pas.
Il est également possible d'utiliser des <Plug>Mappings
pour laisser plus d'espace pour personnaliser les raccourcis des plugins.
Illustration du mappage de base (raccourcis pratiques).
Dans la plupart des éditeurs de texte, le raccourci standard pour enregistrer le document en cours est Ctrl + S (ou Cmd + S sur macOS).
Vim n'a pas cette fonctionnalité par défaut mais cela peut être mappé pour faciliter les choses. L'ajout des lignes suivantes dans le fichier .vimrc
fera l'affaire.
nnoremap <c-s> :w<CR>
inoremap <c-s> <c-o>:w<CR>
La commande nnoremap
mappe Ctrl + s sur :w
(commande le contenu actuel dans le fichier) alors que la commande inoremap
mappe la commande Ctrl + S sur :w
et revient au mode insertion ( <co>
passe en mode normal pour une commande et retourne ensuite au mode d'insertion sans modifier la position du curseur que d'autres solutions comme <esc>:w<cr>a
ne peuvent pas assurer).
De même,
" 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: Cependant, il faut noter que Ctrl + S peut ne pas fonctionner comme prévu lors de l'utilisation de ssh (ou PuTTY). La solution à ce problème n'entre pas dans le cadre de ce document, mais peut être trouvée ici .