¿Cómo configurar PuTTY para que Home / End / PgUp / PgDn funcionen correctamente en bash?


123

Las teclas Inicio, Fin, Re Pág, Av Pág escriben todas ~en mi sesión de bash en lugar de mover el cursor / vista. ¿Por qué sucede esto y qué configuraciones necesito cambiar?

GNU bash, version 4.0.28(1)-release (x86_64--netbsd)
PuTTY v0.60

La pregunta originalmente leída:

En PuTTY, ¿por qué presionar la tecla "Inicio" en el shell (bash) escribe un "~"? O más bien, ¿cómo hago para mover el cursor al inicio del comando que he escrito?

(Pensé que la razón era que ~ es el directorio de inicio , pero las respuestas dicen que esto no es así).

Respuestas:


150

Cambie la Cadena de tipo Terminal en la pestaña Conexión> Datos de la "xterm" predeterminada a "linux". Funcionó para mi.

ingrese la descripción de la imagen aquí


2
¡Gracias! Tuve este problema después de intentar hacer que Ctrl izquierda / derecha funcionara con este método ( superuser.com/a/103097/45410 ).
— Edwin Yip el

44
Énfasis: no Terminal -> Keyboard"Las teclas de función y el teclado".
— Elazar

2
Funciona pero crea otros problemas como deshabilitar la compatibilidad con el mouse. entonces, no es una solución aceptable para mí
— Anton

¡Esta solución también habilita diéresis dentro de masilla cuando se conecta a OS X!
— mono lorem

42

Esto sucede porque no tiene configurado correctamente el tipo de terminal de PuTTY o porque su servidor no tiene instaladas las definiciones correctas de terminfo.

En los sistemas basados ​​en Debian, el paquete ncurses-term (versión 5.7 + 20081213-1) incluye archivos de definición de terminfo para los tipos de terminal putty , putty-256color y putty-vt100 . Si tiene instalado este paquete, puede establecer la "Cadena de tipo terminal" en "masilla" en lugar de la "xterm" predeterminada en la configuración de sesión de Masilla (Conexión -> Datos).

Stephen Irons también menciona "linux" como otro tipo de terminal que funciona; Creo que esto es correcto por experiencia previa, pero no lo he probado recientemente.

En mis sistemas, esto permite que Home y End funcionen correctamente, aunque PageUp / PageDown no desplaza la ventana de la consola. (Funcionan correctamente en aplicaciones ncurses como aptitude , y Shift-PgUp / Shift-PgDn desplazan la ventana de la consola).


Sí, usar TERM=puttyo TERM=putty-256colores más sabio, aunque desafortunadamente en este momento no parece funcionar correctamente para los colores 8-15 (que se supone que son las versiones brillantes de 0-7). Es muy probable que las otras "soluciones" se escapen a veces por su flagrante desprecio de las diferencias entre los terminales involucrados.
— SamB

yum install ncurses-termMe lo ordenó en CentOS 7 con masilla en el próximo inicio de sesión, gracias.
— Wandering Zombie

1
configurar el tipo de terminal para que puttyfuncione, pero rompe el soporte de mouse similar a xterm (por ejemplo, para Midnight Commander)
— Anton

instalar 'ncurses-term' funcionó para mí en las pruebas de Debian.
— hochl

ninguno de estos funciona para mí, estoy en masilla conectando a centos, y no puedo ejecutar yum install ncurses-term porque no soy root.
— Herman Toothrot

20

Si desea verificar qué código envía PuTTY a su terminal cuando presiona una tecla o una combinación de teclas, solo tiene que emitir Ctrl+Vay luego presionar la tecla deseada.

Por ejemplo, en mi cuadro, presionar la tecla Inicio generará la siguiente cadena en mi terminal:

^[[1~

Eso significa que PuTTY envía el carácter de escape ^ [ seguido de la cadena [1 ~ .

Puede crear un ~/.inputrcarchivo en su $HOMEcarpeta o, alternativamente, un /etc/inputrcarchivo dependiendo de su sistema. Luego llene este archivo con los códigos PuTTY y las acciones de Bash coincidentes que desea que Bash active.

Nota: Reemplace cada ^ [ carácter por la cadena equivalente \ e

En mi ejemplo, agregaré una línea con mi código de tecla de Inicio y la acción de inicio de línea (que por defecto está vinculada Ctrl+Aen Bash):

"\e[1~": beginning-of-line

FYI, mi archivo inputrc tiene el siguiente contenido:

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
"\e[1~": beginning-of-line     # Home key
"\e[4~": end-of-line           # End key
"\e[5~": beginning-of-history  # PageUp key
"\e[6~": end-of-history        # PageDown key
"\e[3~": delete-char           # Delete key
"\e[2~": quoted-insert         # Insert key
"\eOD": backward-word          # Ctrl + Left Arrow key
"\eOC": forward-word           # Ctrl + Right Arrow key

Desde @Cimbali: más comandos enlazables (como historial anterior: moverse hacia arriba en la lista de historial) disponibles en esta página de referencia .


SI ! Finalmente ! La cadena de tipo terminal de Putty no hizo nada para la palabra hacia atrás y hacia adelante. Esto es genial !
— Cimbali

1
Esta es la única solución aceptable porque TERM=linuxo TERM=puttyrompe el soporte de mouse similar a xterm. ¡Gracias!
— Anton

14

Crtl + A te lleva al inicio de la línea

Aquí hay una lista de atajos de teclado Bash


13
Eso es genial y todo, pero Home / End están conectados en mi cerebro, y dado que solo administro el servidor una vez en una luna azul, las posibilidades de desaprender el cableado son escasas.
— RomanSt

9

Lo que en realidad está enviando ^[[1~es una secuencia de escape de terminal que consiste en:

  • ^ [- escapar
  • [- corchete izquierdo
  • 1 uno
  • ~ - tilde

Puede ver eso presionando Ctrl+ y Vluego Home.

Es posible que pueda solucionar su problema cambiando la configuración del teclado PuTTY para las teclas Inicio y Fin a rxvt (lo que hace la secuencia de escape ^[[Ho cambiando el $ TERM que está usando (o editando ~/.inputrc).

Por cierto, no hay relación entre la tilde que obtienes cuando presionas Homey la tilde que representa el directorio de inicio. Por ejemplo, en mi configuración Page-Downproduce, ^[[6~que también imprimiría una tilde si no se interpretara correctamente.


¡Gracias! rxvt reparó la tecla de inicio; La tecla Fin ahora produce un sonido. PgUp / Down efectivamente escribe ~, y ninguna de las configuraciones del teclado PuTTY los hace funcionar. ¿Está mal mi golpe o es "normal"?
— RomanSt

¿Qué obtienes cuando escribes echo $TERM?
— Dennis Williamson

xterm(Límite de 15 caracteres argh)
— RomanSt

3
Puede intentar agregar "\eOw": end-of-line(que es una letra mayúscula O) a su ~/.inputrcarchivo.
— Dennis Williamson

Tecla final fijada; Me hago una idea. Realmente deseo que hacks como este no fueran necesarios ...
— RomanSt

2

Ninguna de estas opciones funcionó para mí. Estoy ejecutando un viejo sistema AIX. Tuve que agregar los siguientes alias a mi perfil.

alias __A=$(print '\0020') # ^P = up = previous command
alias __B=$(print '\0016') # ^N = down = next command
alias __C=$(print '\0006') # ^F = right = forward a character
alias __D=$(print '\0002') # ^B = left = back a character

no funciona para mí, fastidio
— Herman Toothrot

1

No pude hacerlo funcionar con otros métodos. Sin embargo, creé este script AutoHotkey que funciona, siempre y cuando su shell sea Bash:

#IfWinActive ahk_class PuTTY
PgUp::Send +{PgUp}
PgDn::Send +{PgDn}
Home::Send ^a   ; beginning of line
End::Send ^e    ; end of line
+^Del::Send ^k  ; delete whole line after cursor
+End::Send ^k   ; delete whole line after cursor
+Home::Send ^u  ; delete whole line before cursor
^Del::Send !d   ; delete word after cursor
^BS::Send ^w    ; delete word before cursor
^Left::Send !b  ; jump word left
^Right::Send !f ; jump word right
#IfWinActive

Sin embargo, use con precaución , ya que no todas estas teclas rápidas de bash funcionan en otros programas.


Esto interferiría con la razón principal por la que estoy viendo esto: screenque con la configuración predeterminada rompe Ctrl-A porque lo usa como un personaje de escape ...
— Gert van den Berg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.