Retroceso no funciona en Cygwin

29

Acabo de instalar Cygwin y la funcionalidad RETROCESO no está allí, es decir, cuando presiono la tecla Retroceso, obtengo un espacio.

Intenté investigar este problema en Google, pero no encontré nada concluyente.

usuario620189
fuente
¿Puede dar más detalles sobre cómo instaló e invocó Cygwin, y dónde exactamente la tecla de retroceso no funciona?
ak2
1
Supongo que esto está sucediendo en el shell. ¿Qué sucede cuando escribe control-V seguido de retroceso? ¿Y cuál es el resultado del sttycomando?
Keith Thompson
¿Qué tipo de teclado tienes? EE. UU., Reino Unido, etc.
pjc50
Alguna vez has resuelto esto? Lo estoy viendo ahora en mi nueva instalación de Cygwin, aunque anteriormente funcionó. Vale la pena señalar que no está obteniendo "un espacio": no se puede mover el cursor hacia atrás para borrar el personaje. El espacio que estás viendo es el espacio que se suponía que pisotearía al personaje anterior. Si presiona ^ L, puede ver que el retroceso ESTÁ funcionando. Es por eso que stty no está arreglando las cosas. Es casi como el shell de CMD al que Cygwin está obligado a no interpretar el movimiento del cursor.
SomeCallMeTim

Respuestas:

33

En mi caso, el retroceso no funcionaba en absoluto después de crear ~ / .vimrc en blanco. El siguiente cambio lo hizo funcionar

Poner:

establecer bs = 2

en .vimrc

Encontré esto en http://linux-journal.blogspot.com/2005/04/fix-vim-backspace-doesnt-work.html

vaichidrewar
fuente
Gracias, esto funcionó para mí: anteriormente, en Vim, mi tecla de retroceso se movía hacia atrás a lo largo de la línea, pero no borraba las letras hasta que comencé a escribir. Ahora hace el retroceso 'habitual'.
Robert
44
Es genial que esta respuesta haya ayudado a otros usuarios, pero en este caso no es la solución a la pregunta ya que la pregunta original no es sobre vim.
Kelsin
Esto también resolvió un problema similar que tenía con las teclas del cursor
Steve Paul
12

Funcionó para mí: en el símbolo del sistema de Windows, escriba

echo export TERM=cygwin >> C:/cygwin/home/YourUser/.bashrc

¡Esto lo agregará al .bashrcy todo puede funcionar bien!

Marrciovr
fuente
1
Tenía la TERMvariable de entorno establecida a msystravés de la configuración de la variable de entorno de Windows como se sugiere en StackOverflow para ayudar con los gitproblemas en Windows. Simplemente restablecerlo cygwinen .bashrcno ayudó, pero eliminar la TERMentrada de la configuración de Windows sí. ¡Gracias por señalarme en la dirección correcta!
Florian Brucker
Esto resolvió el hecho de que cygwin64 ignoraba los espacios de retroceso en los comandos que contienen saltos de línea. Gracias.
suanik
11

Encontré una solución a un problema que se presentó como el anterior.

Simplemente ejecute la configuración de Cygwin nuevamente y reinstale termcapy terminfo. Si usa el cuadro de búsqueda, puede encontrarlos rápidamente. En lugar de decir "Guardar" para cada uno, haga clic en él para que diga "Reinstalar". Puede que tenga que marcar la casilla de verificación "Ocultar obsoleto" para termque aparezca en la búsqueda.

Mi carpeta terminfo faltaba por completo. No tengo idea de por qué. Espero que esto ayude a alguien.

SomeCallMeTim
fuente
1
Tenía un ncurses instalado personalizado, que eliminé. Después de quitar y reinstalar a través de cygwin setup.exe tuve este problema. No quiero aplicar una bandaid configurando las variables TERM a algo distinto de lo que funcionaba antes de mi contratiempo. Reinstalar terminfo (no pude encontrar termcap) funcionó para mí. ¡Gracias!
Kelsin
genial, funciona, pero ¿por qué?
Yordan Georgiev
5

Edite su c: \ cygwin \ cygwin.bat

Coloca esto: SET TERM=cygwin

antes de: bash --login -i

Josef
fuente
1
La solución más simple con diferencia. Espero que no haya efectos secundarios.
RomanSt
1

Cuando configura el tipo TERM, le está diciendo al host qué TERMCAP debe usar para dibujar dentro de la ventana del terminal. La mayoría de los hosts * NIX no saben qué es un tipo de término 'cygwin', por lo que no saben cómo realizar la manipulación de caracteres en pantalla, como inserciones, eliminaciones, pergaminos, cambios de fuente, etc.

Si cambia la variable TERM en CYGWIN antes de telnet o SSH a un host, obtendrá resultados mucho mejores:

En CYGWIN:

d@test01 ~
$ TERM=ansi;export TERM
$ ssh suntest1

d@suntest1's password:
Sun Microsystems Inc.  SunOS 5.8     Generic patch    October 2001

d   pts/1         test01    Fri   Oct 12  00:15   still logged in
$ echo $TERM
ansi
$_

El host ahora sabe que tiene un tipo de terminal ANSI y puede usar su archivo ANSI TERMCAP para indicarle cómo comunicarse.

Si no puede hacer que funcione y casi todo funciona correctamente, excepto el espacio de retroceso, puede reprogramar "getty" en el host al que se conecta para reconocer lo que desea, y así es cómo (este es el más antiguo, el más común y el más universal forma de resolver problemas de retroceso / eliminación):

Usted ssh o telnet a su host y en el host ejecuta el comando stty. Si presiona la tecla "RETROCESO" y no retrocede es porque el terminal probablemente esté buscando un carácter diferente en función del tipo TERM. En lugar de profundizar en todo eso, puede establecer manualmente la definición de retroceso en la CLI o en su archivo .profile, .bashrc o .bash-profile en su directorio $ HOME como desee o según el sabor de * NIX que sea utilizando.

Entonces, si presiona ^ H (eso es CONTROL-H) y su tecla retrocede pero presiona la tecla RETROCESO y no intenta usar stty de la siguiente manera:

stty erase \*<HIT YOUR BACKSPACE KEY HERE>*[ENTER]

La mayoría de las veces se verá así:

stty erase \^?[ENTER]

El '\' le dice que el siguiente carácter será un carácter de control no imprimible y que lo acepte, no lo "interpretará".

Una vez que presione [ENTRAR], debería poder presionar su tecla [RETROCESO] y hacer que retroceda / elimine lo que escribió.

Puede configurar esto en su shell.

Ahora, si todavía usa VI, a veces la traducción no funciona y tiene que escribir ^ H en vi, pero está bien.

Podrías haber dicho:

stty borrarse [ENTRAR]

y literalmente habría traducido 'k' en el carácter borrar / borrar.

-RE

TekOps
fuente
0

Ok, tuve este problema con la actualización manual de una instalación de Cygwin. De todos modos encontré esta publicación , que me llevó a la solución para mi instalación.

El cygwin anterior tenía un archivo /etc/terminfo/c/cygwin, pero en el cygwin más nuevo esperaba que fuera el archivo /etc/terminfo/63/cygwin.

Una vez que copié el archivo "cygwin" en esta ubicación, la tecla de retroceso del shell bash funcionó bien, al igual que tab y otros.

usuario327463
fuente
0

Cambiar la TERMvariable cygwiny agregar SET TERM=cygwinal .batarchivo no funcionó para mí, pero lo arreglé. Aquí lo que hice: en la instalación debida del administrador de paquetes que seleccioné para instalar xterm: X11 terminal emulator, después de la instalación agregué SET TERM=xtermal .batarchivo (como se propuso anteriormente), inicié el terminal y en Opciones -> Menú del terminal seleccionado Type=xterm, luego reinicié el terminal. Retroceso comenzó a funcionar correctamente!

Nota: si ya instaló cygwin, simplemente ejecute el instalador nuevamente y agregue el paquete xterm.

Estoy corriendo:

  • OS = Windows 8 (x64)
  • Cygwin setup.exe versión = 2.850 (x64)
  • Versión Mitty = 1.2-beta1 (x86_64-pc-cygwin)
Argón
fuente
0

Funcionó para mí: en el símbolo del sistema de Windows, escriba

(echo; echo "export TERM=cygwin") >> ~/.bash_profile

Esto lo agregará al .bash_profile (no .bashrc, que no funcionó para mí, y con un salto de línea inicial)

bjelli
fuente
0

Después de pasar 2 días de tiempo leyendo cosas en línea. Encontré este que funcionó para mí. No sé si este caso coincide con todos. Pero funcionó a las mil maravillas gracias a Yuksel

El problema era con los archivos 'termInfo', pasos que él sugirió

  1. confirme si el problema está relacionado con la terminal escribiendo CygWin Terminal, esto debería dar (ignore la advertencia)

    less my_session.log

ADVERTENCIA: el terminal no es completamente funcional

  1. Obtenga la información de 'TermCap' con la ruta o directorio con el que está relacionado escribiendo el código a continuación en la Terminal CygWin

    infocmp -C

deberías obtener

infocmp: no se pudo abrir el archivo terminfo / usr / share / terminfo / 63 / cygwin

O también puede obtener algo que comience con texto como 'Reconstruido a través de infocmp ...'

  1. Ejecute el siguiente código en CygWin Terminal para ejecutar los diagnósticos y obtener detalles adicionales sobre la ruta donde se guardan los archivos

    cygcheck -s

que debería responderte similar al texto a continuación

Diagnósticos de configuración de Cygwin

...

C: / cygwin / system binary, noacl

C: / cygwin / bin / usr / bin system binary, noacl

C: / cygwin / lib / usr / lib system binary, noacl

C: \ cygwin \ etc \ terminfo / usr / share / terminfo system binary, noacl

prefijo cygdrive / usuario binario cygdrive, noacl, posix = 0, auto

...

  1. echa un vistazo a una línea similar a

C: \ cygwin \ etc \ terminfo / usr / share / terminfo system binary, noacl

de la salida, obtuviste del tercer paso. ahora copie todos los archivos y carpetas que existen dentro de / usr / share / terminfo en la carpeta C: \ cygwin \ etc \ terminfo - NOTA: esta carpeta puede ser diferente a la suya dependiendo de la instalación

Yellowandred
fuente
0

Por favor siga la imagen de abajo ingrese la descripción de la imagen aquí

  1. Haga clic derecho en cualquier lugar de la ventana de Cygwin
  2. Hacer clic options
  3. Haz clic en la Keyspestaña
  4. garrapata Backarrow sends ^H
  5. Presione aplicar.

Esto es lo único que funcionó para mí, especialmente porque si tiene que usar SSH en un servidor (no todas las soluciones funcionarán) solía agregar stty erase ^?a mi .bashrc, pero esto solo solucionó el problema el 80% del tiempo.

marca
fuente
-1

Nunca experimenté tu problema. Intente instalar el emulador de terminal Mintty ( http://code.google.com/p/mintty/ ).

Está disponible a través del instalador de Cygwin. La mejor terminal para cygwin.

Luciano Fiandesio
fuente
Esto no ayudó.
user620189
Incluso estoy atrapado en el mismo problema y desde Minty también la funcionalidad de retroceso no funciona. Tengo espacio cuando presiono la tecla de retroceso tanto en la terminal de menta como en la terminal de cygwin
Rachel
@ Rachel ¿Alguna vez resolvió esto? Estoy viendo el mismo problema con una nueva instalación de Cygwin. :(
SomeCallMeTim
@SomeCallMeTim: pude solucionar este problema usando Minty, cygwin se comporta de una manera muy extraña a veces.
Rachel
@Rachel Gracias, aunque descubrí que mi problema era que la instalación de Cygwin perdió algunos archivos importantes (como / usr / lib / terminfo). No sé por qué se perdieron; Encontré a alguien más con ese problema, entró en la configuración y le dijo a Terminfo y Termcap que reinstalaran, y todo funcionó.
SomeCallMeTim