< mockra >

Vim and Tmux Essentials - 04 May 2017


If you’ve always been curious about improving your workflow with tmux, but not sure where to start, here’s a quick start with the essentials. The first thing we’re going to start with is navigation.

A quick word of warning, these directions are for tmux 2.4, and are incompatible with older versions.

You’ll want to add these commands to your ~/.tmux.conf file. They’ll give you the ability to seamlessly switch between vim and tmux panes using a control + movement key(hjkl).

  # smart pane switching with awareness of vim 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"
  bind -n C-j run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-j) || tmux select-pane -D"
  bind -n C-k run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-k) || tmux select-pane -U"
  bind -n C-l run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys C-l) || tmux select-pane -R"
  bind -n C-\ run "(tmux display-message -p '#{pane_current_command}' | grep -iq vim && tmux send-keys 'C-\\') || tmux select-pane -l"

Once you’ve setup your tmux config, you’ll also need to install a vim plugin.

  Plug 'christoomey/vim-tmux-navigator'

The next thing we’re going to do is install Vimux, which will let you easily interact with tmux from vim.

  Plug 'benmills/vimux'

Once we’ve installed vimux, we’ll want to setup our testrunner to take advantage of tmux. I personally use vim-test, which can be set to use vim with the following command in your vimrc:

  let test#strategy = "vimux"

The last thing we’ll want to do is setup a shortcut for quickly fullscreening our vimux pane. This is useful for viewing test output, or if we want to check git history, etc..

  map <Leader>z :VimuxZoomRunner<CR>

These are just the basics, and there’s a lot more you can do to boost your productivity with tmux. I think these are a good starting point for a saner test environment in vim though.

If you want to dig deeper, feel free to check out my dotfiles.