Bagaimana cara mengkonfigurasi Putty sehingga Home / End / PgUp / PgDn berfungsi dengan baik di bash?

123

Tombol Home, End, PageUp, PageDown semua ketik a ~di sesi bash saya alih-alih memindahkan kursor / melihat sekitar. Mengapa ini terjadi dan pengaturan mana yang harus saya ubah?

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

Pertanyaan awalnya berbunyi:

Di Putty, mengapa menekan tombol "Home" pada shell (bash) mengetikkan "~"? Atau lebih tepatnya, bagaimana cara membuatnya memindahkan kursor ke awal perintah yang saya ketikkan?

(Saya pikir alasannya adalah ~ adalah direktori home , tetapi jawabannya mengatakan ini tidak benar.)

RomanSt
sumber

Jawaban:

150

Ubah String tipe Terminal di bawah Sambungan> Data tab dari "xterm" default ke "linux". Itu berhasil untuk saya.

masukkan deskripsi gambar di sini

Der Hochstapler
sumber
2
Terima kasih! Saya memiliki masalah ini setelah saya mencoba untuk membuat Ctrl Kiri / Kanan berfungsi menggunakan metode ini ( superuser.com/a/103097/45410 ).
Edwin Yip
4
Penekanan: bukan Terminal -> Keyboard"Tombol fungsi dan tombol".
Elazar
2
Ini berfungsi tetapi menciptakan masalah lain seperti menonaktifkan dukungan mouse. jadi, itu bukan solusi yang bisa diterima bagi saya
Anton
Solusi ini juga memungkinkan umlaut di dalam dempul saat terhubung ke OS X!
lorem monyet
42

Ini terjadi karena Anda tidak menetapkan jenis terminal Putty dengan benar, atau karena server Anda tidak memiliki definisi terminfo yang benar diinstal.

Pada sistem berbasis Debian, paket ncurses-term (versi 5.7 + 20081213-1) termasuk file definisi terminfo untuk jenis terminal dempul , dempul-256color dan dempul-vt100 . Jika Anda telah menginstal paket ini, Anda dapat mengatur "tipe terminal" menjadi "dempul" daripada "xterm" default dalam konfigurasi sesi Putty (Sambungan -> Data).

Stephen Irons juga menyebutkan "linux" sebagai jenis terminal lain yang berfungsi; Saya percaya ini benar dari pengalaman sebelumnya, tetapi belum mengujinya baru-baru ini.

Pada sistem saya, ini memungkinkan Home and End untuk bekerja dengan benar, meskipun PageUp / PageDown tidak menggulir jendela konsol. (Mereka berfungsi dengan baik di aplikasi ncurses seperti aptitude , dan Shift-PgUp / Shift-PgDn gulir jendela konsol.)

quack quixote
sumber
Ya, menggunakan TERM=puttyatau TERM=putty-256colorpaling bijaksana, meskipun sayangnya saat ini yang terakhir tampaknya tidak berfungsi dengan baik untuk warna 8-15 (yang seharusnya merupakan versi cerah dari 0-7). "Solusi" lain yang kemungkinan besar akan terkelupas terkadang membuat mereka mengabaikan perbedaan antara terminal yang terlibat.
SamB
yum install ncurses-termdiurutkan untuk saya di CentOS 7 dengan dempul pada login berikutnya, terima kasih.
Mengembara Zombie
1
mengatur jenis terminal agar puttyberfungsi tetapi memecah dukungan mouse seperti xterm (mis. untuk Midnight Commander)
Anton
menginstal 'ncurses-term' bekerja untuk saya pada pengujian Debian.
hochl
tidak ada yang berfungsi untuk saya, saya terhubung dengan dempul ke centos, dan tidak dapat menjalankan yum instal ncurses-term karena saya bukan root.
Herman Toothrot
20

Jika Anda ingin memverifikasi kode mana yang dikirim oleh Putty ke terminal Anda ketika Anda menekan tombol atau kombinasi tombol, Anda hanya perlu mengeluarkan Ctrl+Vdan kemudian tekan pada tombol yang diinginkan.

Misalnya pada kotak saya, menekan tombol Home akan menghasilkan string berikut di terminal saya:

^[[1~

Itu berarti PuTTY mengirimkan karakter escape ^ [ diikuti oleh string [1 ~ .

Anda dapat membuat ~/.inputrcfile di $HOMEfolder Anda , atau sebagai alternatif /etc/inputrcfile tergantung pada sistem Anda. Kemudian isi file ini dengan kode Putty dan tindakan Bash yang cocok yang ingin Anda picu oleh Bash.

Catatan: Ganti setiap karakter ^ [ dengan string ekivalen \ e

Dalam contoh saya, saya akan menambahkan baris dengan kode kunci Beranda dan tindakan awal-baris (yang secara default terikat Ctrl+Adi Bash):

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

FYI, file inputrc saya memiliki konten berikut:

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

Dari @Cimbali: Perintah yang lebih mengikat (seperti riwayat sebelumnya: Gerakkan `naik 'melalui daftar riwayat) yang tersedia di halaman referensi ini .

Damien Garrido
sumber
IYA ! Akhirnya! String tipe terminal Putty tidak melakukan apa pun untuk kata mundur dan maju. Ini bagus!
Cimbali
1
Ini adalah satu-satunya solusi yang dapat diterima karena TERM=linuxatau TERM=puttymerusak dukungan mouse seperti xterm. Terima kasih!
Anton
14

Crtl + A membawa Anda ke awal baris

Berikut daftar pintasan keyboard Bash

Iain
sumber
13
Itu hebat dan semuanya, tetapi Home / End terprogram di otak saya, dan karena saya hanya mengelola server sekali dalam bulan biru, peluang untuk melepaskan kabel yang tipis itu tipis.
RomanSt
9

Apa yang sebenarnya dikirim adalah ^[[1~yang merupakan urutan pelarian terminal yang terdiri dari:

  • ^ [- melarikan diri
  • [- braket persegi kiri
  • 1 satu
  • ~ - tilde

Anda dapat melihatnya dengan menekan Ctrl+ Vlalu Home.

Anda mungkin dapat memperbaiki masalah Anda dengan mengubah pengaturan keyboard Putty untuk tombol Home dan End ke rxvt (yang membuat urutan escape ^[[Hatau dengan mengubah $ TERM yang Anda gunakan (atau dengan mengedit ~/.inputrc).

Ngomong-ngomong, tidak ada hubungan antara tilde yang Anda dapatkan ketika Anda menekan Homedan tilde yang mewakili direktori home. Misalnya, dalam setup saya Page-Downmenghasilkan ^[[6~yang juga akan mencetak tilde jika tidak sedang benar ditafsirkan.

Dennis Williamson
sumber
Terima kasih! rxvt memperbaiki kunci Beranda; tombol Putus sekarang menghasilkan ding. PgUp / Down memang mengetik ~, dan tidak ada pengaturan Keyboard Putty membuat mereka berfungsi. Apakah bash saya kacau, atau ini "normal"?
RomanSt
Apa yang Anda dapatkan saat mengetik echo $TERM?
Dennis Williamson
xterm(Batas karakter 15 argh)
RomanSt
3
Anda dapat mencoba menambahkan "\eOw": end-of-line(itu huruf kapital O) ke ~/.inputrcfile Anda .
Dennis Williamson
Kunci putus diperbaiki; Saya mendapat ide. Sangat berharap peretasan seperti ini tidak diperlukan ...
RomanSt
2

Tidak ada opsi ini yang berfungsi untuk saya. Saya menjalankan sistem AIX lama. Saya harus menambahkan alias berikut ke profil saya

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
Truk
sumber
tidak bekerja untuk saya, payah
Herman Toothrot
1

Saya tidak bisa membuatnya bekerja dengan metode lain. Namun saya membuat skrip AutoHotkey ini yang berfungsi, asalkan shell Anda adalah 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

Gunakan dengan hati-hati , karena tidak semua hotkey bash ini bekerja di program lain.

Ciantic
sumber
Ini akan mengacaukan dengan alasan utama saya melihat ini:, screenyang dengan pengaturan default memecah Ctrl-A karena menggunakannya sebagai karakter pelarian ....
Gert van den Berg