Làm cách nào tôi có thể liên kết nhiều lệnh tmux với một tổ hợp phím?


13

Cụ thể tôi đang cố gắng đưa ra thông báo sau khi một số lệnh được hoàn thành. Vì vậy, ví dụ, nếu tôi tải lại tệp cấu hình của mình, tôi muốn có một số xác nhận rằng nó hoạt động, có thể được thực hiện như thế này:

bind R source-file "$HOME/.tmux.conf" && display-message "Configuration reloaded."

Điều đó , tuy nhiên, không hoạt động. Tôi cũng không thử làm bất cứ điều gì khác như các cách xâu chuỗi các lệnh lại với nhau.


1
Nó hoạt động với tôi (tmux 1.3 trên Debian nén) với \;vai trò là dấu phân tách.
Gilles 'SO- ngừng trở nên xấu xa'

1
Được rồi, tôi thấy rằng \; không hoạt động, và đó là bản chất của câu trả lời tôi chọn dưới đây. Bằng cách nào đó tôi đã thử nghiệm \; quá nhanh và xác định nó không hoạt động. Nhưng tôi để câu hỏi này ở đây vì nó vẫn phục vụ để trả lời câu hỏi làm thế nào để làm điều này.
iconoclast

Câu trả lời:


12

Bạn có thể sử dụng run-shelltùy chọn , nhưng điều quan trọng là tách các lệnh với\;

Trong trường hợp này, một cái gì đó như:

bind R source-file ~/.tmux.conf \; run-shell "echo 'Reload'"

run-shell shell-lệnh
(bí danh: run)
Thực thi lệnh shell trong nền mà không tạo cửa sổ. Sau khi kết thúc, mọi đầu ra cho thiết bị xuất chuẩn sẽ được hiển thị trong chế độ sao chép. Nếu lệnh không trả về thành công, trạng thái thoát cũng được hiển thị.


Này, cảm ơn vì câu trả lời. Tôi đã không kiểm tra cụ thể nhưng tôi không nghĩ nó sẽ hoạt động, vì tôi đã kiểm tra mã trong câu hỏi của mình với \; và nó chỉ chạy lệnh thứ hai chứ không phải lệnh đầu tiên. Và tôi không biết tại sao run-shell sẽ hoạt động nhưng thông báo hiển thị sẽ không.
iconoclast

1
Được rồi, tôi đã thử kiểm tra giải pháp của bạn và tmux tiếp tục khóa, rõ ràng (mặc dù không chắc chắn tuyệt đối) từ lệnh đó. Tôi sẽ tiếp tục cố gắng, nhưng tôi khá chắc chắn rằng nó sẽ không hoạt động ...
iconoclast

Nó hoạt động trên tmux 1.4. Liệu "khóa" có nghĩa là "chế độ sao chép" - nghĩa là theo thiết kế ...
jasonwryan

được rồi, tôi đã làm cho nó hoạt động, mà không khóa tmux. Điều đó khiến tôi đặt câu hỏi là tại sao nỗ lực ban đầu của tôi sử dụng \; không hoạt động:
iconoclast

1
Trung tâm của câu trả lời của bạn là sử dụng \; - phần về run-shell không thực sự quan trọng và tôi nghĩ ví dụ tôi đã đưa ra thông báo hiển thị sẽ tốt hơn rất nhiều. Vì vậy, tôi đang chọn câu trả lời của bạn thay cho tôi, nhưng bạn có phiền khi chỉnh sửa câu trả lời để nó không gây hiểu lầm hay nhầm lẫn cho người khác không. Cảm ơn!
iconoclast

4

Ngay sau khi soạn câu hỏi của tôi, tôi đã nghĩ ra một cái gì đó có thể hoạt động. Tôi đã thử nó và nó hoạt động, bạn chỉ cần đưa ra nhiều tệp cho cấu hình tmux của bạn.

Đây là giải pháp, cụ thể là liên quan đến việc tải lại cấu hình của bạn. Trong tệp .tmux.conf của bạn, hãy đặt một cái gì đó như thế này:

bind R source-file "$HOME/.tmux/reload.tmux"

Trong tệp ~ / .tmux / reload.tmux đặt một cái gì đó như sau:

source-file "$HOME/.tmux.conf" 
display-message "Configuration reloaded."

Nó hoạt động hoàn hảo.


1
Đây thực sự là cách DUY NHẤT làm việc. Mọi thứ khác ở đây chỉ là không hoạt động.
lzap

Thật sao? ... Đã một thời gian kể từ khi tôi thử nghiệm phương pháp khác, nhưng tôi sẽ ngạc nhiên nếu tmux phá vỡ điều đó. Nếu bạn hoàn toàn chắc chắn rằng nó không hoạt động, thì tôi sẽ kiểm tra lại và có thể chấp nhận câu trả lời này thay thế.
iconoclast

Vâng tôi xin lỗi, câu trả lời trên thực sự có tác dụng :-)
lzap

1

Sử dụng phương thức run-shell đặt đầu ra vào bộ đệm sao chép yêu cầu xóa thủ công. Sử dụng tệp cấu hình trung gian sẽ thêm chi phí duy trì tệp cấu hình thứ hai. Kết hợp cả hai câu trả lời hoạt động tốt hơn trong trường hợp của tôi, vì tôi muốn tin nhắn biến mất sau một khoảng thời gian ngắn, tương tự như hộp thoại bật lên trong GUI, nhưng giữ mọi thứ trong một tệp.

bind R source-file ~/.tmux.conf \; display-message "Configuration reloaded"

0

Có một bản vá cho phép tạo kịch bản chính thức bên trong tmux, gắn ngôn ngữ tcl vào phần bên trong của nó.

http://ershov.github.io/tmux/

Ngoài ra, nó cho phép chỉ định bao nhiêu hành động mà bạn muốn cho tổ hợp phím 'chế độ'.

Sử dụng đó, mã của bạn sẽ trông như sau:

bind R tcl { source-file "$HOME/.tmux.conf" ; display-message "Configuration reloaded." }

hoặc thậm chí dễ đọc hơn:

bind R tcl {
  source-file "$HOME/.tmux.conf"
  display-message "Configuration reloaded."
}
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.