Puis-je mapper la touche Alt dans Vim?


90

J'ai essayé de mapper en ajoutant la ligne ci-dessous à .vimrc, mais cela ne fonctionne pas. J'ai vérifié que le .vimrc est chargé par Vim.

map <Alt-D> <C-D>

y a-t-il une erreur dans ce mappage?


Utilisez-vous vim dans un terminal, ou une version gui (gvim, macvim)?
Nick Knowlson

Notez également que si vos encodingmodifications après l'exécution du mappage, ce que vous obtenez de vos touches Alt peut ne pas correspondre à ce que vous avez initialement défini.
dash-tom-bang

Réponses:


136

Pour les utilisateurs de Mac là-bas: pour mapper ALT + hjkl, utilisez à la place le caractère réel généré (découvrez quel caractère utilisant la combinaison en mode INSERT), par exemple avec mon clavier j'obtiens:

<ALT+j> ==> ª
<ALT+k> ==> º

etc. Solution trouvée ici sur StackOverflow.

J'ai utilisé ceci pour déplacer les lignes de haut en bas avec ALT + k \ j, en utilisant ceci sur mon .vimrc:

nnoremap ª :m .+1<CR>==
nnoremap º :m .-2<CR>==

inoremap ª <Esc>:m .+1<CR>==gi
inoremap º <Esc>:m .-2<CR>==gi

vnoremap ª :m '>+1<CR>gv=gv
vnoremap º :m '<-2<CR>gv=gv

comme expliqué ici .

J'espère que c'est utile, profitez de Vim :)

ADDENDUM DE Dylan_Larkin (2019): Pour que cela fonctionne sur un Mac, " Utiliser l'option comme clé méta " doit être désactivé dans Terminal-> Préférences-> Clavier


10
C'est exactement ce pour quoi je suis venu ici (Alt + HJKL pour déplacer les divisions)! Merci!
Jamie Schembri

6
Un moyen facile de savoir de quel caractère il s'agit consiste à utiliser cat. Tapez simplement catet dans la fenêtre du chat la combinaison de touches que vous voulez. J'ai découvert que les crochets alt + sont «et» sur mon mac.
dvcrn

4
cela fonctionne très bien car Alt + HJKL pour se déplacer entre les divisions, mes doigts adorent !! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
John Morales

3
Ces mappages exacts peuvent ne pas fonctionner comme prévu dans les futures versions d'OSX. Utilisez sed -n lpour voir la sortie de <Ak> et <Aj> avant de configurer le mappage. Dans mon cas, <Aj> est et <Ak> est˚
luk3thomas

4
Sur macOS, lors de la configuration Use Option as Meta Keyou sur le profil iTerm ⌥ key to Esc+se comportera comme d'habitude (comme sous Linux / Unix). Vous n'avez donc pas besoin de définir sur Vim la carte <^[j>, il suffit de la mapper sur <A+j>ou <M+j>et cela fonctionne.
goetzc

40

:help key-notationdécrit le format à utiliser pour mapper différentes clés. Dans le cas de alt, vous pouvez utiliser soit <A-ou <M-. Donc votre cartographie serait

map <M-d> <C-d>

Je recommanderais également d'utiliser la norevariante de :map(par exemple noremap) à moins que vous ne souhaitiez explicitement autoriser la réévaluation du côté droit pour les mappages.


1
Cela n'a toujours aucun effet. L'entrée Alt + D introduit toujours un caractère étrange dans Vim.
Thomson le

9
C'est un problème distinct. Votre terminal envoie un caractère multi-octets à Vim et Vim ne sait pas interpréter cela comme <A-d>. Vous devez probablement modifier les paramètres de votre terminal pour qu'il envoie en <A-d>tant que <Esc>d.
jamessan

1
@jamessan comment le faire sur iterm2?
Finn

33

Je ne suis plus sûr que ce soit "possible". Veuillez lire la mise à jour ci-dessous.

Oui, vous pouvez même dans le terminal vim, mais il n'y a pas de vraie réponse fourre-tout . Vous devez essentiellement suivre deux étapes:

  1. Assurez-vous que la <M-d>notation existe et mappez exactement ce que votre terminal entre ( ^[est le caractère d'échappement):

    $ cat
    ^[d
    $
    
    " in your .vimrc
    execute "set <M-d>=\ed"
    " you have to use double quotes!
    
  2. Mappez quelque chose à votre combinaison nouvellement "créée":

    noremap <M-d> :echo "m-d works!"<cr>
    

Comprenant comment cela fonctionne, vous pouvez étendre cette "astuce" à d'autres combinaisons "étranges", par exemple, j'utilise des termites, et vim ne reconnaît pas <S-F1>, en utilisant le chat que j'obtiens ^[[1;2P. Ensuite, dans mon vimrc je fais:, execute "set <S-F1>=\e[1;2P"et puis je peux le mapper à n'importe quoi.

Remarque: je ne sais pas pourquoi, mais pour certaines personnes qui utilisent des \<Esc>œuvres au lieu de \e.


Mise à jour (février 2016)

Selon le terminfo que votre terminal exécute, vous pourriez peut-être ... dans la plupart des terminaux, "alt + h", par exemple, est mappé ^[h, ce qui est: "escape + h". Il pourrait donc écraser les clés. Je viens d'essayer (à nouveau) et cela semble fonctionner, mais je pense que c'est une implémentation très boguée et sujette aux erreurs.

Néanmoins, pour les plus courageux, voici un plugin expérimental:


Au lieu des execute "set...trucs, vous pouvez simplement utiliser directement set <M-d>=^[d. Le ^[est en fait un caractère d'échappement entré avec C-v-Esc. Cela était nécessaire dans rxvt / urxvt, mais xterm ne devrait pas avoir besoin de traitement spécial. Plus d'informations sur ce sujet dans le wiki vim .
Micah Elliott

Existe-t-il une approche analogue à cela qui fonctionnerait avec tmux afin que Md puisse être lié?
George le

2
Pour moi, <Esc>alors dmaintenant fait la même chose que <Alt>+ d. En outre, vous pouvez simplement le faire en une seule ligne avec Ctrl-v, <Esc>comme indiqué ici .
Sparhawk

24

Map Alt Key dans Vim sur Mac OSx:

Commencez par afficher le code clé que votre terminal envoie à vim:

$ sed -n l
^[[1;9D 

Dans l'exemple ci-dessus, j'ai exécuté la commande et appuyé sur Alt + Left.

La ^[[1;9Dséquence d'échappement est envoyée à vim, nous pouvons donc l'utiliser pour notre mappage.

map <Esc>[1;9D 

3
Si vous utilisez l'application iTerm2, il est bon de vérifier comment les touches sont mappées dans Profil> Clés.
fikovnik

1
Avec la Optiontouche gauche ( ) configurée comme Esc+dans iTerm2, je pourrais mapper alt+qpour quitter vim: nnoremap <silent> <Esc>q :qa!<cr>
ryenus

Vous pouvez également configurer iTerm2 pour qu'il fonctionne avec ce remappage si vous allez dans Préférences> Profils, sélectionnez votre profil actuel, allez dans l'onglet "touches" pour ce profil et changez l'option qui dit "Touche gauche ⌥" en "Esc +" (disponible les options sont "Normal", "Meta" et "Esc +").
Giovanni Benussi

12

Utilisation:

map <A-D> <C-D>

Voir :help key-notation.


1
Il semble que cela ne fonctionne toujours pas. Alt + d entrera un caractère étrange dans Vim, qui est la même chose avec la casse unmap.
Thomson

Fonctionne pour moi (j'utilise gvimsur Windows)
Deqing

8

Votre terminal peut ne pas transmettre "correctement" l'Alt-D. Vous pouvez utiliser CV pour obtenir la séquence d'échappement réelle envoyée à Vim et l'utiliser pour créer votre mappage. Ie, éditez votre .vimrc et remplacez le réel en tapant la séquence suivante "CV Alt-D" afin que vous ayez la séquence d'échappement correcte dans votre vimrc. Cela ne fonctionnera pas si votre terminal n'envoie rien à vim.


8

Mon terminal produirait des ^[xcommandes (par exemple pour alt-x). Ce qui l'a fait fonctionner dans Vim était ce petit script de vim.wikia.com :

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

Ajoutez à .vimrc pour corriger tous les mappages de touches alt.


1

Pour faire suite à la réponse de Bruno pour les utilisateurs de Mac, essayez de vous assurer que votre touche d'option est mappée à Esc+.

Cela vous donnera le comportement "normal" de la Atouche option ( ) dans Vim.

Par exemple, dans iterm2, cette option se trouve sous Preferences > Profiles > Keys:

Capture d'écran des préférences iterm2


J'ai également dû changer la configuration nnoremap <Esc>j :m .+1<CR>==et similaire ...
mihaipopescu

0

Bonjour après aucune bonne solution après des années de test de tout ce qui précède sur mac, j'ai continué à chercher.

Voici ma solution:

Pour créer une combinaison de touches incluant Alt, vous devez déclarer la combinaison dans la préférence> clavier et utiliser cette combinaison dans le fichier de configuration de vim (cochez l'option utiliser comme touche méta).

La sortie doit être un caractère inhabituel (non apar exemple) afin de ne pas remplacer un caractère normal.

Dans l'exemple ci-dessous, vous devriez pouvoir tout à fait vim avec ALT-Up.

paramètre vim: paramètre vim

paramètre mac: paramètre mac

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.