切换Git在Tmux的Vimdiff中的窗格

时间:2015-08-31 15:49:44

标签: git vim tmux vimdiff

我正在使用vim和tmux。

我设置seemless pane switching between Vim splits and Tmux splits

使用以下命令:

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无格式窗格切换不起作用,因为它看起来是窗格正在运行进程“vim”而它不是(它注册为“git”)。

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

2 个答案:

答案 0 :(得分:0)

这是我的解决方案,它有点hacky但它​​有效

我创建了一个名为〜/ vdif

的文件

然后是别名alias vdif="~/vdif,以便我可以从任何地方调用

在这个文件中,我提出以下内容:

printf "\033]2;%s\033\\" "vim"
git difftool --no-prompt --tool=vimdiff $1 $2
printf "\033]2;%s\033\\" "bash"

第一行将pane_title设置为" vim",第二行打开git diff,第三行将页面标题设置为" bash"退出时。

然后在我的tmux配置中添加以下内容以检查pane_title和pane_current_command选项以查看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"

答案 1 :(得分:0)

如果您使用https://github.com/christoomey/vim-tmux-navigator

并自己设置绑定。你可以改变这条线 is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(view|n?vim?x?)(diff)?$"' is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(git|view|n?vim?x?)(diff)?$"'

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