Come configurare PuTTY in modo che Home / End / PgUp / PgDn funzionino correttamente in bash?


123

I tasti Home, Fine, PageUp, PageDown digitano tutti a ~nella mia sessione bash invece di spostare il cursore / vista. Perché ciò accade e quali impostazioni devo modificare?

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

La domanda originariamente leggeva:

In PuTTY, perché premendo il tasto "Home" sulla shell (bash) si digita un "~"? O meglio, come faccio a spostare il cursore all'inizio del comando che ho digitato?

(Ho pensato che la ragione fosse che ~ è la home directory, ma le risposte dicono che non è così.)

Risposte:


150

Modificare la stringa di tipo Terminale nella scheda Connessione> Dati dal predefinito "xterm" a "linux". Ha funzionato per me.

inserisci qui la descrizione dell'immagine


2
Grazie! Ho avuto questo problema dopo aver provato a far funzionare Ctrl Sinistra / Destra usando questo metodo ( superuser.com/a/103097/45410 ).
Edwin Yip,

4
Enfasi: non Terminal -> Keyboard"I tasti funzione e la tastiera".
Elazar,

2
Funziona ma crea altri problemi come disabilitare il supporto del mouse. quindi, non è una soluzione accettabile per me
Anton,

Questa soluzione abilita anche gli umlaut all'interno del mastice durante la connessione a OS X!
Lorem Monkey

42

Questo accade perché non hai impostato correttamente il tipo di terminale PuTTY o perché sul tuo server non sono installate le definizioni terminfo corrette.

Sui sistemi basati su Debian, il pacchetto ncurses-term (versione 5.7 + 20081213-1) include i file di definizione terminfo per i tipi di terminale putty , putty-256color e putty-vt100 . Se questo pacchetto è installato, è possibile impostare la "stringa di tipo Terminale" su "putty" anziché "xterm" predefinito nella configurazione della sessione di Putty (Connessione -> Dati).

Stephen Irons menziona anche "linux" come un altro tipo di terminale che funziona; Credo che ciò sia corretto per esperienza precedente, ma non l'ho testato di recente.

Sui miei sistemi, ciò consente a Home e End di funzionare correttamente, sebbene PageUp / PageDown non scorrano la finestra della console. (Funzionano correttamente nelle applicazioni ncurses come aptitude e Shift-PgUp / Shift-PgDn scorre la finestra della console.)


Sì, usando TERM=puttyo TERM=putty-256colorè il più saggio, anche se sfortunatamente al momento quest'ultimo non sembra funzionare bene per i colori 8-15 (che dovrebbero essere le versioni luminose di 0-7). È molto probabile che le altre "soluzioni" si sfaldino a volte a causa del loro flagrante disprezzo per le differenze tra i terminali coinvolti.
SamB,

yum install ncurses-termordinato per me su CentOS 7 con stucco al prossimo accesso, grazie.
Wandering Zombie

1
l'impostazione del tipo di terminale su puttyfunziona ma interrompe il supporto del mouse simile a xterm (ad esempio per Midnight Commander)
Anton

l'installazione di 'ncurses-term' ha funzionato per me sui test Debian.
Hochl,

nessuno di questi funziona per me, sono su Putty che si collega a Centos e non riesco a eseguire yum install ncurses-term perché non sono root.
Herman Toothrot,

20

Se si desidera verificare quale codice viene inviato da PuTTY al proprio terminale quando si preme un tasto o una combinazione di tasti, è sufficiente emettere un Ctrl+Ve quindi premere il tasto desiderato.

Ad esempio sulla mia scatola, premendo il tasto Home genererà la seguente stringa sul mio terminale:

^[[1~

Ciò significa che PuTTY invia il carattere di escape ^ [ seguito dalla stringa [1 ~ .

Puoi creare un ~/.inputrcfile nella tua $HOMEcartella, o in alternativa un /etc/inputrcfile a seconda del tuo sistema. Quindi riempire questo file con i codici PuTTY e le azioni Bash corrispondenti che si desidera vengano attivate da Bash.

Nota: sostituire ogni ^ [ carattere con la stringa \ e equivalente

Nel mio esempio, aggiungerò una riga con il mio codice chiave Home e l'azione di inizio riga (che per impostazione predefinita è associata a Ctrl+ABash):

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

Cordiali saluti, il mio file inputrc ha il seguente contenuto:

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

Da @Cimbali: comandi più associabili (come la cronologia precedente: sposta "su" nell'elenco cronologico) disponibili in questa pagina di riferimento .


SÌ ! Finalmente ! La stringa di tipo terminale di Putty non ha fatto nulla per la parola indietro e la parola diretta. Questo è fantastico!
Cimbali,

1
Questa è l'unica soluzione accettabile perché TERM=linuxo TERM=puttyinterrompe il supporto del mouse simile a xterm. Grazie!
Anton,

14

Crtl + A ti porta all'inizio della linea

Ecco un elenco di scorciatoie da tastiera di Bash


13
È fantastico e tutto, ma Home / End sono cablati nel mio cervello e dal momento che gestisco il server solo una volta su una luna blu, le possibilità di disimparare il cablaggio sono scarse.
Roman,

9

Quello che sta effettivamente inviando è ^[[1~quale è una sequenza di escape terminale composta da:

  • ^ [- fuga
  • [- parentesi quadra sinistra
  • 1 uno
  • ~ - tilde

Puoi vederlo premendo Ctrl+ Vquindi Home.

Potresti essere in grado di risolvere il tuo problema modificando l'impostazione della tastiera PuTTY per i tasti Home e Fine su rxvt (che rende la sequenza di escape ^[[Ho modificando il $ TERM che stai utilizzando (o modificando ~/.inputrc).

A proposito, non c'è relazione tra la tilde che si ottiene quando si preme Homee la tilde che rappresenta la directory home. Ad esempio, nella mia installazione Page-Downproduce ^[[6~che stamperebbe anche una tilde se non fosse interpretata correttamente.


Grazie! rxvt risolto il tasto Home; il tasto Fine ora produce un ding. PgUp / Down digitano effettivamente ~e nessuna delle impostazioni della tastiera PuTTY li fa funzionare. Il mio bash è incasinato o è "normale"?
Roman,

Cosa ottieni quando digiti echo $TERM?
Dennis Williamson,

xterm(Limite di 15 caratteri argh)
RomanSt

3
Puoi provare ad aggiungere "\eOw": end-of-line(che è una lettera maiuscola O) al tuo ~/.inputrcfile.
Dennis Williamson,

Chiave fine fissa; Ho avuto l'idea. Vorrei davvero che hack come questo non fossero necessari ...
RomanSt,

2

Nessuna di queste opzioni ha funzionato per me. Sto eseguendo un vecchio sistema AIX. Ho dovuto aggiungere i seguenti alias al mio .profile

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

non funziona per me, peccato
Herman Toothrot,

1

Non riuscivo a farlo funzionare con altri metodi. Ho comunque creato questo script AutoHotkey che funziona, purché la tua shell sia 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

Usare con cautela , tuttavia, poiché non tutti questi tasti di scelta rapida bash funzionano in altri programmi.


Ciò rovinerebbe il motivo principale per cui sto guardando questo: screenche con le impostazioni predefinite rompe Ctrl-A perché lo usa come personaggio di escape ....
Gert van den Berg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.