Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
vim plugin to interact with tmux
branch: master

This branch is 118 commits behind benmills:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
doc
plugin
README.mkd

README.mkd

vimux

Easily interact with tmux from vim. This project is still in development, so some features are still missing.

What inspired me to write vimux was tslime.vim, a plugin that lets you send input to tmux. While tslime.vim works well, I felt it wasn't optimized for my primary use case which was having a smaller tmux pane that I would use to run tests or play with a REPL.

My goal with vimux is to make interacting with tmux from vim effortless. By default when you call RunVimTmuxCommand vimux will create a 20% tall horizontal pane under your current tmux pane and execute a command in it without losing focus of vim. Once that pane exists whenever you call RunVimTmuxCommand again the command will be executed in that pane. As I was using vimux myself I wanted to rerun commands over and over. An example of this was running the current file through rspec. Rather than typing that over and over I wrote RunLastVimTmuxCommand that will execute the last command you called with RunVimTmuxCommand.

Other auxiliary functions and the ones I talked about above can be found bellow with a full description and example key binds for your vimrc.

Installation

With vim-bundle: vim-bundle install benmills/vimux

Otherwise download the latest tarball, extract it and move plugin/vimux.vim inside ~/.vim/plugin. If you're using pathogen, then move the entire folder extracted from the tarball into ~/.vim/bundle.

Platform-specific Plugins

Usage

RunVimTmuxCommand

Run a system command in a small horizontal split bellow the current pane vim is in.

" Run the current file with rspec
map <Leader>rb :call RunVimTmuxCommand("clear; rspec " . bufname("%"))<CR>

PromptVimTmuxCommand

Prompt for a command and run it in a small horizontal split bellow the current pane.

" Prompt for a command to run
map <Leader>rp :PromptVimTmuxCommand<CR>

RunLastVimTmuxCommand

Run the last command executed by RunVimTmuxCommand

" Run last command executed by RunVimTmuxCommand
map <Leader>rl :RunLastVimTmuxCommand<CR>

InspectVimTmuxRunner

Move into the tmux runner pane created by RunVimTmuxCommand and enter copy mode (scroll mode).

" Inspect runner pane
map <Leader>ri :InspectVimTmuxRunner<CR>

CloseVimTmuxPanes

Close all other tmux panes in the current window.

" Close all other tmux panes in current window
map <Leader>rx :CloseVimTmuxPanes<CR>

InterruptVimTmuxRunner

Interrupt any command that is running inside the runner pane.

" Interrupt any command running in the runner pane
map <Leader>rs :InterruptVimTmuxRunner<CR>

Full Keybind Example

" Run the current file with rspec
map <Leader>rb :call RunVimTmuxCommand("clear; rspec " . bufname("%"))<CR>

" Prompt for a command to run
map <Leader>rp :PromptVimTmuxCommand<CR>

" Run last command executed by RunVimTmuxCommand
map <Leader>rl :RunLastVimTmuxCommand<CR>

" Inspect runner pane
map <Leader>ri :InspectVimTmuxRunner<CR>

" Close all other tmux panes in current window
map <Leader>rx :CloseVimTmuxPanes<CR>

" Interrupt any command running in the runner pane
map <Leader>rs :InterruptVimTmuxRunner<CR>

tslime replacement

Here is how to use vimux to send code to a REPL. This is similar to tslime. First, add some helpful mappings.

" Prompt for a command to run
map <LocalLeader>vp :PromptVimTmuxCommand<CR>

" If text is selected, save it in the v buffer and send that buffer it to tmux
vmap <LocalLeader>vs "vy :call RunVimTmuxCommand(@v)<CR>

" Select current paragraph and send it to tmux
nmap <LocalLeader>vs vip<LocalLeader>vs<CR>

Now, open a clojure file. Let's say your leader is backslash (). Type \vp, and then type lein repl at the prompt. This opens a tmux split running a REPL. Then, select text or put the cursor on a function and type \vs. This will send it to the REPL and evaluate it.

Options

VimuxHeight

Set the percent height of the runner pane opened by RunVimTmuxCommand. Default: "20"

let VimuxHeight = "50"

VimuxOrientation

Set the default position of the runner pane.

Acceptable Values: "v" Vertical "h" Horizontal

Default: "v"

let VimuxOrientation = "h"

VimuxUseNearestPane

Use nearest pane (not used by vim) if found instead of running split-window. Useful if you always have two panes opened and you want Vimux to use the existing one.

let VimuxUseNearestPane = 1
Something went wrong with that request. Please try again.