Pourquoi CMD-R gâche-t-il Vim sur Mac? Qu'est-ce qu'il essaie réellement de faire?

19

Traversez cela constamment depuis que je suis développeur Web, 'cmd-r' a pour effet secondaire d'empêcher les touches fléchées de fonctionner dans n'importe quel mode, mais je ne peux pas imaginer que c'est le but et je n'ai pas pu trouver toute documentation sur ce qu'il est censé faire.

Edit: Apparemment, il s'agit en fait d'une commande de terminal mac, «Send Reset», donc je suppose que c'est maintenant une question de «À quoi sert la commande send reset? Explique pourquoi je n'ai pas pu le trouver dans les documents vim.

GlypheGryphe
la source

Réponses:

16

Pour éviter ce désagrément, je remappe Command-R sur "Ignorer" dans le mappage de clé iTerm.

entrez la description de l'image ici

Christian Long
la source
Je vous remercie. Cela devenait terriblement ennuyeux.
ThinkingInBits
10

Cela m'arrive même lorsque je n'utilise pas screen et j'ai trouvé que je peux revenir à la normalité en effaçant le terminal exécutant vim (j'ai également testé cela avec tmux mais pas screen:

:!clear
mtjburton
la source
6

Cette question a été répondue ici: lors de l'exécution de l'écran sur OSX, la commande + r gâche les touches fléchées dans vim sur tous les écrans

Réponse copiée:

En tant que bon petit défenseur de Vim, je me sens obligé de vous dire d'apprendre à utiliser hjkl comme touches de curseur. À mi-chemin de l'exploration du problème, j'ai pensé qu'il s'était mystérieusement résolu, jusqu'à ce que je réalise que je testais en utilisant hjkl au lieu des touches fléchées réelles.

Quoi qu'il en soit, maintenant pour une vraie réponse.

Au lieu d'arrêter tous vos écrans et de redémarrer, vous pouvez profiter de la capacité de l'écran à se déplacer entre les terminaux. Appuyez sur CTRL + A CTRL + D pour détacher l'écran de votre terminal, puis exécutez screen -D -R pour le rattacher. Cela devrait faire fonctionner à nouveau vos touches fléchées.

Si vous n'êtes pas à l'écran, mais uniquement dans Vim, vous pouvez alors CTRL + Z et taper fg pour le même effet.

Vous pouvez également contourner le problème des touches de curseur dans Vim, mais la réinitialisation peut avoir changé d'autres options de terminal, il est donc plus sûr de faire comme décrit ci-dessus de peur de voir d'autres problèmes d'affichage / clavier aléatoires. Si vous voulez quand même les remappages, les voici:

map <Esc>[A <Up>
map <Esc>[B <Down>
map <Esc>[C <Right>
map <Esc>[D <Left>

Détails sales:

Vim et screen utilisent tous les deux la bibliothèque ncurses pour gérer le terminal. L'une des choses que ncurses fait quand il prend le contrôle d'un terminal compatible VT100 est de basculer les touches fléchées en "mode d'application", ce qui change les codes qu'ils émettent. La touche fléchée vers le haut, par exemple, passe de Esc [A à Esc O A. Le code de contrôle VT100 qu'il émet pour ce faire est Esc [? 1 h. La commande de réinitialisation de terminal envoyée par Command + R réinitialise les touches de curseur à leur valeur par défaut.

L'écran de détachement et de rattachement permet à ncurses de reprendre le contrôle du terminal, qui réapplique tous les paramètres qu'il aime, c'est donc probablement le moyen le plus portable et le plus fiable pour restaurer les choses à la normale.

Codes de contrôle VT100: http://www.handshake.de/infobase/dfue/prgrmmer/t322.htm

Munen
la source
Ouais, j'ai trouvé qu'après avoir posté, vu "La commande de réinitialisation de terminal envoyée par Command + R réinitialise les touches de curseur à la valeur par défaut.", Serait toujours génial de savoir exactement pourquoi cela se produit. Honnêtement, je suis surtout intéressé à savoir à quoi sert cette commande, ce à quoi cela ne répond pas.
GlyphGryph