在 Tmux 中 Git 的 Vimdiff 中切换面板
Switching panes within Git's Vimdiff in Tmux
我正在使用 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")。
有谁知道解决这个问题的方法吗?
这是我的解决方案,虽然有点老套但是很管用
我创建了一个名为 ~/vdif 的文件
然后是别名 alias vdif="~/vdif
这样我就可以从任何地方调用它
我在这个文件中放入了以下内容:
printf "3]2;%s3\" "vim"
git difftool --no-prompt --tool=vimdiff
printf "3]2;%s3\" "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"
如果你使用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。
我正在使用 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")。
有谁知道解决这个问题的方法吗?
这是我的解决方案,虽然有点老套但是很管用
我创建了一个名为 ~/vdif 的文件
然后是别名 alias vdif="~/vdif
这样我就可以从任何地方调用它
我在这个文件中放入了以下内容:
printf "3]2;%s3\" "vim"
git difftool --no-prompt --tool=vimdiff
printf "3]2;%s3\" "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"
如果你使用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。