![VIM: 外部プログラムが実行中かどうかを確認する関数](https://rvso.com/image/89153/VIM%3A%20%E5%A4%96%E9%83%A8%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%8C%E5%AE%9F%E8%A1%8C%E4%B8%AD%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0.png)
vim 関数を使用して、pgrep を使用してプログラムが実行中かどうかを確認し、実行されていない場合は何か実行したいと思います。具体的には、次のようなことを実現したいと考えています。
function! checkifrunning(mystring)
if 'pgrep "mystring"' shows that something is NOT running
--do something--
endif
endfunction
'system()' 関数を使用する必要があると思いますが、方法がわかりません。誰か助けてくれませんか?
編集: 特にpgrepを使用するソリューションを希望します。他の方法ではありません
答え1
function! checkifrunning(mystring)
if !system('pgrep "' . a:mystring . '"')
" --do something--
endif
endfunction
技術的には!
動作する数字は、文字列が指定されている場合は、まず文字列を数値に変換します。ただし、実行中のプロセスがない場合、 の出力はpgrep
空になり、数値に変換すると 0 になります。実行中のプロセスがある場合、数値への変換では 0 以外の値が返されます。
の代わりに'pgrep "' . a:mystring . '"'
、 を実行することもできます'pgrep ' . shellescape(a:mystring)
。
答え2
次のように使用できます
:call system("pgrep process name ")
出力を印刷するには、
:echo system("pgrep process name ")
出力は次のように変数に保存できます。
:let a=system("pgrep process name ")
また、その変数を任意のループ、印刷、または文字列関数でも使用します。