Skip to content

Instantly share code, notes, and snippets.

@strange
Forked from svenfuchs/_readme.md
Created October 15, 2013 07:35
Show Gist options
  • Save strange/6987906 to your computer and use it in GitHub Desktop.
Save strange/6987906 to your computer and use it in GitHub Desktop.

Based on Mislav's gist and vim-tmux-navigator.

Since tmux hosts vim I disliked that I had to install a vim plugin for this. Instead I think it's cleaner to control vim from tmux.

My actual goal was to achive the following behaviour though (I have a default setup similar to the one Mislav shows in the gist. Two vertically split tmux panes, where the left one hosts vim, which has two vertically split windows):

  • On the leftmost window in vim: when I hit C-h (do not wrap to the rightmost tmux pane, but) zoom the left tmux pane.
  • On the rightmost tmux pane: when I hit C-l (do not wrap to the leftmost tmux pane, but) zoom the right tmux pane.
  • All other navigation: work as given in Mislav's gist

I guess the toggle between last active panes behaviour has slightly changed, but I'm not sure how it's supposed to work exactly and I don't use it much anyway.

#!/usr/bin/env bash
cmd="$(tmux display -p '#{pane_current_command}' | xargs basename | tr A-Z a-z)"
[ "${cmd%m}" = "vi" ] && vim=true || vim=false
pane="$(tmux display -p '#{pane_index}')"
pane=$[ pane + 1 ]
panes="$(tmux display -p '#{window_panes}')"
if [[ "$@" = "-L" && $pane == 1 || "$@" = '-R' && $pane == $panes ]]; then
cmd="tmux resize-pane -Z"
else
cmd="tmux select-pane $@"
fi
if $vim; then
wincmd="$(echo "${1#-}" | tr 'lLDUR' 'phjkl')"
tmux send-keys C-c ":let nr = winnr() | wincmd $wincmd" C-m
tmux send-keys ":if nr == winnr() | silent call system(\"$cmd\") | end"
tmux send-keys C-m ':echo "\r"' C-m
else
$cmd
fi
bind -n C-k run-shell 'tmux-vim-select-pane -U'
bind -n C-j run-shell 'tmux-vim-select-pane -D'
bind -n C-h run-shell 'tmux-vim-select-pane -L'
bind -n C-l run-shell 'tmux-vim-select-pane -R'
bind -n C-\ run-shell 'tmux-vim-select-pane -l'
@strange
Copy link
Author

strange commented Oct 15, 2013

Leave insert mode before issuing any commands in vim.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment