[20240731]tmux配置使用问题.txt
--//我以前配置tmux使用的配置文件存在如下内容:
# splitting panes with | and -
bind | split-window -h
bind - split-window -v
--//原始内容来自:Pragmatic.Bookshelf.tmux.2.Productive.Mouse-Free.Development.1680502212.pdf
--//使用该命令非常形象,按prefix | 可以垂直建立新的pane。按prefix - 可以水平建立新的pane。
# grep splitw /etc/tmux.conf | grep -v ^#
bind-key -n c-x splitw -v
bind-key - splitw -v
bind-key -n c-y splitw -h
bind-key | splitw -h
--//splitw 是 split-window的简写格式。
# tmux list-keys | grep "split-window -[hv]"
bind-key -T prefix | split-window -h
bind-key -T root C-x split-window -v
bind-key -T root C-y split-window -h
....
--//可以发现并没有出现按prefix - 可以水平建立新的pane的定义。可以我明明写在配置文件里面了。
--//尝试手工执行如下:
# tmux bind - split-window -v
# tmux list-keys | grep "split-window -[hv]"
bind-key -T prefix - split-window -v
bind-key -T prefix | split-window -h
bind-key -T root C-x split-window -v
bind-key -T root C-y split-window -h
--//说明手工执行没有任何问题的,为什么写在配置不行呢?
--//退出tmux,重新启动tmux,再检查-的bind,发现:
# tmux list-keys -
bind-key -r -T prefix - resize-pane -D 5
--//实际上发现在配置脚本有定义- 为resize-pane -D 5,覆盖了前面的配置,存在冲突。
--//当我前面手工执行时又覆盖前面的定义,导致我判断错误,最终我修改配置使用_代替-。
# egrep "splitw|split-window" /etc/tmux.conf | grep -v ^#
bind-key -n c-x splitw -v
bind-key _ splitw -v
bind-key -n c-y splitw -h
bind-key | splitw -h
# tmux list-keys | grep "split-window -[hv]"
bind-key -T prefix _ split-window -v
bind-key -T prefix | split-window -h
bind-key -T root C-x split-window -v
bind-key -T root C-y split-window -h
--//两个字符|_,都需要按shift键操作,也很好记忆。
--//另外调试时注意tmux的工作模式是client-server模式,如果1个session定义了参数,新建立的session会继承前面的定义。
--//通过例子说明,假设一个tmux:
# tmux ls
no server running on /tmp/tmux-0/default
--//开始没有session
--//启动1个session:
# tmux
--//定义 prefix - split-window -v。
# tmux bind - split-window -v
--//退出tmux,按prefix d
--//再启动1个session:
# tmux
# egrep "splitw|split-window" /etc/tmux.conf | grep -v ^#
bind-key -n c-x splitw -v
bind-key _ splitw -v
bind-key -n c-y splitw -h
bind-key | splitw -h
--//可以发现配置里面并没有prefix - 的定义,而实际上存在的也可以正常使用。
# tmux list-keys -
bind-key -T prefix - split-window -v
--//前面已经定义了prefix - ,导致新打开的会话继承了新的定义,我也是在调试时遇到的困惑。
--//实际上这类问题以前遇到过。
# tmux ls
0: 1 windows (created Wed Jul 31 11:52:24 2024)
1: 1 windows (created Wed Jul 31 11:54:29 2024) (attached)
--//可以发现实际上打开了两个session。
--//通过查询进程也可以发现这些细节信息。
# ps axjf
...
1 63312 63312 63312 ? -1 Ss 0 0:00 tmux
63312 63313 63313 63313 pts/1 63313 Ss+ 0 0:00 \_ -bash
63312 63396 63396 63396 pts/2 64583 Ss 0 0:00 \_ -bash
63396 64583 64583 63396 pts/2 64583 R+ 0 0:00 \_ ps axjf
# pstree -p
..
|-tmux: server(63312)-+-bash(63313)
| `-bash(63396)---pstree(64638)