在 tmux run-shell 命令中使用 bash 函数

在 tmux run-shell 命令中使用 bash 函数

我正在尝试在单独的 tmux 窗格中使用 ranger 实现在 vim 中打开文件的功能。如果直接在 .tmux.conf 中定义命令,它就可以工作。但是那里有太多代码看起来不太好,所以我试图将其移至函数中并在 .bashrc 中获取它们,但这会产生'tmux__ranger_to_vim' returned 127.为什么 tmuxrun-shell看不到定义的函数.bashrc,是否可以让它们可用?

.bashrc

    function tmux__current_pane_has_process {
      test -n "$1" || { echo "No process name" >&2; return 1; }
      pattern='^[^TXZ ]+ +'"${1}"'$'
      ps -o state= -o comm= | grep -iqE "$pattern"
    }
    
    function tmux__ranger_to_vim {
      tmux__current_pane_has_process 'ranger' || return 0
      tmux send-keys 'y'
      sleep .01
      tmux send-keys 'p'
      tmux select-pane -L
      tmux__current_pane_has_process 'n?vim' || return 0
      tmux send-keys ':tabe ' C-r * C-m
    }

.tmux.conf

bind-key t run-shell "tmux__ranger_to_vim"

答案1

tmux run-shell运行命令,因为sh -c它不包含 source .bashrc。另外,在某些系统上sh根本不是 bash,而是dash.因此,在调用之前必须显式地获取定义了所需函数的文件:

bind-key t run-shell 'bash -c "source ~/.tmux.bash ; tmux__ranger_to_vim"'

相关内容