Câu trả lời:
Bạn có thể viết một tập lệnh shell nhỏ khởi chạy tmux với các chương trình cần thiết. Tôi có đoạn mã sau trong shell script mà tôi gọi là dev-tmux. Một môi trường dev:
#!/bin/sh
tmux new-session -d 'vim'
tmux split-window -v 'ipython'
tmux split-window -h
tmux new-window 'mutt'
tmux -2 attach-session -d
Vì vậy, bất cứ khi nào tôi muốn khởi chạy môi trường dev yêu thích của mình, tôi chỉ có thể làm
$ dev-tmux
vim
viết tắt của lệnh sẽ được thực thi trong khung đầu tiên (và tại thời điểm đó) của cửa sổ. Thay vào đó, nếu bạn muốn đặt tên phiên là 'vim' thì có, bạn đã đúng, bạn phải sử dụng -s
cờ. Toàn bộ cú pháp: tmux new-session -d -s SessionName -n WindowName Command
Tôi đã cố gắng tạo ra một mạng lưới phức tạp và phải đối phó với việc chuyển đổi và chia tách nhiều lần. Dưới đây là những bài học của tôi:
tmux new-session \;
Được bạn bắt đầu với một phiên mới. Để phân chia nó sử dụng ngang hoặc dọc split-window -h
hoặc -v
sau đó, như thế:
tmux new-session \; split-window -v \; split-window -h \;
Tạo 3 tấm, như thế này:
------------
| |
|----------|
| | |
------------
Để chạy các lệnh trong các bảng đó, chỉ cần thêm chúng bằng send-keys 'my-command'
lệnh và C-m
thực thi lệnh đó:
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v \; \
split-window -h \; \
send-keys 'top' C-m \;
Và phiên kết quả sẽ như thế.
------------
| tail |
|----------|
| | top |
------------
Bây giờ tôi cố gắng một lần nữa chia nhỏ các cửa sổ phía dưới bên trái, do đó chuyển đổi hoặc trở lại sử dụng last-pane
, hoặc trong các cửa sổ phức tạp hơn, với các select-pane -t 1
nơi 1
là số của cửa sổ để tạo ra bắt đầu với 0
.
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v \; \
split-window -h \; \
send-keys 'top' C-m \; \
select-pane -t 1 \; \
split-window -v \; \
send-keys 'weechat' C-m \;
Có phải vậy không Cơ bản biết cách của bạn xung quanh với split-window
và select-pane
là tất cả những gì bạn cần. Nó cũng thuận tiện để vượt qua với -p 75
một tỷ lệ phần trăm của khung được tạo bởi split-window
để có nhiều quyền kiểm soát hơn đối với kích thước của các ô.
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v -p 75 \; \
split-window -h -p 30 \; \
send-keys 'top' C-m \; \
select-pane -t 1 \; \
split-window -v \; \
send-keys 'weechat' C-m \;
Kết quả trong một phiên trông như thế
------------------
| tail |
|----------------|
| | top |
|----------| |
| weechat | |
------------------
Hy vọng rằng sẽ giúp tmux
những người đam mê trong tương lai.
-h -p 30
tạo một bảng điều khiển ngang với 30% chiều cao có sẵn; -v -p 75
tương tự cho chiều dọc với 75% chiều rộng.
\:
gì? Tôi đã thấy các kịch bản làm việc có và không có điều này.
\;
chuyển dấu chấm phẩy cho tmux thay vì bash, cho phép các lệnh được gửi với một cuộc gọi đến tmux. stackoverflow.com/questions/20913198/ Mạnh
Bạn có thể nguồn các phiên khác nhau từ .tmux.conf
như thế của bạn như vậy:
# initialize sessions
bind S source-file ~/.tmux/session1
bind s source-file ~/.tmux/session2
Và sau đó định dạng các phiên như bạn yêu cầu:
#session1
new -s SessionName -n WindowName Command
neww -n foo/bar foo
splitw -v -p 50 -t 0 bar
selectw -t 1
selectp -t 0
Điều này sẽ mở 2 cửa sổ, cửa sổ thứ hai sẽ được đặt tên là foo / bar và sẽ được chia theo chiều dọc một nửa (50%) với foo chạy trên thanh. Tiêu điểm sẽ ở cửa sổ 2 (foo / bar), khung trên cùng (foo).
Sau đó, bạn có thể bắt đầu phiên tmux ưa thích của mình (trong trường hợp này là session1) với PrefixShifts
Prefix Shift S
Tôi cần phải ở trong tmux và tìm nguồn cung cấp tệp của bạn để bắt đầu một phiên mới mà tmux không thích và sẽ không làm trừ khi bạn buộc phải làm như vậy.
Sử dụng tmuxinator - nó cho phép bạn có nhiều phiên được cấu hình và bạn có thể chọn phiên nào sẽ khởi chạy tại bất kỳ thời điểm nào. Bạn có thể khởi chạy các lệnh trong các cửa sổ hoặc bảng cụ thể và đặt tiêu đề cho các cửa sổ. Dưới đây là một ví dụ sử dụng với việc phát triển các ứng dụng Django .
Tệp cấu hình mẫu:
# ~/.tmuxinator/project_name.yml
# you can make as many tabs as you wish...
project_name: Tmuxinator
project_root: ~/code/rails_project
socket_name: foo # Not needed. Remove to use default socket
rvm: 1.9.2@rails_project
pre: sudo /etc/rc.d/mysqld start
tabs:
- editor:
layout: main-vertical
panes:
- vim
- #empty, will just run plain bash
- top
- shell: git pull
- database: rails db
- server: rails s
- logs: tail -f logs/development.log
- console: rails c
- capistrano:
- server: ssh me@myhost
Xem README tại liên kết trên để được giải thích đầy đủ.
có một cái nhìn @ https://github.com/remiprev/teamocil
bạn có thể chỉ định cấu trúc của mình bằng YAML
windows:
- name: sample-window
splits:
- cmd: vim
- cmd:
- ipython
width: 50
- cmd:
height: 25
:~$ tmux new-session "tmux source-file ~/session1"
neww
split-window -v 'ipython'
split-window -h
new-window 'mutt'
:~$ echo `alias tmux_s1='tmux new-session "tmux source-file ~/session1"'` >>~/.bashrc
:~$ . ~/.bashrc
:~$ tmux_s1
neww
? Tôi không thể tìm thấy lệnh đó ở bất cứ đâu. ~ Có vẻ như vậy new-window
, mặc dù tôi không thể hiểu tại sao bạn sử dụng cả dạng dài và dạng ngắn.
Đầu tiên tôi đã có cách tiếp cận từ @jasonwryan nhưng nếu bạn có nhiều hơn 2 cấu hình, nó có thể gây nhầm lẫn.
Vì vậy, tôi đã tạo ra một hàm bí danh:
tmx () {
tmux "$2" source-file "$HOME/.tmux/$1.conf";
}
Trong ~/.tmux/
tôi có nhiều phiên cho nhiều mục đích sử dụng. Ví dụ tôi làm việc cho các công ty khác nhau có môi trường dev khác. Vì vậy, với chức năng bí danh ở trên, tôi có thể chỉ cần gọi: tmx company1
và tải cấu hình tôi cần.
Cập nhật: Mục đích của "$ 2" sau tmux
lệnh là, bạn có thể vượt qua các đối số tmux bổ sung.
no server running on /tmp/tmux-1000/default
). Đó là lý do tại sao tôi cần phải vá lệnh tmux new-session
. Tham khảo github.com/fatso83/dotfiles/commit/ từ
Từ tập lệnh "get.all" của tôi, mà tôi gọi mỗi sáng để chạy một loạt các công việc "get.XXX" tiếp theo để làm mới phần mềm mà tôi theo dõi. Một số trong số họ là tự động bỏ. Những người khác yêu cầu nhiều tương tác hơn sau khi nhận được kết thúc (như yêu cầu xây dựng emacs).
#!/bin/sh
tmux att -t get ||
tmux \
new -s get -n capp \; \
send-keys 'get.capp' C-m \; \
neww -n emacs \; \
send-keys 'get.emacs' C-m \; \
neww -n git \; \
send-keys 'get.git' C-m \; \
neww -n mini \; \
send-keys 'get.mini' C-m \; \
neww -n port \; \
send-keys 'get.port' C-m \; \
neww -n rakudo \; \
send-keys 'get.rakudo' C-m \; \
neww -n neil \; \
send-keys 'get.neil && get.neil2 && exit' C-m \; \
neww -n red \; \
send-keys 'get.red && exit' C-m \; \
neww -n cpan \; \
send-keys 'get.cpan && exit' C-m \; \
selectw -t emacs
Nếu bạn chỉ muốn phân chia màn hình trên 2 panes (nói theo chiều ngang), bạn có thể chạy lệnh này (không yêu cầu tmux hoặc shell script):
tmux new-session \; split-window -h \;
Màn hình của bạn sẽ trông như thế này:
[ks@localhost ~]$ │[ks@localhost ~]$
│
│
│
│
│
│
│
│
│
│
│
[10] 0:ks@localhost:~* "localhost.localdomain" 19:51 31-янв-16
Và đây là cách tôi làm:
#!/bin/bash
function has-session {
tmux has-session -t name_of_my_session 2>/dev/null
}
if has-session ; then
echo "Session already exists"
else
cd /path/to/my/project
tmux new-session -d -s name_of_my_session 'vim'
tmux split-window -h -p 40 start_web_server
tmux split-window -v
tmux attach-session -d -t name_of_my_session
fi
Tôi có một tập tin cho mỗi dự án của tôi. Ngoài ra, bạn có thể nhóm chúng để có một số cho công việc một số cho các dự án sở thích.
Ngoài ra, bạn có thể di chuyển nó vào ~/bin
thư mục, thêm nó vào PATH
và tmux_my_awesome_project
đặt tên. Sau đó, bạn sẽ có thể chạy nó từ mỗi nơi.
Hãy thử bro , nó là một bootstrapper dự án.
Nó cung cấp apis dễ dàng để tương tác với tmux
.
Nó trông giống như thế này:
#!/bin/sh
# @ project_name/tasks/init.sh
structure project_name
window editor
run 'vim'
window terminal
run 'echo happy coding ...'
focus editor
connect project_name
Để khởi chạy một dự án, tất cả những gì bạn cần làm là chạy lệnh sau -
bro start <project_name>
Kiểm tra screencast dưới đây, nó cho thấy làm thế nào để bắt đầu bro
và sử dụng tmux
api của nó .
https://user-images.githubusercontent.com/8296449/50532502-2cf3e400-0b6e-11e9-84af-c5f77a04e5cc.gif
Có một plugin tmux cho việc này.
Kiểm tra tmux-hồi sinh
Khôi phục môi trường tmux sau khi khởi động lại hệ thống.
Tmux là tuyệt vời, ngoại trừ khi bạn phải khởi động lại máy tính. Bạn mất tất cả các chương trình đang chạy, thư mục làm việc, bố trí khung, v.v. Có những công cụ quản lý hữu ích ngoài kia, nhưng chúng yêu cầu cấu hình ban đầu và cập nhật liên tục khi quy trình làm việc của bạn phát triển hoặc bạn bắt đầu các dự án mới.
tmux-resurrect lưu tất cả các chi tiết nhỏ từ môi trường tmux của bạn để nó có thể được khôi phục hoàn toàn sau khi khởi động lại hệ thống (hoặc khi bạn cảm thấy thích nó). Không cần cấu hình. Bạn sẽ cảm thấy như bạn không bao giờ bỏ tmux.
Hoặc tmux-continuum
Đặc trưng:
- tiết kiệm liên tục môi trường tmux
- tự động khởi động tmux khi máy tính / máy chủ được bật
- tự động khôi phục khi tmux được khởi động
Bạn nên chỉ định nó trong tệp cấu hình tmux ( ~/.tmux.conf
) của bạn, ví dụ:
new mocp
neww mutt
new -d
neww
neww
(mở một phiên với 2 cửa sổ với mocp được khởi chạy trong lần đầu tiên và mutt trong lần thứ hai và một phiên khác với 3 cửa sổ trống).
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ó thể cấu hình:
Một tập tin có tên config nên chứa một cái gì đó như thế này:
combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')
và mã bash phải là:
#!/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
tmux start_server
không tự mình khởi động một máy chủ. Xem github.com/tmux/tmux/issues/182
Plugin tmux-continuum sẽ tự động lưu phiên tmux của bạn và tải nó vào lần tiếp theo tmux bắt đầu, nên dễ cài đặt hơn một số giải pháp tập lệnh tùy chỉnh ở đây.
Đặc trưng:
- tiết kiệm liên tục môi trường tmux
- tự động khởi động tmux khi máy tính / máy chủ được bật
- tự động khôi phục khi tmux được khởi động
Để lưu phiên của bạn theo yêu cầu, bạn có thể sử dụng plugin tmux-resurrect . tmux-resurrect cũng được yêu cầu để chạy tmux-continuum
tmux-resurrect lưu tất cả các chi tiết nhỏ từ môi trường tmux của bạn để nó có thể được khôi phục hoàn toàn sau khi khởi động lại hệ thống (hoặc khi bạn cảm thấy thích nó). Không cần cấu hình. Bạn sẽ cảm thấy như bạn không bao giờ bỏ tmux.
Bạn có thể sử dụng các tmux hook để thực thi các lệnh khi một phiên mới được tạo. Cụ thể, điều này đạt được bằng cách sử dụng session-created
móc.
Ví dụ: để phân chia màn hình ba cách với htop chạy ở phía dưới bên phải, bạn có thể thêm dòng sau vào ~/.tmux.conf
tệp của mình :
set-hook -g session-created 'split -h ; split -v top'
Ưu điểm của phương pháp này là bạn không phải chạy tmux theo bất kỳ cách đặc biệt nào (ví dụ: shell script hoặc bí danh) để có được kết quả mong muốn. Bạn cũng có thể kết hợp điều này với tmux new-session -A -s mysession
mô tả trong câu trả lời khác này để các lệnh hook chỉ được chạy khi bạn lần đầu tiên tạo phiên chứ không phải trên các tệp đính kèm tiếp theo.
Tính năng này đã được thêm vào bởi d15d54c2c vào năm 2016. Bản phát hành đầu tiên bao gồm nó là 2.4.
Tôi chỉ thử sử dụng tất cả các ý tưởng trên trang này và tôi không thích bất kỳ ý tưởng nào trong số đó. Tôi chỉ muốn một giải pháp bắt đầu tmux với một bộ cửa sổ cụ thể khi thiết bị đầu cuối của tôi mở. Tôi cũng muốn nó là idempotent, tức là mở một cửa sổ terminal mới sẽ tiếp quản phiên tmux từ cái trước đó.
Các giải pháp trên thường có xu hướng mở nhiều phiên tmux và tôi chỉ muốn một phiên. Đầu tiên, tôi đã thêm nó vào ~/.bash_profile
:
tmux start-server
if [[ -z "$TMUX" ]]
then
exec tmux attach -d -t default
fi
sau đó tôi đã thêm vào như sau ~/.tmux.conf
:
new -s default -n emacs /usr/local/bin/emacs
neww -n shell /usr/local/bin/bash
neww -n shell /usr/local/bin/bash
selectw -t 1
bây giờ mỗi khi tôi bắt đầu một thiết bị đầu cuối hoặc bắt đầu tmux hoặc bất cứ điều gì, tôi sẽ gắn lại thiết lập mong muốn hiện tại của mình (phiên có tên default
) hoặc tạo một phiên mới với thiết lập đó.
tmux start_server
không tự mình khởi động một máy chủ. Xem github.com/tmux/tmux/issues/182
bash --rcfile
để có được một trình bao đẹp trên linux khoa học với một phiên bản devtools cụ thể được kích hoạt. Sẽ để lại đây nếu ai đó cố gắng làm như vậy.tmux new-window -n "git lg" "scl enable devtoolset-3 'bash --rcfile <(echo \"source \"$HOME/.bashrc\";cd ~/workspace/coolproject/;git lg\")'"