LoginSignup
3
2

More than 5 years have passed since last update.

PowerShellの実行結果をVimに取り込む

Posted at

read:コマンドを使う

Vimにはカレントバッファにファイルを読み込むread:コマンドがあります。これと外部コマンド実行の!を組み合わせてシェルの実行結果をVimに取り込みます。

たとえばファイルのリスト出力を取り込みたければexコマンドで

:read: !gci

と入力してやると

シェルがコード 1 で終了しました

続けるにはENTERを押すかコマンドを入力してください

あれ?ENTER押してみるか。

 1
 2 'gci' は、内部コマンドまたは外部コマンド、
 3 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

...(´Д` )

shellを指定しよう

うちで使ってるWindows版Vimは香り屋さんとこのものなんですが、デフォルトのシェル指定がcmd.exeです。

:set shell
  shell=C:\WINDOWS\system32\cmd.exe

Windowsに標準搭載されて久しいのに、いまだにメジャーになりきれていないPowerShell。

:set shell=powershell
:read !gci

シェルを切り替えることで

  1
  2
  3
  4     ディレクトリ: C:\Users\home
  5
  6
  7 Mode                LastWriteTime         Length Name
  8 ----                -------------         ------ ----
  9 d-r---       2015/09/18     21:41                3D Objects
 10 d-----       2015/11/03     18:11                chkopt
 11 d-r---       2015/11/19     21:15                Contacts
 12 d-r---       2015/07/10     20:04                Desktop
 13 d-r---       2015/11/14     19:49                Documents
 14 d-r---       2015/11/14     19:49                Downloads
 15 d-r---       2015/11/19     21:15                Favorites
 16 d-r---       2015/11/19     21:15                Links

でた。面倒なので_vimrcにset shell=powershellを書いておきましょう。

Write-Hostがリダイレクトされない

もともとこれをやりたかった理由が、シェルスクリプトの実行結果を取り込めるといいなと思ったからなんですが、標準コマンドレットの出力は取り込めるもののWrite-Hostの出力は取り込めませんでした。

Write-Outputで出力したものは取り込めます。

Write-HostWrite-Outputの違いは、前者が標準出力限定に対して後者はデフォルトが標準出力。Vimの:read機能はおそらく画面出力をリダイレクトして出力結果を持ってきているんでしょうね。リダイレクト不可能な出力は取り込めないんでしょう。

装飾不要な出力はWrite-Outputを使うようにするしかないのかなぁ。

ということでちょっと中途半端な結果になってしまいました。PowerShellの仕様だからこれ以上は無理かな。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2