Comment mapper la touche Alt?

38

J'essaie de mapper la Altclé de la manière suivante:

:map <A-j> j
:map <A-k> k

mais ça ne marche pas (on sonne sur Alt + j/ Alt + k).

Qu'est-ce que je manque?

J'utilise Terminal sur OSX, il en va de même sur Linux distant.


Sur Ctrl + v, Alt + jj'ai: ?~H~F( quand encoding=utf-8).

Sur Ctrl + v, Alt + kj'ai: ?~Z( ˚quand encoding=utf-8).

Exécuter vim sans plugins ( -u NONE) ne fait aucune différence.

Kenorb
la source
1
Est-ce que Alt(presse, pas tenir) et ensuite jtravailler? Il faut xtermau moins que je sois prêt metaSendsEscapeà true faire en sorte que ces séquences fonctionnent ... Je ne sais pas si vous avez le même problème, et je n'utilise pas OSX, je ne peux donc pas tester ...
Martin Tournoij
@Carpetsmoker Presser Alt, relâcher, puis jou toute autre touche fonctionne normalement. J'ai vérifié et trouvé l'option 'Utiliser l'option en tant que clé méta' , je l'ai activée et cela fonctionne maintenant. Donc, le réglage a metaSendsEscapefait l'affaire, merci.
Kenorb
3
Cette question a déjà reçu une réponse (avec une meilleure réponse) ici: stackoverflow.com/questions/6778961/…
user3751385

Réponses:

36

C'est comme ça que je fais sur Linux ou Cygwin:

Commencez par vérifier quels caractères sont envoyés par votre terminal lorsque vous appuyez sur ALT+ J:

Pour ce faire, je vais à la console et lance sed -n l(vous pouvez également utiliser catpour cela). Ensuite, j'appuie sur ALT+ Jet vois que les caractères à l'écran sont ^[j.

Je remplace ^[par \e(parce que c'est ce qui est envoyé par mon terminal lorsque j'appuie sur esc) et la chaîne finale pour moi est \ej.

Puis je l'écris à mon .vimrc:

execute "set <M-j>=\ej"
nnoremap <M-j> j

Et la cartographie fonctionne.

Kossak
la source
4
Je ne trouve pas la documentation de la :set <M-j>=\ejpièce. Que dois-je rechercher?
Evgeni Sergeev
1
Merci pour la réponse, c’était la seule solution qui fonctionnait pour moi avec w / Iterm + vim
newUserNameHere
Non, ça ne marche pas. Parfois, ESC-J agira comme ALT-J
utilisateur3751385
1
@EvgeniSergeev See:help :set-termcap
Rich
10

Avec l’aide de Carpetsmoker , il semble que Terminal n’ait pas été configuré pour «Utiliser l’option Alt / option comme clé méta» (cela est particulièrement courant pour les terminaux à interface graphique).

Pour Terminal sur OSX, cela se trouve dans Préférences -> Paramètres -> onglet Clavier -> "Utiliser l’option comme clé méta" . Vérification: Comment puis-je changer le terminal pour utiliser l’option comme clé méta? ( Mavericks ).

Pour XTerm, vérifiez: La configuration de XTerm sur la valeur par défaut sur Meta Sends Escape indique:

Ajoutez cette ligne n'importe où dans votre fichier personnel .Xdefaults ( ~/.Xdefaults):

xterm*metaSendsEscape: true

Rechargez ensuite la configuration avec xrdb. Sans cette étape, les modifications apportées .Xdefaultsne prendront effet qu'au prochain redémarrage de X:

xrdb -l ~/.Xdefaults

Ensuite, les mappages standard avec des Altclés telles que:

:map <A-j> j
:map <A-k> k

fonctionne bien.

Pour de l' aide, voir: :h :map-alt-keys.

Kenorb
la source
4
Peut aussi vouloir regarder :h :map-alt-keyscomme une autre source d'information
Peter Rincker
4

Semblable à la réponse de Kossak, mais un peu plus simple, en mappant les touches à appuyer littéralement.

Soit en mode normal après avoir appuyé sur :, soit inséré dans votre .vimrc, mappez l’entrée directement en commençant le mappage:

nnoremap 

puis appuyez sur Ctrl+ Vpuis sur la frappe pour enregistrer, par exemple Alt+ . Cela montrera quelque chose comme ça:

nnoremap ^[[1;3D

mais chacun ^[correspond à un seul caractère d'échappement littéral et la coloration syntaxique doit l'indiquer. Remplacez le ou les caractères d'échappement par le texte <Esc>et ajoutez la commande que vous souhaitez utiliser:

nnoremap <Esc>[1;3D <C-w>h

Je sais que OP mappait Alt+ lettres, mais j’ai utilisé des flèches pour montrer comment procéder pour quelque chose qui peut ne pas être mappé par défaut.

Walf
la source
Travaillé comme un charme, merci beaucoup!
aryndin
2

Cela fonctionne pour moi sur Ubuntu 16.04 xfce terminal (et alacritty rust terminal)

Définissez le déclencheur de l'extrait de code ultisnip sur Meta-/(comme pour l'extrait de code emacs)

let g:UltiSnipsExpandTrigger="^[/"

Voici maintenant je tape ^[/vim

En mode insertion Ctrl-V Alt-/

( Metaest la Alttouche sur le clavier de mon PC)

utilisateur178047
la source
1

Si Control+Vsuivi de ALT-xshows ^[x(tapez terminal), vous pouvez le réparer avec 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 tous les mappages de touches alt.

laktak
la source