在Git'中切换窗格;Tmux中的s-Vimdiff

在Git'中切换窗格;Tmux中的s-Vimdiff,git,vim,tmux,vimdiff,Git,Vim,Tmux,Vimdiff,我将vim与tmux一起使用 我设置 使用如下命令: bind -n C-h run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-h) || tmux select-pane -L" 在我的tmux配置中,它工作得很好 但是,当我使用git启动vim时,它会中断。例如: git difftool --tool=vimdiff --no-prompt

我将vim与tmux一起使用

我设置

使用如下命令:

bind -n C-h run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-h) || tmux select-pane -L"
在我的tmux配置中,它工作得很好

但是,当我使用git启动vim时,它会中断。例如:

git difftool --tool=vimdiff --no-prompt filename.rb
这个命令启动vim,但由于它是通过git seemless窗格切换的,所以无法工作,因为它看起来是窗格正在运行进程“vim”,而不是(它注册为“git”)


有人知道解决这个问题的方法吗?

这是我的解决方案,虽然有点老套,但很有效

我创建了一个名为~/vdif的文件

然后是别名
alias vdif=“~/vdif
,这样我就可以在任何地方调用它

在这个文件中,我放了以下内容:

printf "\033]2;%s\033\\" "vim"
git difftool --no-prompt --tool=vimdiff $1 $2
printf "\033]2;%s\033\\" "bash"
第一行将窗格标题设置为“vim”,第二行打开git diff,第三行在退出时将页面标题设置为“bash”

然后在我的tmux配置中,我添加了以下内容来检查pane_title和pane_current_命令选项,以查看vim是否存在:

is_vim='echo "#{pane_current_command}#{pane_title}" | grep -iqE "vim"'
bind -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"
bind -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D"
bind -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U"
bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R"
bind -n C-\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l"
如果你使用

然后自己设置绑定。你可以更改行
是|vim='echo“{pane\u current\u command}”| grep-iqE“(^ | \/)g?(查看| n?vim?x?(差异)?$”
to
is|u vim='echo“{pane\u current\u command}”grep-ique“(^ | \/)g?(git | view | n?vim?x?(diff)?$”


注意正则表达式中添加的
git |
?这将有助于检查您是否正在使用git difftool。

您是如何想出这个解决方案的?最初的想法/工作?非常酷!-我首先在这里读到: