Làm cách nào để định cấu hình PuTTY để Home / End / PGUp / PGDn hoạt động chính xác trong bash?


123

Các phím Home, End, PageUp, PageDown đều gõ a ~trong phiên bash của tôi thay vì di chuyển con trỏ / chế độ xem xung quanh. Tại sao điều này xảy ra và tôi cần thay đổi cài đặt nào?

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

Câu hỏi ban đầu được đọc:

Trong PuTTY, tại sao nhấn phím "Home" trên vỏ (bash) gõ "~"? Hay đúng hơn, làm thế nào để tôi làm cho nó di chuyển con trỏ đến đầu lệnh tôi đã gõ?

(Tôi nghĩ lý do là ~ là nhà thư mục, nhưng câu trả lời nói đây không phải là như vậy.)

Câu trả lời:


150

Thay đổi Chuỗi loại thiết bị đầu cuối trong tab Kết nối> Dữ liệu từ mặc định của xterm chế độ ăn mặc thành thành linux linux. Nó làm việc cho tôi.

nhập mô tả hình ảnh ở đây


2
Cảm ơn! Tôi đã gặp vấn đề này sau khi tôi cố gắng làm cho Ctrl Trái / Phải hoạt động bằng phương pháp này ( superuser.com/a/103097/45410 ).
Edwin Yip

4
Nhấn mạnh: không phải Terminal -> Keyboard"Các phím chức năng và bàn phím".
Elazar

2
Nó hoạt động nhưng tạo ra các vấn đề khác như vô hiệu hóa hỗ trợ chuột. vì vậy, đó không phải là giải pháp chấp nhận được đối với tôi
Anton

Giải pháp này cũng cho phép các ô bên trong putty khi kết nối với OS X!
khỉ lorem

42

Điều này xảy ra bởi vì bạn không đặt đúng loại thiết bị đầu cuối của PuTTY hoặc do máy chủ của bạn không cài đặt định nghĩa terminfo chính xác.

Trên các hệ thống dựa trên Debian, gói thuật ngữ ncurses (phiên bản 5.7 + 20081213-1) bao gồm các tệp định nghĩa terminfo cho các loại thiết bị đầu cuối putty , putty-256colorputty-vt100 . Nếu bạn đã cài đặt gói này, bạn có thể đặt "Chuỗi loại thiết bị đầu cuối" thành "putty" thay vì "xterm" mặc định trong cấu hình phiên của Putty (Kết nối -> Dữ liệu).

Stephen Irons cũng đề cập đến "linux" là một loại thiết bị đầu cuối hoạt động; Tôi tin rằng điều này là chính xác từ kinh nghiệm trước đó, nhưng gần đây đã không thử nghiệm nó.

Trên các hệ thống của tôi, điều này cho phép Home và End hoạt động chính xác, mặc dù PageUp / PageDown không cuộn cửa sổ giao diện điều khiển. (Chúng hoạt động chính xác trong các ứng dụng như tài năng và Shift-PGUp / Shift-PGDn cuộn cửa sổ giao diện điều khiển.)


Có, sử dụng TERM=puttyhoặc TERM=putty-256colorlà khôn ngoan nhất, mặc dù không may tại thời điểm này, cái sau dường như không hoạt động đúng với màu 8-15 (được cho là phiên bản sáng của 0-7). Các "giải pháp" khác rất có thể sẽ bị loại bỏ đôi khi làm cho sự coi thường của họ về sự khác biệt giữa các thiết bị đầu cuối liên quan.
SamB

yum install ncurses-termđã sắp xếp nó cho tôi trên CentOS 7 với putty trong lần đăng nhập tiếp theo, cảm ơn bạn.
Zombie lang thang

1
cài đặt loại thiết bị đầu cuối để puttyhoạt động nhưng phá vỡ hỗ trợ chuột giống xterm (ví dụ: Midnight Commander)
Anton

cài đặt 'ncurses-term' đã giúp tôi kiểm tra Debian.
hochl

Không ai trong số này làm việc cho tôi, tôi đang kết nối với centos và không thể chạy yum install ncurses-term vì tôi không root.
Herman Toothrot

20

Nếu bạn muốn xác minh mã nào được PuTTY gửi đến thiết bị đầu cuối của bạn khi bạn nhấn một phím hoặc tổ hợp các phím, bạn chỉ cần đưa ra một mã Ctrl+Vvà sau đó nhấn vào phím mong muốn.

Ví dụ trên hộp của tôi, nhấn phím Home sẽ tạo chuỗi sau trên thiết bị đầu cuối của tôi:

^[[1~

Điều đó có nghĩa là PuTTY gửi ký tự thoát ^ [ theo sau là chuỗi [1 ~ .

Bạn có thể tạo một ~/.inputrctệp trong $HOMEthư mục của mình hoặc thay vào đó là một /etc/inputrctệp tùy theo hệ thống của bạn. Sau đó điền vào tệp này bằng mã PuTTY và các hành động Bash phù hợp mà bạn muốn được Bash kích hoạt.

Lưu ý: Thay thế mọi ^ [ ký tự bằng chuỗi \ e tương đương

Trong ví dụ của tôi, tôi sẽ thêm một dòng bằng mã khóa Home của mình và hành động bắt đầu của dòng (theo mặc định được ràng buộc Ctrl+Atrong Bash):

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

FYI, tệp inputrc của tôi có nội dung như sau:

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

Từ @Cimbali: Nhiều lệnh có thể ràng buộc hơn (như lịch sử trước đó: Di chuyển 'lên' qua danh sách lịch sử) có sẵn trên trang tham chiếu này .


ĐÚNG ! Cuối cùng! Chuỗi loại thiết bị đầu cuối của Putty đã không làm bất cứ điều gì cho từ ngược và từ chuyển tiếp. Điều đó thật tuyệt !
Cimbali

1
Đây là giải pháp duy nhất được chấp nhận vì TERM=linuxhoặc TERM=puttyphá vỡ hỗ trợ chuột giống xterm. Cảm ơn!
Anton

14

Crtl + A đưa bạn đến đầu dòng

Dưới đây là danh sách các phím tắt Bash


13
Điều đó thật tuyệt vời, nhưng Home / End có dây cứng trong não tôi và vì tôi chỉ quản trị máy chủ một lần trong một mặt trăng xanh nên cơ hội không học được hệ thống dây cứng là rất mong manh.
RomanSt

9

Những gì nó thực sự gửi ^[[1~là một chuỗi thoát thiết bị đầu cuối bao gồm:

  • ^ [- thoát
  • [- khung vuông bên trái
  • 1 một
  • ~ - dấu ngã

Bạn có thể thấy điều đó bằng cách nhấn Ctrl+ Vsau đó Home.

Bạn có thể khắc phục sự cố của mình bằng cách thay đổi cài đặt bàn phím PuTTY cho phím Home và End thành rxvt (tạo chuỗi thoát ^[[Hhoặc bằng cách thay đổi $ TERM bạn đang sử dụng (hoặc bằng cách chỉnh sửa ~/.inputrc).

Nhân tiện, không có mối quan hệ nào giữa dấu ngã bạn nhận được khi nhấn Homevà dấu ngã đại diện cho thư mục chính. Ví dụ: trong thiết lập của tôi, Page-Downsản phẩm ^[[6~cũng sẽ in dấu ngã nếu nó không được giải thích chính xác.


Cảm ơn! rxvt đã sửa phím Home; Phím End bây giờ tạo ra một ding. PGUp / Down thực sự gõ ~và không có cài đặt Bàn phím PuTTY nào làm cho chúng hoạt động. Là bash của tôi bị rối, hoặc là "bình thường"?
RomanSt

Bạn nhận được gì khi bạn gõ echo $TERM?
Dennis Williamson

xterm(Giới hạn 15 ký tự argh)
RomanSt

3
Bạn có thể thử thêm "\eOw": end-of-line(đó là chữ in hoa O) vào ~/.inputrctệp của mình .
Dennis Williamson

Khóa cuối cố định; Tôi có được ý tưởng. Thực sự mong muốn hack như thế này là không cần thiết mặc dù ...
RomanSt

2

Không phải những lựa chọn này làm việc cho tôi. Tôi đang chạy một hệ thống AIX cũ. Tôi đã phải thêm các bí danh sau vào .profile của mình

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

không làm việc cho tôi, bummer
Herman Toothrot

1

Tôi không thể làm cho nó hoạt động với các phương pháp khác. Tuy nhiên tôi đã tạo tập lệnh AutoHotkey này hoạt động, miễn là trình bao của bạn là 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

Mặc dù vậy, hãy thận trọng vì không phải tất cả các phím nóng bash này đều hoạt động trong các chương trình khác.


Điều này sẽ gây rắc rối với lý do chính khiến tôi nhìn vào điều này screen:, với cài đặt mặc định sẽ phá vỡ Ctrl-A vì nó sử dụng nó làm ký tự thoát ....
Gert van den Berg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.