Vim atascado en modo de inserción

52

He estado usando Vim durante varios meses ahora a través de mi servidor web (permiten el acceso de masilla). De repente, la escapeclave ha dejado de responder. No puedo existir insert o cualquier otro modo simplemente presionando escape. Tengo que golpear, lo F1que muestra la ayuda en vim y me pone en modo comando.

Estoy seguro de que mi tecla de escape en mi teclado funciona bien, ya que todos mis atajos de Windows que usan la tecla de escape funcionan normalmente.

Sé que esta es una pregunta ridícula y estoy seguro de que hay mucho más que considerar con respecto a una solución. Lo que realmente necesito es una pista sólida sobre dónde comenzar a buscar.

Cosas que pueden ayudar:

  1. Estoy usando vim a través de masilla
  2. Estoy iniciando sesión usando jailshell
  3. No soy root
Levi Hackwith
fuente
¿Cuáles son sus configuraciones de terminal? es decir, ¿a qué se ajusta exactamente la variable de entorno TERM (en el shell remoto)?
quack quijote
$ TERM se establece en 'xterm'
Levi Hackwith
Funciona Ctrl-[? ¿Qué obtienes si presionas y Ctrl-vluego escapas? Debería mostrarse como ^[.
Pausado hasta nuevo aviso.
El Ctrl- [funcionó. Rock on! Esto me ahorra mucha frustración. ¿Hay alguna posibilidad de que puedas explicar por qué escya no funciona? Además, publique su comentario como respuesta para que pueda aceptarlo.
Levi Hackwith
Mi primer pensamiento al leer esto: "Oh, él rompió su botón 'Sácame de aquí'"
Daniel

Respuestas:

16

Intenta usar en Ctrl-[lugar de Esc.

¿Cuál es el resultado de:

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

cuando presionas Escy Enter? Debería ser "27". ¿Cuál es el resultado de presionar Ctrl-Ventonces Esc?

¿Ha verificado todas las configuraciones en PuTTY para ver si son razonables?

¿Estás usando Bash en el sistema remoto? Mira la salida de

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

y mira si ves algo inusual. ¿Tienes un archivo llamado ~/.inputrc? Mire su contenido para ver si algo es inusual.

Mire su ~/.vimrcy vea si todo está bien también.

Pausado hasta nuevo aviso.
fuente
Ctrl-c también debería finalizar el modo de inserción (el '[' es a veces un poco difícil de conseguir en algunos teclados)
akira
1
Ejecuté el script de Python y regresó como una cadena vacía. ¿Cómo puedo solucionar esto? Estoy usando masilla.
Keith
@Keith: ¿Has probado alguna de las otras sugerencias de diagnóstico?
Pausado hasta nuevo aviso.
ctrl + [funcionó para mí por cualquier razón, no tengo idea de lo que hice para que mi vim se atascara.
Derek Adair
147

Había golpeado por error Ctrl+ s, y me quedé atascado en el modo de inserción. Para salir de ella usa Ctrl+ q.

bhaskar
fuente
77
Ese no es el modo de inserción que es XOFF. Puede deshabilitar el control de flujo de software haciendo stty -ixon(agregarlo a su ~/.bashrc). Entonces esa pulsación de tecla estará disponible para estar vinculada a otra cosa. Por defecto en Bash está vinculado a forward-search-history(lo contrario de Ctrl-r). Ctrl-q (Bash quoted-insert) también estará disponible.
Pausado hasta nuevo aviso.
@DennisWilliamson ¿No .bash_profilesería un lugar mejor? No es necesario apagarlo en un shell no interactivo, ¿verdad?
Piotr Dobrogost
1
@PiotrDobrogost: "Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, Bash lee y ejecuta comandos desde ~ / .bashrc, si ese archivo existe". .bash_profilesolo se ejecuta cuando Bash es un shell de inicio de sesión. "Entonces, por lo general, su ~ / .bash_profile contiene la línea if [ -f ~/.bashrc ]; then . ~/.bashrc; fi"
pausa hasta nuevo aviso.
@DennisWilliamson Tienes razón. Lo que quise decir es que probablemente tenga sentido deshabilitar el control de flujo de software solo en shells interactivos. Si esto es cierto, entonces tendría sentido encontrar una manera de saber si un shell es interactivo y deshabilitar el control de flujo de software solo en este caso.
Piotr Dobrogost
@PiotrDobrogost: Vea mi respuesta a "¿Cómo puedo verificar en bash si un shell se ejecuta en modo interactivo?"
Pausado hasta nuevo aviso.
4

Quizás esté utilizando el modo de inserción .

'insertmode' 'im' 'noinsertmode' 'noim'
boolean (valor predeterminado desactivado)
Hace que Vim funcione de manera que el modo Insert es el modo predeterminado. Útil si desea utilizar Vim como editor sin modo. Utilizado para | evim |.
[...]
- Utilícelo CTRL-Opara ejecutar un comando en modo Normal | i_CTRL-O |). Cuando se trata de una asignación, se ejecuta como si 'insertmode' estuviera desactivado. El modo normal permanece activo hasta que finaliza la asignación. - Use CTRL-Lpara ejecutar varios comandos del modo Normal, luego use Escpara volver al modo Insertar. Tenga en cuenta que CTRL-Lmueve el cursor hacia la izquierda, como lo hace cuando 'insertmode' no está configurado. | i_CTRL-L |

Sugiero editar ~/.vimrcpara agregar la siguiente línea:

set noinsertmode         "disable insert mode
SandRock
fuente
1
En mi caso, se atascó en el modo de inserción porque accidentalmente usé '-y' en la línea de comandos Como se dijo en el manual: -y Inicie Vim en modo fácil, al igual que el ejecutable se llamaba "evim" o "eview". Hace que Vim se comporte como un editor de clic y tipo. Para salir de este "modo fácil" simplemente use <kbd> CTRL </kbd> + <kbd> l </kbd> (L minúscula) como lo dijo + SandRock
ton
0

Tuve este problema, pero me di cuenta de que era por cambiar accidentalmente el modo de entrada SCIM a "Otro - CÓDIGO SIN PROCESAR". Lo cambié a inglés / teclado y no tuve más problemas.

vim_user
fuente