Vim coincé en mode insertion

52

J'utilise Vim depuis plusieurs mois via mon hébergeur (ils autorisent l'accès au mastic). Tout à coup, la escapeclé est devenue insensible. Je ne peux pas exister ni insérer ni aucun autre mode en frappant simplement échapper. Je dois taper F1ce qui appelle l'aide dans vim et me lance en mode commande.

Je suis presque certain que ma touche d'échappement sur mon clavier fonctionne correctement, car tous mes raccourcis Windows qui utilisent cette touche fonctionnent normalement.

Je sais que c'est une question ridicule et je suis convaincu qu'il y a encore beaucoup à étudier pour trouver une solution. Ce dont j'ai vraiment besoin, c'est d'une piste solide pour savoir où commencer à chercher.

Choses qui pourraient aider:

  1. J'utilise vim via mastic
  2. Je me connecte en utilisant jailshell
  3. Je ne suis pas root
Levi Hackwith
la source
Quels sont les paramètres de votre terminal? En d'autres termes, à quoi la variable d'environnement TERM est-elle définie (dans le shell distant)?
Quack Quichote
$ TERM est réglé sur 'xterm'
Levi Hackwith le
Ça Ctrl-[marche? Qu'est-ce que vous obtenez si vous appuyez sur Ctrl-vpuis échapper? Il devrait montrer que ^[.
pause jusqu'à nouvel ordre.
Le Ctrl- [a fonctionné. Rock On! Cela me sauve beaucoup de frustration. Y a-t-il une chance que vous puissiez expliquer pourquoi escne fonctionne plus? Aussi, s'il vous plaît postez votre commentaire comme une réponse afin que je puisse l'accepter.
Levi Hackwith
Ma première pensée en lisant ceci est: "Oh, il a cassé son bouton 'Fais-moi passer le diable d'ici' '"
Daniel

Réponses:

16

Essayez d'utiliser Ctrl-[au lieu de Esc.

Quel est le résultat de:

python -c "print ord(raw_input('char '))"

quand vous appuyez sur Escet Enter? Il devrait être "27". Quel est le résultat du pressage Ctrl-Valors Esc?

Avez-vous vérifié tous les paramètres dans PuTTY pour voir s'ils sont raisonnables?

Utilisez-vous Bash sur le système distant? Regardez la sortie de

bind -p | grep -i '\\e' | less

et voyez si vous voyez quelque chose d'inhabituel. Avez-vous un fichier appelé ~/.inputrc? Regardez son contenu pour voir si quelque chose est inhabituel.

Regardez votre ~/.vimrcet voyez si tout va bien, aussi.

En pause jusqu'à nouvel ordre.
la source
Ctrl-c devrait également mettre fin au mode insertion (le '[' est parfois un peu difficile à obtenir sur certains claviers)
mercredi
1
J'ai exécuté le script Python et il est revenu sous forme de chaîne vide. Comment puis-je réparer ça? J'utilise du mastic.
Keith
@ Keith: Avez-vous essayé l'une des autres suggestions de diagnostic?
pause jusqu'à nouvel ordre.
Ctrl + [a fonctionné pour moi pour quelque raison que ce soit, aucune idée de ce que j'ai fait pour que vim reste bloqué.
Derek Adair
147

J'ai frappé par erreur Ctrl+ set je me suis retrouvé coincé en mode insertion. Pour en sortir utilisez Ctrl+ q.

Bhaskar
la source
7
Ce n'est pas le mode d'insertion qui est XOFF. Vous pouvez désactiver le contrôle de flux logiciel en le faisant stty -ixon(ajoutez-le à votre ~/.bashrc). Ensuite, cette frappe sera disponible pour être lié à autre chose. Par défaut dans Bash, il est lié à forward-search-history(l'opposé de Ctrl-r). Ctrl-q (Bash quoted-insert) sera également disponible.
pause jusqu'à nouvel ordre.
@DennisWilliamson Ne serait pas .bash_profileun meilleur endroit? Il n'est pas nécessaire de l'éteindre dans un shell non interactif, n'est-ce pas?
Piotr Dobrogost
1
@PiotrDobrogost: "Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, Bash lit et exécute les commandes de ~ / .bashrc, si ce fichier existe." .bash_profilen'est exécuté que lorsque Bash est un shell de connexion. "Ainsi, généralement, votre ~ / .bash_profile contient la ligne if [ -f ~/.bashrc ]; then . ~/.bashrc; fi"
pause jusqu'à nouvel avis.
@ DennisWilliamson Vous avez raison. Ce que je voulais dire, c'est qu'il est probablement judicieux de désactiver le contrôle de flux logiciel uniquement dans les shells interactifs. Si cela est vrai, il serait alors logique de trouver un moyen de déterminer si un shell est interactif et de désactiver le contrôle de flux logiciel uniquement dans ce cas.
Piotr Dobrogost
@PiotrDobrogost: Voir ma réponse à "Comment vérifier en bash si un shell s'exécute en mode interactif?"
pause jusqu'à nouvel ordre.
4

Peut-être utilisez-vous le mode insertion .

'insertmode' 'im' 'noinsertmode' 'noim'
boolean (valeur par défaut désactivée)
Fait fonctionner Vim de manière à ce que le mode Insertion soit le mode par défaut. Utile si vous souhaitez utiliser Vim en tant qu'éditeur non modal. Utilisé pour | evim |.
[...]
- Permet CTRL-Od'exécuter une commande en mode normal | i_CTRL-O |). Lorsqu'il s'agit d'un mappage, il est exécuté comme si "insertmode" était désactivé. Le mode normal reste actif jusqu'à ce que le mappage soit terminé. - Utilisez CTRL-Lpour exécuter un certain nombre de commandes en mode Normal, puis Escpour revenir au mode Insertion. Notez que CTRL-Lle curseur est déplacé vers la gauche, comme lorsque le mode insertion n'est pas défini. | i_CTRL-L |

Je suggère l'édition ~/.vimrcpour ajouter la ligne suivante:

set noinsertmode         "disable insert mode
SandRock
la source
1
Dans mon cas, il est bloqué en mode insertion parce que j’avais utilisé accidentellement `-y` en ligne de commande. Fait que Vim se comporte comme un éditeur de clics et de types. Pour quitter ce mode "facilité" utiliser simplement <kbd> CTRL </ kbd> + <kbd> l </ kbd> (L minuscule) comme le dit + Sandrock
tonne
0

J'ai eu ce problème, mais je me suis rendu compte que c'était en changeant accidentellement le mode d'entrée SCIM en "Autre - RAW CODE". Je l'ai changé en anglais / clavier et je n'ai plus eu de problèmes.

vim_user
la source