Bash CTRL để di chuyển con trỏ giữa các từ / chuỗi


84

Tôi quen sử dụng CTRLphím để di chuyển nhanh hơn khi sử dụng các phím mũi tên trái và phải (đi đến cuối một từ, thay vì một ký tự tại một thời điểm).

Tôi có thể làm điều đó trong bash bằng cách nào đó?

Tôi có thể mã nó, nhưng tôi đã tự hỏi liệu có cái gì đó dễ dàng hơn / đã được thực hiện.

Câu trả lời:


93

Với các ràng buộc khóa dòng đọc mặc định, ALT+ Blùi lại một từ, ALT+ Fchuyển tiếp một từ.

Thiết lập Ubuntu mặc định cũng cung cấp thêm CTRL+ mũi tên như bạn đã quen. Chúng được nêu trong /etc/inputrcvà được chỉ định như sau:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

Không chắc tại sao chúng ta cần ba trong số chúng ...


20
@bryan_ruiz: Các bàn phím khác nhau (trình giả lập thiết bị đầu cuối, v.v.) xuất ra các chuỗi khác nhau. Để xem trình tự, hãy nhấn Ctrl-v rồi nhấn phím. Đối với tôi trong PuTTY, Ctrl-v Ctrl-RightArrow cho tôi ^[OCcái giống như của bạn. Trong xtermtôi nhận được ^[[1;5đó là giống như Thomas'.
Tạm dừng cho đến khi có thông báo mới.

7
nó sẽ là tốt hơn để làm như vậy bằng cách chỉnh sửa ~/.inputrcthay vì
svassr

1
Tôi không thể tin rằng tôi đã sống bao lâu mà không có thứ này.
Ryan Shillington

3
Việc chỉnh sửa ~ / .inputrc có thể ngừng tải 'hệ thống' (/ etc / inputrc). Cũng lưu ý, cài đặt 'set -o' - "set -o emacs" sẽ cung cấp cho bạn các ràng buộc phím kiểu emacs trên dòng lệnh, trái ngược với ví dụ: "set -o vi" (sau khi thực hiện việc này, bạn sẽ cần nhấn ESC trước khi cố gắng sử dụng w hoặc b).
David Goodwin

4
@DavidGoodwin Sau một hồi tìm kiếm, việc thêm $include /etc/inputrccũng sẽ tải tệp inputrc của hệ thống.
SirGuy

42

Như Thomas đã giải thích, bạn có thể thêm các ràng buộc vào /etc/inputrc.

Một giải pháp thay thế khác để nó tải mỗi khi bạn đăng nhập, là đưa chúng vào ~/.bashrc như thế này:

#use ctl keys to move forward and back in words
bind '"\eOC":forward-word'
bind '"\eOD":backward-word'

Tôi biết được rằng bạn có thể sử dụng cat > /dev/null để xem các ký tự mà bàn phím của bạn đang gửi, ví dụ: CTRL + mũi tên phải hiển thị:

^[OC

nơi ^[giống như \e vậy đó là nơi mã đến từ bindlệnh.

Bạn cũng có thể tra cứu các ràng buộc như sau:

bind -p | grep forward-word

Tất cả những điều này khá tuyệt vời và tôi rất vui vì tôi đã tìm ra thêm một số sức mạnh của bash.


6
Tôi nghĩ rằng điều này sẽ chỉ ảnh hưởng đến bash, trong khi inputrcgiải pháp cũng sẽ áp dụng cho các chương trình khác sử dụng dòng đọc, ví dụ như trình thông dịch Python, hầu hết các trình bao khác. Lưu ý rằng bạn cũng có thể đưa các lệnh vào ~/.inputrcnếu bạn không có root hoặc không muốn chúng áp dụng cho tất cả người dùng.
Thomas

Vì bất cứ lý do gì, điều này chỉ hiệu quả với tôi khi tôi đổi thứ tự các dòng của bạn ở trên. Lưu ý thêm. Tôi đang sử dụng Ubuntu 14.04LTS sau putty từ Windows 8.1.
Rebecca Dessonville

2
+1 đặc biệt cho I learned that you can use cat > /dev/null to look at the characters that your keyboard is sending. #TIL
Sungam

3
Bạn cũng có thể chỉ cần gõ readvà nhấn enter để đạt được hiệu ứng tương tự như cat > /dev/null. Tôi lười biếng nên tôi thích các giải pháp với ít đánh máy hơn. :)
theglossy1

ctrl + 4 bị treo mèo của tôi (nó sẽ gửi ^ /)
user1040495

4

Một .inputrc trong thư mục chính của bạn sẽ khiến ctrl + left ngừng hoạt động trên Ubuntu (ví dụ:).

Để mọi thứ hoạt động, hãy thêm phần sau vào ~ / .inputrc:

# Include system-wide inputrc, which is ignored by default when
# a user has their own .inputrc file.
$include /etc/inputrc

tín dụng cho f.kowal

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.