quickrun.vimで非同期実行している時に実行中かどうか分かるようにする


概要

quickrun.vim+vimproc.vimでプログラムをvim内で非同期実行する際に実行中であれば、statuslineにRunning...と表示する。

環境

#nvim -v                                                                                                                                       [18:32:44]
NVIM v0.3.4
Build type: Release
LuaJIT 2.1.0-beta3
# head -n 4 quickrun.vim
" Run commands quickly.
" Version: 0.7.0
" Author : thinca <[email protected]>
" License: zlib License
vimproc.vim
ver 9.3 (https://github.com/Shougo/vimproc.vim/releases)

はじめに

quickrun.vim+vimproc.vimでプログラムをvim内で素早く非同期実行できることはよく知られていますし、使われている方も多いと思います。
非同期実行ができることでプログラムの実行中にもvimが使えてとても便利です。
しかし、便利になった半面、使っているとこんな疑問が湧き上がります。

これ今実行してるのか...?

非同期実行によって実行中にvimが使えなくなることがなくなりました。
が、その代わり自由に移動できるので、今実行しているのか分かりません。逆に実行していると思って待っていたら実行されていなかったこともあります。贅沢な悩みですが、結構困ります。

対処法

実行中にvimで以下のコマンドを実行すると、実行中の場合は1、実行中で無い場合は0が返されることが分かりました。

:echo  quickrun#is_running()

しかし、いちいち何度もこのコマンドを実行するのは面倒です。
実行中の時だけstatuslineに実行中であることを表示しましょう。

init.vim
function! My_running()
    if quickrun#is_running()
        return " Running... "
    else
        return ""
    endif
endfunction

set laststatus=2
set statusline=%F%m%r%h%w\%=
"statuslineの設定の表示したいところにこの行を追加---------
set statusline+=%{My_running()}
"-------------------------------------------------
set statusline+=%l/%L


分かり辛いけど右下にRunning...の文字が表示されています。

これで実行中のときだけstatuslineにRunning...の文字が表示されたと思います。
一件落着。

最後に

初めてvimscriptいじりました。関数名の最初は大文字なんですね。(一敗)
こうした方がいいとかここ違うぞとかあれば是非コメントお願いします。