Problema de terminal/iTerm2: comando de recortes de búsqueda inversa iTerm

He estado teniendo este problema desde 10.9.

  1. cd en una ruta razonablemente larga, por ejemplo,cd /Volumes/Storage/backup/long/path
  2. Introduzca un comando moderadamente largo, por ejemplo,curl -X GET http://localhost:8888
  3. ctrl+ R, tipocurl
  4. ctrl+E

El comando que se muestra se desplaza hacia la izquierda y deja espacios en blanco a la derecha de la siguiente manera:

ingrese la descripción de la imagen aquí

¿Es un error conocido o solo soy yo?

La búsqueda inversa es una función del shell, no del terminal. Valdría la pena mencionar qué shell estás usando. bash? zsh? Y para responder a la segunda parte de su pregunta: no me está sucediendo zsh5.0.7 usando el último iTerm2 en 10.10.2. La edición comienza al final del comando como se esperaba.
Estoy usando bash3.2.53 y el último iTerm2.
bash3.2.57 está funcionando como se esperaba para mí, aquí. Pone el cursor un carácter más allá del último carácter en la línea cada vez.
@IanC. me inspiró a cambiarme a zsh, ¡y estoy muy contento con eso!
My dotfiles puede ayudarlo a ponerse en marcha rápidamente con zsh: github.com/ianchesal/dotfiles

Respuestas (3)

Es su $PS1- no se escapó correctamente. Debe escapar de todos los caracteres que no se impriman con \[y \]. Por ejemplo, si tienes

PS1='\e[32m\u \W\e[0m $ '

tienes que cambiarlo a

PS1='\[\e[32m\]\u \W\[\e[0m\] $ '

o su cursor aparecerá muy a la derecha porque su shell piensa que su aviso es tan largo, y cuando vuelve a escribir el comando no puede encontrarlo. Molesto, lo sé. En zshnecesitas usar %{y %}IIRC.

Y mientras está considerando cambiar a otro caparazón, le sugiero pescado . Es un poco más de un salto, pero me mantiene cuerdo.

Mi PS1es PS1='\[\e[0;33m\]\u\[\e[0m\]:\[\e[0;32m\]\w\[\e[0m\]\$ 'que parece que no puedo elegir lo que no se ha escapado.
Nota: es innecesario e indeseable aplicar exportshell a las variables. Las subcapas interactivas ejecutarán el script de inicio y definirán la variable, y generalmente no es deseable que los programas que se ejecutan desde la consola hereden variables específicas de la consola.
Me alegro de haber encontrado esto: tuve un problema similar en el que las ediciones de búsqueda inversa + estaban insertando las ediciones en el lugar equivocado, ¡y esta solución fue exactamente la solución para eso!

La desafortunada respuesta es: eres solo tú.

mi bashes:

bash-3.2$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.

Y iTerm2 es la última versión y se comporta como se esperaba: Ctrl-E durante una búsqueda de historial inversa me coloca al final de la línea, en el carácter después del último carácter en la línea seleccionada.

Puede ser que algo en su bashconfiguración esté causando el problema. Puede apartar sus ~/.bash_profilearchivos y ~/.bashrc` y probar Ctrl-R y Ctrl-E y ver si las cosas se comportan mejor. Si lo hacen, reemplace sus personalizaciones una a la vez y vea si puede detectar al culpable.

Cambiar el export TERM="xterm-color"a export TERM="xterm"en mi .bash_profilesolucionó el problema para mí.