Làm cách nào để tải lại tập tin cấu hình tmux đã xác định nhiều phiên?


8

Tôi đang sử dụng hai phiên riêng biệt tmuxvà tôi có các mục sau /etc/tmux.conf:

set -g base-index 1

new -s logi -n cmd
neww -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
splitw -t 1 -v -p 50
selectw -t 2
selectp -t 0

new -s standard -n htop "htop"
neww -n cmd
splitw -t 2 -v -p 50
selectw -t 2 
selectp -t 1

Tôi bắt đầu phiên standardbằng cách gọi lệnh sau:

urxvtc -name 'tmux' -e bash -c 'tmux attach-session -t standard'

Nếu không có phiên, nó tạo một, nếu có một phiên, nó sẽ đính kèm. Như bạn có thể thấy tôi có hai cửa sổ, một trong số đó được chia thành 2 cửa sổ. Khi tôi tải lại tệp cấu hình, tôi có thêm 2 cửa sổ từ phiên khác và cả hai đã được thêm vào các tệp có sẵn. Hơn nữa, các cửa sổ trước nhận được thêm một khung. Hai pan thêm là rõ ràng, không có lệnh thực thi (htop) trong bất kỳ trong số họ.

Có cách nào để tải lại tập tin cấu hình theo cách mà điều này sẽ chỉ được áp dụng cho phiên đính kèm không? Hoặc tôi phải quên tải lại tệp cấu hình khi tôi đang sử dụng phiên và để áp dụng cài đặt mới, tôi nên sử dụng tmux kill-servervà bắt đầu phiên mới một lần nữa?

Câu trả lời:


4

Xây dựng một bọc

Tôi nghĩ rằng nhu cầu của bạn được phục vụ tốt nhất bởi một số dạng tập lệnh bao bọc để thiết lập các phiên tùy chỉnh. Một cái gì đó giống như câu trả lời cho điều này .

Nó sẽ trông giống như thế này, nhưng bạn nên thay đổi nó cho nhu cầu cụ thể của bạn.

#!/bin/bash

# test if the session has windows
is_closed(){ 
    sess=$1
    n=$(tmux ls 2> /dev/null | grep "^$sess" | wc -l)
    [[ $n -eq 0 ]]
}

# either create it or attach to it
if is_closed logi ; then
  tmux new -d -s logi -n cmd
  tmux neww -t logi -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
  tmux splitw -t logi:1 -v -p 50
  tmux selectw -t logi:2
  tmux selectp -t logi:1
fi
if is_closed standard ; then
  tmux new -d -s standard -n htop "htop"
  tmux neww -n cmd -t standard
  tmux splitw -t standard:2 -v -p 50
  tmux selectw -t standard:2 
  tmux selectp -t standard:1
fi

Để tải lại một tập tin cấu hình

Nếu bạn chỉnh sửa tệp cấu hình trong khi sử dụng tmux, bạn có thể chạy đây là dấu nhắc

tmux source-file /path/to/conf

Hoặc, bạn có thể liên kết nó với một khóa trong .tmux.conf

bind r source-file ${HOME}/.tmux.conf \; display-message "source-file reloaded"

Cấu hình thư mục nhà

Cuối cùng, bạn thực sự không nên thêm các tùy chỉnh quan trọng vào /etc/tmux.confvì điều này sẽ không có ích cho người khác nếu bạn cần sử dụng một hệ thống chia sẻ. Thay vào đó, tôi khuyên bạn nên thêm bất kỳ tùy chỉnh nào ~/.tmux.confvì nó mang tính địa phương và cụ thể theo nhu cầu cá nhân của bạn.


Tôi gặp lỗi khi thực thi tập lệnh: [[: not found(dòng thứ 7)
Mikhail Morfikov 17/12/13

1
@MikhailMorfikov Có thể là do sh là một phiên bản khác. Hãy thử thay đổi dòng trên cùng #!/bin/bash.
scicalculator

Đúng, hoạt động.
Mikhail Morfikov

0

Tôi đã tạo tập lệnh này . Nó không cần tmuxinator, ruby ​​hoặc những người khác. Nó chỉ là một tập lệnh bash, cấu hình.

Tôi cấu hình tập tin cấu hình mi như:

combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')

Tôi có thể cấu hình tất cả các dự án của tôi. Phần còn lại được thực hiện bởi kịch bản:

#!/bin/bash

if [ -r config ]; then
    echo ""
    echo "Loading custom file"
    . config
else
    . config.dist
fi

tmux start-server

window=0
windownumber=-1

for i in "${combo[@]}"; do

    if [ $((window%2)) == 0 ]; then
        name=${i}
        ((windownumber++))
    else
        command=${i}
    fi

    if [ ${combo[0]} == "${i}" ]; then
        tmux new-session -d -s StarTmux -n "${name}"
    else
        if [ $((window%2)) == 0 ]; then
            tmux new-window -tStarTmux:$windownumber -n "${name}"
        fi
    fi

    if [ $((window%2)) == 1 ]; then
        tmux send-keys -tStarTmux:$windownumber "${command}" C-m
    fi

    ((window++))
done

tmux select-window -tStarTmux:0
tmux attach-session -d -tStarTmux

0

Bạn không phải sử dụng tập lệnh bao bọc, bạn có thể thực hiện bằng source-filelệnh.

Tôi chia .tmux.confhai phần của tôi và nó chỉ cung cấp những nguồn đó:

source-file ~/.config/tmux/options.conf
source-file ~/.config/tmux/session.conf

Sau đó, session.confchứa các định nghĩa khung:

new -s logi -n cmd
neww -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
splitw -t 1 -v -p 50
selectw -t 2
selectp -t 0

new -s standard -n htop "htop"
neww -n cmd
splitw -t 2 -v -p 50
selectw -t 2 
selectp -t 1

options.confchỉ chứa các định nghĩa tùy chọn:

bind R source-file ~/.config/tmux/options.conf \; display-message "Config reloaded..."
set -g base-index 1

Bằng cách này, bind Rnguồn chỉ có thể options.confvà mọi thứ sẽ được tải lại, nhưng không có bảng mới nào được tạo.
Một nhược điểm nhỏ là nếu bạn muốn thay đổi bố cục cửa sổ, bạn cần thoát và bắt đầu một phiên mới.

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.