Tìm kiếm giải pháp ALT + LeftArrowKey trong zsh


127

Gần đây tôi đã chuyển từ bash sang zsh, tuy nhiên tôi nhớ Alt+ LeftArrowKeyAlt+ của RightArrowKeymình để quay lại một từ.

Ngay bây giờ, nếu tôi nhấn Alt+ LeftArrowKeyTôi quay lại một vài chữ cái và sau đó tôi bị kẹt. Tôi sẽ không đi lùi nữa và nó sẽ không quay lại đến cuối dòng với Alt+ RightArrowKeynhư tôi mong đợi. Tôi thậm chí không thể sử dụng các phím mũi tên để đi đến cuối dòng, chỉ đến giây để kéo dài. Không thể nhập ký tự mới trên dòng hoặc thực sự xóa.

Làm thế nào để tôi có được lối tắt yêu quý của tôi trở lại?

Tôi đang dùng Mac OS X bằng Terminal nếu điều đó quan trọng.

Câu trả lời:


240

Chạy catsau đó nhấn phím để xem mã mà phím tắt của bạn gửi.
(Nhấn Ctrl+ Cđể giết catkhi bạn hoàn thành.)
Đối với tôi, (ubfox, konsole, xterm) nhấn Alt+ gửi ^[[1;3D, vì vậy tôi sẽ đưa vào .zshrc của mình

bindkey "^[[1;3C" forward-word
bindkey "^[[1;3D" backward-word

(Trên thực tế tôi thích sử dụng Ctrl+ mũi tên để di chuyển từng từ, như trong một hộp văn bản bình thường dưới cửa sổ hoặc linux gui.)

Câu hỏi liên quan: Khắc phục cài đặt phím (Trang chủ / Kết thúc / Chèn / Xóa) trong .zshrc khi chạy Zsh trong Trình mô phỏng thiết bị đầu cuối Terminator


14
Bạn là vị cứu tinh của tôi! Trên máy Mac của tôi "Alt + <-" đã cho "^ [b" và -> đã cho "^ [f", vì vậy tôi đã thêm những thứ này. Hoạt động như một lá bùa. Mũi tên Ctrl + được dành riêng để chuyển đổi giữa các máy tính để bàn trên Mac.
Mads Ohm Larsen

Một lưu ý là đối với ctrl + <- cat đã báo cáo ^[[Dcho tôi trong khi ctrl + v đang báo cáo ^[OD. Đề xuất của Ctrl + v đã hoạt động, nhưng mèo thì không. Hơn nữa, ctrl + v đã báo cáo điều tương tự cho cả alt + <- và alt + ->. Tôi đã có thể thêm hai cái này bằng cách xem sản lượng của mèo và thay thế bất kỳ "[[" nào bằng "O"
Mike S

10
đầu ra của tôi dưới con mèo là ^[^[[Ccho từ chuyển tiếp và ^[^[[Dcho từ lùi, nhưng cập nhật cho những từ này trong .zshrc không hoạt động vì một số lý do.
Yunti

2
@Yunti - Đưa bindkey "^[^[[D" backward-wordbindkey "^[^[[C" forward-wordvào ~ / .zprofile làm việc cho tôi!
Fernando Espinosa

Đàn ông! Cứu cuộc đời tôi! cám ơn vì đã chia sẻ!
Joao Henrique

185

Đối với bất cứ ai sử dụng iTerm, bất kể shell

Theo tôi, tất cả các giải pháp được đưa ra đều có cách tiếp cận ngược. Về cơ bản, bạn đang bảo trình vỏ của mình lắng nghe một số chuỗi thoát hoặc ràng buộc khóa khác mà bạn đã đặt trong thiết bị đầu cuối của mình, tạo ra các vấn đề tương thích khi bạn chuyển đổi trình bao (Nếu bạn SSH sang một số trình bao khác, hãy chuyển từ BASH sang ZSH, v.v. một số nếu không phải tất cả các keybindings của bạn).

Hầu hết các shell có một tập hợp các chuỗi mặc định đi kèm trước. Hơn nữa, trong khi chúng không nhất quán 100%, chúng đủ gần. Vì vậy, cách dễ nhất mà tôi đã tìm thấy để tạo ra keybinding cho một hành động cụ thể trong shell là yêu cầu ứng dụng đầu cuối của bạn liên kết với các keybind mặc định phù hợp trên các shell.

Tôi đã viết một giải pháp nén để giúp thiết bị đầu cuối của bạn phản hồi gần với các tổ hợp phím gốc ở đây

Mở tùy chọn iTerm + ,và điều hướng đến Profilestab ( Keyscó thể sử dụng tab, nhưng việc thêm keybinding vào hồ sơ của bạn cho phép bạn lưu hồ sơ của mình và đồng bộ hóa nó với nhiều máy tính) và keystab phụ và nhập thông tin sau:

Di chuyển con trỏ một từ trái

+ Gửi mã Hex:0x1b 0x62

Di chuyển con trỏ một từ phải

+ Gửi mã Hex:0x1b 0x66

Và điều đó sẽ cung cấp cho bạn hành vi mong muốn không chỉ trong ZSH, mà cả khi bạn SSH vào máy chủ đang chạy BASH, irb / pry, nút, v.v.


1
Tôi đã gặp rắc rối với giải pháp được chấp nhận vì tôi có zsh hoạt động tốt nhưng không phải irb và các bảng điều khiển khác. Xóa các cài đặt trước đó (trong hồ sơ iTerm như được đề xuất) hoạt động như một cơ duyên!
llekn

1
giải pháp bindkey sẽ tạo ra âm thanh lỗi khó chịu trên Mac. Đây phải là cách đúng đắn để làm điều đó.
Weishi Zeng

@Lev Có thể vì vỏ của bạn không được ánh xạ tới cấu hình mặc định. Chạy bindkey | grep forward-wordbạn sẽ thấy "^[f" forward-wordtrả lại nhưng nếu bạn không, bạn có 2 tùy chọn. ánh xạ tới một trong những cái khác được trả lại hoặc thêm "^[f" forward-wordvào của bạn .zshrc.
Travis

Tôi sẽ lưu ý, đó "^[f"dường như là ràng buộc được sử dụng nhất quán cho forward-wordcác shell, và là ràng buộc duy nhất được đặt mặc định trong phiên bản bash của tôi.
Travis

Bằng cách nào đó nó làm việc với nút lệnh cho tôi thay vì tùy chọn. Cảm ơn người đàn ông. :)
Vaibhav Jain

72

Thêm phần sau vào ~ / .zshrc làm việc cho tôi trên OSX Mountain Lion.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word

4
Giải pháp này kích hoạt "tiếng chuông" trong iTerm 2 với mỗi lần sử dụng, do đó việc nhảy giữa các từ có thể thực sự gây khó chịu.
Matthew Morek

1
bất cứ ai cũng biết làm thế nào để vô hiệu hóa điều này xảy ra ^ @MatthewMorek
Daniel Kobe

18
'\ e \ e' ngăn chuông. Cấu hình của tôi trên El Capitan với iTerm 2 ở chế độ tương thích Terminal là bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Johannes Gontrum

Cảm ơn bạn, điều này đã giải quyết vấn đề trên macOs Sierra. Tôi không nhận được bất kỳ âm thanh chuông nào trên Terminal hoặc iTerm2.
Raspo

Làm thế nào để bạn thiết lập nó để di chuyển từ cuối từ chứ không phải bắt đầu hoặc chúng?
Mafro34

22

Trên MacOS High Siera 10.13.6 hoặc Mojave 10.14.2 và sử dụng iTerm2 với ZSH Để chuyển từ các từ tôi phải đặt như thế này:

bindkey "\e\e[D" backward-word
bindkey "\e\e[C" forward-word

Một giải pháp khác không hoạt động cho rme


1
Đây là giải pháp duy nhất làm việc cho tôi là tốt. Cảm ơn bạn! Mac OS Mojave
jamescampbell

Hoạt động trên OS Catalina là tốt!
Sậy

7

Mặc dù không trả lời đúng câu hỏi của bạn, ràng buộc mặc định forward-wordbackward-wordđược tôn trọng alt-f. alt-b.

Điều này hoạt động ở mọi nơi, không yêu cầu bạn rời khỏi hàng nhà và có một tài sản ghi nhớ tốt đẹp (f = chuyển tiếp, b = trở lại), trong khi cũng phù hợp với ctrl-fctrl-bđược forward-characterbackward-character.

Xé các phím mũi tên của bạn!


4
không hoạt động với tôi trong zsh / iterm2, in và ∫ (cb cf hoạt động).
Davorin

2

Để làm cho nó hoạt động với tôi, tôi đã sử dụng câu trả lời này , tuy nhiên tôi đã phải trao đổi mã (trái <-> phải)

⌥ + ← Gửi mã Hex: 0x1b 0x66
+ → Gửi mã Hex: 0x1b 0x62

và thêm vào đây ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word

1

Trên Mavericks (10.9.4) mã là 1; 5 ... vì vậy để liên kết alt với mũi tên, tôi có .zshrc bằng cách sử dụng:

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word

Bạn có thể sử dụng CTRL + V và sau đó là lệnh bạn muốn sử dụng

ở Yosemite sử dụng giải pháp của Rob


1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie

0

Trong zsh, bạn có thể sử dụng bindkeylệnh để xem các phím tắt.

Sử dụng bindkeyđể khám phá các tùy chọn có sẵn mà không cần keybindings tùy chỉnh.

Cụ thể là ^[b để di chuyển ngược một từ và ^[fđể tiến về phía trước một từ.

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.