vim-dispatch

dispatch.vim: Asynchronous build and test dispatcher

Github星跟踪图

dispatch.vim

Leverage the power of Vim's compiler plugins without being bound by
synchronicity. Kick off builds and test suites using one of several
asynchronous adapters (including tmux, screen, iTerm, Windows, and a headless
mode), and when the job completes, errors will be loaded and parsed
automatically.

If that doesn't excite you, then perhaps this video will change your
mind.

Installation

Install using your favorite package manager, or use Vim's built-in package
support:

mkdir -p ~/.vim/pack/tpope/start
cd ~/.vim/pack/tpope/start
git clone https://tpope.io/vim/dispatch.git
vim -u NONE -c "helptags dispatch/doc" -c q

Usage

The core of Vim's compiler system is :make, a command similar to :grep
that runs a build tool and parses the resulting errors. The default build
tool is of course make, but you can switch it (and the associated error
parser) with :compiler. There are lots of built-in compilers, and they do
more than just compile things. Plus you can make your own.

We'll start by looking at dispatch.vim's :make wrapper :Make, and then
move on to higher abstractions.

Foreground builds

Kick off quick tasks with :Make. What happens next depends on which adapter
takes charge.

  • If you're in tmux, a small split will be opened at the bottom.
  • If you have iTerm running, a new tab is opened.
  • On Windows, a minimized cmd.exe window is spawned.
  • Otherwise, you get a plain old :make invocation.

When the task completes, the window closes, the errors are loaded and parsed,
and the quickfix window automatically opens. At no point will your focus be
stolen.

Background builds

Use :Make! for longer running tasks, like "run the entire test suite".

  • If you're in tmux or GNU screen, a new window is created in the background.
  • If you have iTerm running, a new tab is opened but not selected.
  • Windows still spawns a minimized cmd.exe window.
  • Otherwise, you get a headless invocation. You can't see it, but it's
    running in the background.

You won't be interrupted with a quickfix window for a background build.
Instead, open it at your leisure with :Copen.

You can also use :Copen on a build that's still running to retrieve and
parse any errors that have already happened.

Compiler switching

As hinted earlier, it's easy to switch compilers.

:compiler rubyunit
:make test/models/user_test.rb

Wait, that's still twice as many commands as it needs to be. Plus, it
requires you to make the leap from testrb (the executable) to rubyunit
(the compiler plugin). The :Dispatch command looks for a compiler for an
executable and sets it up automatically.

:Dispatch testrb test/models/user_test.rb

If no compiler plugin is found, :Dispatch simply captures all output.

:Dispatch bundle install

As with :make, you can use % expansions for the current filename.

:Dispatch rspec %

The :Dispatch command switches the compiler back afterwards, so you can pick
a primary compiler for :Make, and use :Dispatch for secondary concerns.

Default dispatch

With no arguments, :Dispatch looks for a b:dispatch variable. You
can set it interactively, or in an autocommand:

autocmd FileType java let b:dispatch = 'javac %'

If no b:dispatch is found, it falls back to :Make.

:Dispatch makes a great map. By default dispatch.vim provides `<CR> for
:Dispatch<CR>. You can find all default maps under :h dispatch-maps.

Focusing

Use :FocusDispatch (or just :Focus) to temporarily, globally override the
default dispatch:

:Focus rake spec:models

Now every bare call to :Dispatch will call :Dispatch rake spec:models.
You'll be getting a lot of mileage out of that :Dispatch map.

Use :Focus! to reset back to the default.

Spawning interactive processes

Sometimes you just want to kick off a process without any output capturing or
error parsing. That's what :Start is for:

:Start lein repl

Unlike :Make, the new window will be in focus, since the idea is that you
want to interact with it. Use :Start! to launch it in the background.

Plugin support

Using dispatch.vim from a plugin is a simple matter of checking for and using
:Make and :Start if they're available instead of :make and :!. Your
favorite plugin already supports it, assuming your favorite plugin is
rails.vim.

FAQ

How can I have :Dispatch! or :Make! open the quickfix window on
completion?

Use :Dispatch or :Make. The entire point of the ! is to run in the
background without interrupting you.

But that blocks Vim.

Then the adapter in use doesn't support foreground builds. Adjust your setup.

Self-Promotion

Like dispatch.vim? Follow the repository on
GitHub and vote for it on
vim.org. And if
you're feeling especially charitable, follow tpope on
Twitter and
GitHub.

License

Copyright © Tim Pope. Distributed under the same terms as Vim itself.
See :help license.

主要指标

概览
名称与所有者tpope/vim-dispatch
主编程语言Vim Script
编程语言Vim script (语言数: 1)
平台
许可证
所有者活动
创建于2013-04-01 23:12:29
推送于2024-09-02 19:34:27
最后一次提交2024-09-02 10:49:10
发布数9
最新版本名称v1.8 (发布于 2019-06-09 00:00:30)
第一版名称v1.0 (发布于 2013-04-01 19:56:16)
用户参与
星数2.7k
关注者数41
派生数131
提交数384
已启用问题?
问题数283
打开的问题数36
拉请求数24
打开的拉请求数7
关闭的拉请求数45
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?