2015-08-31 4 views
0

Я использую vim с tmux.Переключение панелей в Vimdiff Git's в Tmux

установка I 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, но так как это через мерзавца переключения аналоговый или цифровой панели не работает, потому что он смотрит, как панель работает процесс «ВИМ», и это не является (он регистрируется как " мерзавец ").

Кто-нибудь знает, как это исправить?

ответ

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 к «ВИМ», то второй открывает GIT диф, третьи строки задает заголовок страницы т o «bash» после выхода.

Тогда в моем tmux конфигурации я добавил следующее, чтобы проверить как pane_title и опции pane_current_command, чтобы увидеть, если ВИМ существует:

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" 
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.