วิธีการตั้งค่า tmux เพื่อให้มันเริ่มขึ้นด้วยเปิดหน้าต่างที่ระบุ?
วิธีการตั้งค่า tmux เพื่อให้มันเริ่มขึ้นด้วยเปิดหน้าต่างที่ระบุ?
คำตอบ:
คุณสามารถเขียนเชลล์สคริปต์ขนาดเล็กที่เรียกทำงาน tmux ด้วยโปรแกรมที่ต้องการ ฉันมีสิ่งต่อไปนี้ในเชลล์สคริปต์ที่ฉันเรียกใช้ dev-tmux สภาพแวดล้อม 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
ดังนั้นทุกครั้งที่ฉันต้องการเปิดตัวสภาพแวดล้อมการพัฒนาที่ฉันโปรดปรานฉันสามารถทำได้
$ dev-tmux
vim
หมายถึงคำสั่งที่จะดำเนินการในบานหน้าต่างแรก (และในเวลานั้นเท่านั้น) ของหน้าต่าง หากคุณต้องการตั้งชื่อเซสชันว่า 'vim' แทนใช่คุณถูกต้องคุณต้องใช้การ-s
ตั้งค่าสถานะ ไวยากรณ์ทั้งหมด: tmux new-session -d -s SessionName -n WindowName Command
ฉันพยายามสร้างกริดที่สลับซับซ้อนและต้องจัดการกับการสลับและแยกบานหน้าต่างซ้ำแล้วซ้ำอีก นี่คือการเรียนรู้ของฉัน:
tmux new-session \;
ทำให้คุณเริ่มต้นด้วยเซสชั่นใหม่ หากต้องการแยกการใช้งานในแนวนอนหรือแนวตั้งsplit-window -h
หรือ-v
ภายหลังให้ทำดังนี้
tmux new-session \; split-window -v \; split-window -h \;
สร้าง 3 บานหน้าต่างเช่นนี้:
------------
| |
|----------|
| | |
------------
ในการรันคำสั่งในบานหน้าต่างนั้นเพียงแค่เพิ่มsend-keys 'my-command'
คำสั่งเหล่านั้นลงไปในคำสั่งและC-m
เรียกใช้งานมัน:
tmux new-session \; \
send-keys 'tail -f /var/log/monitor.log' C-m \; \
split-window -v \; \
split-window -h \; \
send-keys 'top' C-m \;
และเซสชันที่ได้ควรเป็นเช่นนั้น
------------
| tail |
|----------|
| | top |
------------
ตอนนี้ผมพยายามอีกครั้งย่อยแบ่งบานหน้าต่างด้านซ้ายด้านล่างเพื่อเปลี่ยนทั้งกลับมาใช้last-pane
หรือในหน้าต่างที่ซับซ้อนมากขึ้นด้วยselect-pane -t 1
ซึ่งเป็นจำนวนของบานหน้าต่างในการสั่งซื้อที่สร้างขึ้นต้นด้วย1
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 \;
ทำแบบนั้น การรู้วิธีของคุณไปรอบ ๆ ด้วยsplit-window
และselect-pane
เป็นสิ่งที่คุณต้องการ นอกจากนี้ยังสะดวกในการผ่านด้วย-p 75
ขนาดเปอร์เซ็นต์ของบานหน้าต่างที่สร้างโดยsplit-window
เพื่อให้สามารถควบคุมขนาดของบานหน้าต่างได้มากขึ้น
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 \;
ซึ่งส่งผลให้ในเซสชั่นดูเหมือนว่า
------------------
| tail |
|----------------|
| | top |
|----------| |
| weechat | |
------------------
หวังว่าจะช่วยให้tmux
ผู้ที่ชื่นชอบในอนาคต
-h -p 30
สร้างแผงแนวนอนที่มีความสูง 30%; -v -p 75
เช่นเดียวกับแนวตั้งที่มีความกว้าง 75%
\:
คืออะไร? ฉันเคยเห็นสคริปท์ทำงานทั้งที่มีและไม่มีสิ่งนี้
\;
ส่งเซมิโคลอนไปยัง tmux แทนการทุบตีอนุญาตให้ส่งคำสั่งด้วยการเรียกไปยัง tmux หนึ่งครั้ง stackoverflow.com/questions/20913198/…
คุณสามารถหาแหล่งที่มาที่แตกต่างจากช่วงเวลาที่คุณ.tmux.conf
ชอบ:
# initialize sessions
bind S source-file ~/.tmux/session1
bind s source-file ~/.tmux/session2
จากนั้นจัดรูปแบบเซสชันตามที่คุณต้องการ:
#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
สิ่งนี้จะเปิดหน้าต่าง 2 บานหน้าต่างที่สองจะตั้งชื่อว่า foo / bar และแยกครึ่งในแนวตั้ง (50%) โดยมี foo วิ่งอยู่เหนือแถบ โฟกัสจะอยู่ในหน้าต่าง 2 (foo / bar), บานหน้าต่างด้านบน (foo)
จากนั้นคุณสามารถเริ่มเซสชัน tmux ที่คุณต้องการ (ในกรณีนี้, เซสชัน 1) ด้วย PrefixShifts
Prefix Shift S
ฉันจำเป็นต้องอยู่ใน tmux และการจัดหาไฟล์ของคุณพยายามเริ่มเซสชันใหม่ซึ่ง tmux ไม่ชอบและจะไม่ทำจนกว่าคุณจะบังคับให้ทำ
ใช้tmuxinator - ช่วยให้คุณมีการกำหนดค่าหลายเซสชันและคุณสามารถเลือกที่จะเปิดตัวในเวลาใดก็ตาม คุณสามารถเปิดใช้คำสั่งในหน้าต่างหรือบานหน้าต่างเฉพาะและกำหนดหัวเรื่องให้กับ windows นี่คือตัวอย่างการใช้งานกับการพัฒนาแอพพลิเคชั่น Djangoการใช้งานเช่นกับการพัฒนาโปรแกรมประยุกต์
ไฟล์กำหนดค่าตัวอย่าง:
# ~/.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
ดู README ที่ลิงค์ด้านบนสำหรับคำอธิบายแบบเต็ม
ดูได้ที่ @ https://github.com/remiprev/teamocil
คุณสามารถระบุโครงสร้างของคุณโดยใช้ 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
? ฉันไม่สามารถหาคำสั่งนั้นได้ทุกที่ ~ ดูเหมือนว่าจะเป็นnew-window
แต่ฉันไม่เข้าใจว่าทำไมคุณถึงใช้ทั้งแบบยาวและสั้น
แรกฉันมีวิธีการจาก@jasonwryanแต่ถ้าคุณมีมากกว่า 2 configs มันอาจทำให้สับสน
ดังนั้นฉันจึงสร้างฟังก์ชันนามแฝง:
tmx () {
tmux "$2" source-file "$HOME/.tmux/$1.conf";
}
ใน~/.tmux/
ฉันมีหลายเซสชันสำหรับการใช้งานหลายอย่าง ตัวอย่างเช่นฉันทำงานกับ บริษัท ต่าง ๆ ที่มีสภาพแวดล้อมการพัฒนาที่แตกต่างกัน ดังนั้นด้วยฟังก์ชั่นนามแฝงข้างต้นฉันสามารถเรียก: tmx company1
และโหลดการตั้งค่าที่ฉันต้องการ
อัพเดต:วัตถุประสงค์ของ "$ 2" หลังจากtmux
คำสั่งคือคุณสามารถส่ง tmux เพิ่มเติมได้
no server running on /tmp/tmux-1000/default
) tmux new-session
นั่นเป็นเหตุผลที่ผมจำเป็นต้องมีการแก้ไขคำสั่งด้วย Ref github.com/fatso83/dotfiles/commit/…
จากสคริปต์ "get.all" ของฉันซึ่งฉันเรียกใช้ทุกเช้าเพื่อเรียกใช้งานงาน "get.XXX" ที่ตามมาเพื่อรีเฟรชซอฟต์แวร์ที่ฉันติดตาม บางคนก็เลิกอัตโนมัติ คนอื่น ๆ ต้องการการโต้ตอบมากขึ้นเมื่อการทำเสร็จ (เช่นขอให้สร้าง 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
หากคุณต้องการแยกหน้าจอใน 2 บานหน้าต่าง (พูดในแนวนอน) คุณสามารถรันคำสั่งนี้ (ไม่ต้องใช้ tmux หรือเชลล์สคริปต์):
tmux new-session \; split-window -h \;
หน้าจอของคุณจะมีลักษณะดังนี้:
[ks@localhost ~]$ │[ks@localhost ~]$
│
│
│
│
│
│
│
│
│
│
│
[10] 0:ks@localhost:~* "localhost.localdomain" 19:51 31-янв-16
และนี่คือวิธีที่ฉันทำ:
#!/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
ฉันมีหนึ่งไฟล์สำหรับแต่ละโครงการของฉัน นอกจากนี้คุณสามารถจัดกลุ่มให้มีบางงานสำหรับงานอดิเรก
นอกจากนี้คุณสามารถย้ายไปยัง~/bin
โฟลเดอร์เพิ่มPATH
และให้tmux_my_awesome_project
ชื่อ จากนั้นคุณจะสามารถเรียกใช้จากแต่ละสถานที่
มันใช้งานได้สำหรับฉัน การสร้าง 5 windows ด้วยชื่อที่กำหนดและเลือกอัตโนมัติไปที่home
หน้าต่าง
new -n home
neww -n emacs
neww -n puppet
neww -n haskell
neww -n ruby
selectw -t 1
ลองพี่มันเป็น bootstrapper โครงการ
มันให้ apis ง่ายต่อการโต้ตอบกับ tmux
โต้ตอบได้ง่าย
ดูเหมือนว่านี้:
#!/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
ในการเปิดตัวโครงการทุกคนต้องทำคือเรียกใช้คำสั่งต่อไปนี้ -
bro start <project_name>
ชำระเงินหน้าจอด้านล่างจะแสดงวิธีเริ่มต้นbro
และใช้tmux
API
https://user-images.githubusercontent.com/8296449/50532502-2cf3e400-0b6e-11e9-84af-c5f77a04e5cc.gif
มีปลั๊กอิน tmux สำหรับสิ่งนี้
ลองใช้tmux-resurrect
เรียกคืนสภาพแวดล้อม tmux หลังจากรีสตาร์ทระบบ
Tmux นั้นยอดเยี่ยมยกเว้นเมื่อคุณต้องรีสตาร์ทคอมพิวเตอร์ คุณสูญเสียโปรแกรมที่กำลังทำงานไดเรกทอรีการทำงานโครงร่างบานหน้าต่าง ฯลฯ ทั้งหมดมีเครื่องมือการจัดการที่เป็นประโยชน์ แต่พวกเขาต้องการการกำหนดค่าเริ่มต้นและการปรับปรุงอย่างต่อเนื่องเมื่อเวิร์กโฟลว์ของคุณวิวัฒนาการหรือคุณเริ่มโครงการใหม่
tmux-resurrect บันทึกรายละเอียดเล็ก ๆ น้อย ๆ ทั้งหมดจากสภาพแวดล้อม tmux ของคุณเพื่อให้สามารถเรียกคืนได้อย่างสมบูรณ์หลังจากรีสตาร์ทระบบ (หรือเมื่อคุณรู้สึกว่ามัน) ไม่ต้องการการกำหนดค่า คุณควรรู้สึกว่าคุณไม่เคยเลิก tmux
หรือtmux-continuum
คุณสมบัติ:
- ประหยัดอย่างต่อเนื่องของสภาพแวดล้อม tmux
- tmux อัตโนมัติเริ่มทำงานเมื่อคอมพิวเตอร์ / เซิร์ฟเวอร์เปิดอยู่
- เรียกคืนอัตโนมัติเมื่อเริ่มใช้ tmux
คุณควรระบุไว้ในไฟล์ tmux config ของคุณ ( ~/.tmux.conf
) เช่น:
new mocp
neww mutt
new -d
neww
neww
(เปิดหนึ่งเซสชันที่มี 2 windows ที่เปิดใช้ mocp ในครั้งแรกและปิดเป็นวินาทีและอีกเซสชันที่แยกออกมาพร้อมกับ 3 หน้าต่างว่างเปล่า)
ฉันสร้างสคริปต์นี้ ไม่จำเป็นต้องใช้ tmuxinator ทับทิมหรืออื่น ๆ มันเป็นเพียงสคริปต์ทุบตีกำหนดค่าได้:
ไฟล์ชื่อ config ควรมีดังนี้:
combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')
และรหัส bash ควรเป็น:
#!/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
ไม่เริ่มเซิร์ฟเวอร์ด้วยตัวเอง ดูgithub.com/tmux/tmux/issues/182
tmuxpสนับสนุนการกำหนดค่าเซสชัน JSON หรือ YAML และ python API ไฟล์คอนฟิกูเรชัน tmuxp อย่างง่ายเพื่อสร้างเซสชันใหม่ในไวยากรณ์ YAML คือ:
session_name: 2-pane-vertical
windows:
- window_name: my test window
panes:
- pwd
- pwd
ปลั๊กอินtmux-continuumจะบันทึกเซสชั่น tmux ของคุณโดยอัตโนมัติและโหลดในครั้งถัดไปที่ tmux เริ่มต้นควรติดตั้งได้ง่ายกว่าโซลูชันสคริปต์ที่กำหนดเองที่นี่
คุณสมบัติ:
- ประหยัดอย่างต่อเนื่องของสภาพแวดล้อม tmux
- tmux อัตโนมัติเริ่มทำงานเมื่อคอมพิวเตอร์ / เซิร์ฟเวอร์เปิดอยู่
- เรียกคืนอัตโนมัติเมื่อเริ่มใช้ tmux
หากต้องการบันทึกเซสชันตามต้องการคุณสามารถใช้ปลั๊กอินtmux-resurrect จำเป็นต้องใช้tmux- resurrectเพื่อรันtmux-continuum
tmux-resurrect บันทึกรายละเอียดเล็ก ๆ น้อย ๆ ทั้งหมดจากสภาพแวดล้อม tmux ของคุณเพื่อให้สามารถเรียกคืนได้อย่างสมบูรณ์หลังจากรีสตาร์ทระบบ (หรือเมื่อคุณรู้สึกว่ามัน) ไม่ต้องการการกำหนดค่า คุณควรรู้สึกว่าคุณไม่เคยเลิก tmux
คุณสามารถใช้tmux hooksเพื่อดำเนินการคำสั่งเมื่อสร้างเซสชันใหม่ โดยเฉพาะสิ่งนี้สามารถทำได้โดยใช้session-created
ตะขอ
ตัวอย่างเช่นหากต้องการแยกหน้าจอสามวิธีโดยที่ htop ทำงานที่มุมขวาล่างคุณสามารถเพิ่มบรรทัดต่อไปนี้ใน~/.tmux.conf
ไฟล์ของคุณ:
set-hook -g session-created 'split -h ; split -v top'
ข้อดีของวิธีนี้คือคุณไม่ต้องรัน tmux ด้วยวิธีพิเศษ (เช่น shell script หรือ alias) เพื่อให้ได้ผลลัพธ์ที่ต้องการ คุณยังสามารถรวมสิ่งนี้เข้ากับtmux new-session -A -s mysession
คำอธิบายในคำตอบอื่น ๆเช่นว่าคำสั่ง hook จะทำงานเฉพาะเมื่อคุณสร้างเซสชันครั้งแรกเท่านั้นและไม่ได้อยู่ในไฟล์แนบที่ตามมา
ฟีเจอร์นี้ถูกเพิ่มเข้ามาโดยd15d54c2cย้อนกลับไปในปี 2016 รุ่นแรกที่รวมเอาไว้คือ 2.4
ฉันลองใช้ความคิดทั้งหมดในหน้านี้และฉันไม่ชอบมันเลย ฉันต้องการโซลูชันที่เริ่ม tmux ด้วยชุดหน้าต่างเฉพาะเมื่อเทอร์มินัลของฉันเปิดขึ้น ฉันยังต้องการให้มันเป็น idempotent เช่นการเปิดหน้าต่างเทอร์มินัลใหม่ใช้เวลามากกว่าเซสชัน tmux จากก่อนหน้านี้
โซลูชันข้างต้นมักจะเปิดเซสชัน tmux หลายครั้งและฉันต้องการเพียงครั้งเดียว ก่อนอื่นฉันเพิ่มสิ่งนี้ใน~/.bash_profile
:
tmux start-server
if [[ -z "$TMUX" ]]
then
exec tmux attach -d -t default
fi
จากนั้นฉันเพิ่มสิ่งต่อไปนี้ในของฉัน~/.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
ตอนนี้ทุกครั้งที่ฉันเริ่มต้นเทอร์มินัลหรือเริ่มต้น tmux หรืออะไรก็ตามฉันก็จะกลับไปที่การตั้งค่าที่ฉันต้องการ (ชื่อเซสชันdefault
) หรือสร้างเซสชั่นใหม่ด้วยการตั้งค่านั้น
tmux start_server
อย่าเริ่มต้นเซิร์ฟเวอร์ด้วยตัวเอง ดูgithub.com/tmux/tmux/issues/182
สคริปต์นี้เริ่มเซสชันที่มีชื่อ "e" และสามหน้าต่าง
#!/bin/sh
tmux new-session -s e -n etc -d 'cd /etc; bash -i'
tmux new-window -t e:1 -n home 'cd ~; bash -i'
tmux new-window -t e:2 -n log 'cd /var/log; bash -i'
tmux select-window -t e:1
tmux -2 attach-session -t e
bash --rcfile
เพื่อให้ได้ shell ที่ดีบน linux ทางวิทยาศาสตร์โดยเฉพาะกับรุ่น devtools ที่เปิดใช้งาน จะออกจากที่นี่ถ้ามีคนพยายามทำเช่นเดียวกันtmux new-window -n "git lg" "scl enable devtoolset-3 'bash --rcfile <(echo \"source \"$HOME/.bashrc\";cd ~/workspace/coolproject/;git lg\")'"