vim-vimux/README.mkd

164 lines
5.8 KiB
Markdown
Raw Normal View History

2012-02-28 02:48:42 +00:00
# vimux
2012-03-03 17:53:57 +00:00
Easily interact with tmux from vim. This project is still in development, so some features are still missing.
2012-02-28 02:48:42 +00:00
2012-03-03 18:01:10 +00:00
What inspired me to write vimux was [tslime.vim](https://github.com/kikijump/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.
2012-02-28 02:48:42 +00:00
## Installation
With **[vim-bundle](https://github.com/benmills/vim-bundle)**: `vim-bundle install benmills/vimux`
2012-03-03 17:53:57 +00:00
Otherwise download the latest [tarball](https://github.com/benmills/vimux/tarball/master), extract it and move `plugin/vimux.vim` inside `~/.vim/plugin`. If you're using [pathogen](https://github.com/tpope/vim-pathogen), then move the entire folder extracted from the tarball into `~/.vim/bundle`.
2012-02-28 02:55:14 +00:00
## Platform-specific Plugins
* [vimux-ruby-test](https://github.com/pgr0ss/vimux-ruby-test) a set of commands to easily run ruby tests
2012-04-14 17:42:24 +00:00
* [vimux-cucumber](https://github.com/cloud8421/vimux-cucumber) run Cucumber Features through Vimux
2012-02-28 02:48:42 +00:00
## Usage
### RunVimTmuxCommand
Run a system command in a small horizontal split bellow the current pane vim is in. You can optionally pass a second argument to stop vimux from automatically sending a return after the command.
2012-02-28 02:48:42 +00:00
```viml
" Run the current file with rspec
2012-03-01 22:49:20 +00:00
map <Leader>rb :call RunVimTmuxCommand("clear; rspec " . bufname("%"))<CR>
" Run command without sending sending a return
map <Leader>rq :call RunVimTmuxCommand("clear; rspec " . bufname("%"), 0)<CR>
```
### PromptVimTmuxCommand
Prompt for a command and run it in a small horizontal split bellow the current pane.
```viml
" Prompt for a command to run
map <Leader>rp :PromptVimTmuxCommand<CR>
2012-02-28 02:48:42 +00:00
```
### RunLastVimTmuxCommand
Run the last command executed by `RunVimTmuxCommand`
```viml
" Run last command executed by RunVimTmuxCommand
2012-03-08 02:20:53 +00:00
map <Leader>rl :RunLastVimTmuxCommand<CR>
```
### InspectVimTmuxRunner
Move into the tmux runner pane created by `RunVimTmuxCommand` and enter copy mode (scroll mode).
```viml
" Inspect runner pane
map <Leader>ri :InspectVimTmuxRunner<CR>
```
### CloseVimTmuxRunner
Close the tmux runner created by `RunVimTmuxCommand`
```viml
" Close vim tmux runner opened by RunVimTmuxCommand
map <Leader>rq :CloseVimTmuxRunner<CR>
```
### CloseVimTmuxPanes
2012-02-28 02:48:42 +00:00
Close all other tmux panes in the current window.
```viml
" Close all other tmux panes in current window
map <Leader>rx :CloseVimTmuxPanes<CR>
```
### InterruptVimTmuxRunner
Interrupt any command that is running inside the runner pane.
```viml
" Interrupt any command running in the runner pane
2012-03-01 01:22:10 +00:00
map <Leader>rs :InterruptVimTmuxRunner<CR>
```
2012-03-01 01:22:10 +00:00
### Full Keybind Example
2012-02-29 18:49:07 +00:00
```viml
" Run the current file with rspec
2012-03-01 22:49:20 +00:00
map <Leader>rb :call RunVimTmuxCommand("clear; rspec " . bufname("%"))<CR>
2012-02-29 18:49:07 +00:00
" Prompt for a command to run
map <Leader>rp :PromptVimTmuxCommand<CR>
" Run last command executed by RunVimTmuxCommand
2012-03-08 02:20:53 +00:00
map <Leader>rl :RunLastVimTmuxCommand<CR>
2012-02-29 18:49:07 +00:00
" Inspect runner pane
map <Leader>ri :InspectVimTmuxRunner<CR>
" Close all other tmux panes in current window
map <Leader>rx :CloseVimTmuxPanes<CR>
" Close vim tmux runner opened by RunVimTmuxCommand
map <Leader>rq :CloseVimTmuxRunner<CR>
" Interrupt any command running in the runner pane
2012-03-01 01:22:10 +00:00
map <Leader>rs :InterruptVimTmuxRunner<CR>
2012-02-29 18:49:07 +00:00
```
### tslime replacement
2012-03-24 00:12:29 +00:00
Here is how to use vimux to send code to a REPL. This is similar to tslime. First, add some helpful mappings.
```viml
" Prompt for a command to run
map <LocalLeader>vp :PromptVimTmuxCommand<CR>
2012-03-24 00:12:29 +00:00
" If text is selected, save it in the v buffer and send that buffer it to tmux
vmap <LocalLeader>vs "vy :call RunVimTmuxCommand(@v . "\n", 0)<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. The reason we pass `0` to `RunVimTmuxCommand` is to stop the normal return that is sent to the runner pane and use our own new line so the clojure REPL will evaluate the selected text without adding an extra return. Thanks to @trptcolin for discovering this issue.
## Options
### VimuxHeight
Set the percent height of the runner pane opened by `RunVimTmuxCommand`.
2012-02-29 04:52:52 +00:00
**Default: `"20"`**
```viml
let VimuxHeight = "50"
2012-02-28 02:48:42 +00:00
```
### VimuxOrientation
Set the default position of the runner pane.
2012-02-28 02:48:42 +00:00
**Acceptable Values:**
`"v"` Vertical
`"h"` Horizontal
2012-02-28 02:55:14 +00:00
**Default: `"v"`**
```viml
let VimuxOrientation = "h"
```
2012-04-14 18:20:45 +00:00
### 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.
```viml
2012-04-14 18:20:45 +00:00
let VimuxUseNearestPane = 1
```
### VimuxResetSequence
The keys sent to the runner pane before running a command. By default it sends `q` to make sure the pane is not in scroll-mode and `C-u` to clear the line.
**Default: `"q C-u"`
```viml
let VimuxResetSequence = ""
```