我正在尝试在单独的 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"'