¿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í).

RomanSt
fuente

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í

Der Hochstapler
fuente
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).

quijote curandero
fuente
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 .

Damien Garrido
fuente
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

Iain
fuente
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.

Dennis Williamson
fuente
¡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
Camión
fuente
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.

Ciatico
fuente
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