Làm cách nào để sử dụng bindkey để chạy tập lệnh?


9

Trong trình bao Z, làm cách nào tôi có thể sử dụng bindkey để liên kết một chuỗi khóa với tập lệnh?

Câu trả lời:


5

Bạn có thể xác định một widget gọi tập lệnh của bạn:

my-script_widget() my-script its args
zle -N my-script_widget
bindkey '\ej' my-script_widget

Nhưng tại sao bạn muốn gọi kịch bản của bạn trực tiếp từ zle?

Nếu nó hiển thị bất cứ điều gì, nó sẽ làm rối màn hình. Nếu bạn muốn đầu ra của nó được hiển thị như các thông báo widget khác, bạn có thể làm:

my-script_widget() zle -M "$(my-script its args)"

Hoặc nếu bạn muốn đầu ra được chèn vào con trỏ:

my-script_widget() LBUFFER+=$(my-script its args)

12

Tôi nghĩ rằng bạn không cần widget cho điều đó:

bindkey -s '\eb' '/path/to/script.sh\n' 

Từ tài liệu zsh :

Cũng như các lệnh ZLE, các chuỗi khóa có thể được liên kết với các chuỗi khác, bằng cách sử dụng 'bindkey -s'.


1
Điều đó không liên kết Alt-Bvới tập lệnh, điều đó gây ra /path/to/script.sh\nđược chèn vào như thể được gõ. Chẳng hạn, nếu bạn gõ Alt-Bsau khi đã nhập echo , nó sẽ chỉ chạy echo /path/to/script.shlệnh và đưa bạn trở lại một dấu nhắc trống (với những echo gì bạn đã nhập trước đó).
Stéphane Chazelas

Vâng, bạn đúng. Nhưng vẫn chèn như thể gõ là đủ trong một số trường hợp sử dụng.
nhạy cảm vào

3
Thêm một mục nhập ở cuối chuỗi và tập lệnh sẽ được thực thi sau khi được chèn,bindkey -s '\eb' '/path/to/script.sh^M'
mihai

@mihai Cảm ơn bình luận của bạn. Nó hoạt động hoàn hảo.
jdhao
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.