Tại sao Ctrl-Arrow không hoạt động trong bash trên OS X?


14

Tôi sử dụng Ctrl- Ctrl- trên mọi hệ thống Linux mà tôi làm việc, nhưng các tổ hợp phím này không hoạt động trong bash trên Macbook Pro của tôi. Nó đang chạy Snow Leopard và tôi đang sử dụng ứng dụng Terminal tích hợp.

Các tổ hợp phím dường như không bị bắt bởi bất kỳ thứ gì trước hoặc bởi Terminal, bởi vì nếu tôi ssh đến một trong các máy chủ Linux của mình, tôi có thể sử dụng Ctrl- / để chuyển sang từ tiếp theo / trước trên dòng lệnh. Tuy nhiên, khi tôi thử kết hợp phím này trong bash trên Macbook của mình, tôi chỉ nhận được "C" cho mũi tên phải và "D" cho mũi tên trái.

Bất cứ ý tưởng nào về cách tôi có thể làm cho các phím này hoạt động trong bash darwin?


2
Nếu bạn đang sử dụng Spaces, Ctrl + mũi tên theo mặc định sẽ chuyển khoảng trắng.
mark4o

Câu trả lời:


13

OS X sử dụng khóa emacs ràng buộc mặc định của tôi. Điều này đúng là hầu như mọi ứng dụng trên OS X, nó khá hay. Nó có nghĩa là những thứ như Ca và Ce là bắt đầu / kết thúc của dòng. Bạn cũng nhận được back-word-kill tiện lợi với M-backspace, oh và kill-line với Ck.

Điều này có nghĩa là trong từ tiến / lùi của thiết bị đầu cuối của bạn bị ràng buộc với Mf và Mb, tương ứng (M = Meta = alt / tùy chọn), tuy nhiên đó không phải là trường hợp. Trên OS X chuyển tiếp / backword-word được ràng buộc với M- → và M- ← theo mặc định.

Bạn có thể thay đổi hành vi này bằng cách thay đổi cách Thư viện GNU Readline được cấu hình cho tài khoản của bạn. Điều này diễn ra trong ~/.inputrctập tin của bạn . Bạn có thể nhận được một danh sách lớn các lệnh có thể man readlineràng buộc cũng như trong tài liệu trực tuyến như thế này tại đây. .

Vì vậy, để trả lời câu hỏi của bạn, bạn muốn ánh xạ lại những gì Readline làm khi thấy C- → và C- ← để làm những gì nó làm trên máy chủ linux của bạn.

Cú pháp cho một ~/.inputrctệp khá đơn giản cho những gì bạn muốn làm : key-sequence: action.

Đây phải là những gì bạn cần để có được hành vi mong muốn:

"\e[5C": forward-word
"\e[5D": backward-word

Đây là một trang khác với các ràng buộc hữu ích bổ sung.

(Bạn có thể thoát khỏi việc sao chép / etc / inputrc từ hộp linux sang OS X ~ / .inputrc)


Một lưu ý: Nếu bạn đang sử dụng tmux với các phím xterm rất nhiều, bạn cũng sẽ cần \e[1;5C\e[1;5Dcũng kích hoạt forward-wordbackward-word.
Arne

2
Một lưu ý khác: Nếu vẫn không hoạt động, có thể là do xung đột phím tắt với Điều khiển nhiệm vụ / Không gian. Tùy chọn hệ thống -> Bàn phím -> Phím tắt -> Điều khiển nhiệm vụ, Di chuyển sang trái / phải một khoảng
trắng

Tôi không hiểu "OS X sử dụng ràng buộc khóa emacs theo mặc định." "Ctrl-mũi tên" cũng là một ràng buộc phím emacs.
Greg

3

đặt trong ~/.inputrccác dòng sau:

"\e[5C": forward-word
"\e[5D": backward-word

0

Ngày nay, dường như các chuỗi thoát mà đầu ra Ctrl-Mũi tên trong thiết bị đầu cuối đã thay đổi. Dưới đây là những gì làm việc cho tôi tính đến hôm nay (cuối năm 2018):

"\e[1;5C": forward-word "\e[1;5D": backward-word

Lưu ý: bạn luôn có thể tìm ra các chuỗi thoát thực tế bằng cách nhập cat -vvào Terminal và nhấn Ctrl-Mũi tên trái hoặc Ctrl-Mũi tên phải. Đây là một đầu ra mẫu cho Ctrl-Left Arrow của riêng tôi:

^[[1;5C ^[[1;5C

Để dịch thành .inputrcbiệt ngữ, thay thế dấu hiệu thoát ^[bằng \evà dán kết quả bên trong dấu ngoặc kép.


0

Như @ bhh1988 đã đề cập, cấu hình Điều khiển nhiệm vụ ngăn các phím Ctrl hoạt động với các phím mũi tên trong bash. Tôi không muốn can thiệp vào các phím tắt đó, vì vậy tôi sử dụng phím Tùy chọn (tức là Alt) để thay thế. Hiện tại trên Mojave bằng bàn phím tiếng Đức (không biết có liên quan không) Tôi đặt phần sau vào .inputrcđể sử dụng tùy chọn mũi tên trái và mũi tên phải để di chuyển giữa các từ.

"\e\e[C": forward-word
"\e\e[D": backward-word
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.