首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Tmux中Git's Vimdiff中切换窗格

在Tmux中Git's Vimdiff中切换窗格
EN

Stack Overflow用户
提问于 2015-08-31 15:49:43
回答 2查看 414关注 0票数 1

我用的是vim和tmux。

我设置了Vim和Tmux分裂之间的无表面窗格切换

使用这样的命令:

代码语言:javascript
运行
复制
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时,它会中断。例如:

代码语言:javascript
运行
复制
git difftool --tool=vimdiff --no-prompt filename.rb

这个命令启动vim,但是由于它是通过git似乎没有运行的窗格,所以切换不起作用,因为它看上去是窗格正在运行进程"vim“,而不是(它注册为"git")。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-31 17:36:21

这是我的解决方案,有点烦琐,但有效

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

然后是一个别名alias vdif="~/vdif,所以我可以在任何地方调用它

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

代码语言:javascript
运行
复制
printf "\033]2;%s\033\\" "vim"
git difftool --no-prompt --tool=vimdiff $1 $2
printf "\033]2;%s\033\\" "bash"

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

然后,在tmux中,我添加了以下内容,以检查pane_title和pane_current_command选项,以确定是否存在vim:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2017-01-10 15:53:28

如果你使用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扩散工具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32315173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档