tmux if-shell运行shell不同的输出

时间:2019-06-21 17:08:23

标签: shell tmux

下面的is_vim命令与tmux if-shell命令一起使用,可以正确检测vim是否在当前窗格中打开,如果是,则在下面发送键盘命令。

但是,它不适用于run-shell,我不确定为什么。使用run-shell时,if语句似乎总是评估为false,并始终调用下面的tmux select-pane命令。

# is_vim is directly from the setup guide for https://github.com/christoomey/vim-tmux-navigator
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
    | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'" 

# Comment out one of the below to test
bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R"
bind -n C-h run-shell "if [ $is_vim ]; then tmux send-keys C-l; else tmux select-pane -R; fi"

1 个答案:

答案 0 :(得分:1)

[是命令,不是if语法的一部分。扩展后,您已经

if [ ps -o ... | grep ... ]; then

这是错误的;你只想要

if ps -o ... | grep ...; then

所以放括号:

bind -n C-h run-shell "if $is_vim ; then tmux send-keys C-l; else tmux select-pane -R; fi"

但是,您应该可以做一些更简单的事情(未经测试)

bind -n C-l if-shell "[ #{pane_current_command} = vim ]" ...
bind -n C-h run-shell "if [ #{pane_current_command} = vim ]; then ..."
在外壳程序看到命令之前,

#{pane_current_command}tmux展开。