:prev
この前のつづきです。
シェルをWSL(ubuntu bash)にすることで、:terminalの他、外部コマンド実行(“!” から始まるやつ)をWSL内で完結することができました。
が、ただ一点、:terminal {command} にする場合、:terminal bash -c '{command}'
としないとエラーになってしまうので、これが不満。
そこで、Wslterm というユーザー定義のコマンドを _gvimrc に追加することで、ラクしよう、と、こういうわけです(^^;
ヘルプを斜め読みしてとりあえず関数とコマンドの定義の仕方を最低限覚えて、以下の記述に辿り着く。
ほんとはもっとスマートなやり方があるんだと思いますが・・・素人の思いつきです。。。
" terminal の WSLラッパー コマンド (かなり修正:2018/7/13 0:02) " ・・・なんかトンチカンなことをやってる気がしてきた・・・ " append to ~/_gvimrc set shellslash set shell=C:/WINDOWS/system32/bash.exe set shellcmdflag=-c set shellquote=\" set shellxescape= set shellxquote= function! Wslterms(c,f,l,...) let cmdline = [] let option = [] let i = 0 while i < a:0 if stridx(a:000[i],'++') == 0 call add(l:option,a:000[i]) else call add(l:cmdline,a:000[i]) endif let i += 1 endwhile let l:options = len(l:option) ? join(l:option," ")." " : "" let l:cmd = "terminal " . l:options if len(l:cmdline) > 0 let l:cmd = printf("%s%s %s %s",l:cmd,&shell,&shellcmdflag,shellescape(join(l:cmdline," "))) endif if a:c let l:cmd = join([a:f,a:l],",") . l:cmd endif execute(l:cmd) endfunction command! -nargs=+ -complete=file -range=0 Wslterm call Wslterms(<count>,<line1>,<line2>,<f-args>)
これで、:Wslterm perl %
とか、’<,'>Wslterm hogehoge とかやると、bash -c をつけて簡易的に :terminalの真似ができました(^^;; おまけで、gvimのterminalの中で、WSL(ubuntu)内のvimでファイルを編集(左)とかできちゃう!w
ただ、vim自体操作は慣れてきたとはいえ、まだよく分かっていないのでこういうアプローチでいいのか、よく分かんないです。またvimスクリプトの本でも買って勉強しよ。
■補足 2018/09/24
guioptions に “!” を追加すると :shell コマンド時、コンソールウィンドウが立ち上がるのではく、gVimのウィンドウを使用するみたい。知らんかった・・・・。
:set guioptions+=!
_gvimrcに書いとくと、かなりイケてる感が味わえるかも(^^;
ちなみに僕の guioptions は・・・
"snip guioptions=egmrL! "snip
となっております。。。
:continue
つづきは part3で