LoginSignup
2
5

More than 5 years have passed since last update.

Windowsのターミナル・ファイラー・エディタの連携

Posted at

背景

開発をするときに必要な3種の神器(ターミナル・ファイラー・エディタ)についての考察はエンジニアなら誰でも行ったことがあると思う。
最近のエディタではそれだけでターミナルやファイラーの機能もあり、一つで完結するようになっているが、私はそうは思っていない。
ターミナルはターミナルに、ファイラーはファイラーに、エディタはエディタにそれぞれ特化した機能があり、一つにまとめてしまうとそれらが切り落とされることが多い。
そこでそれぞれに専用ソフトを使うのだが、それには各ソフトの連携が不可欠である。

どのソフトを使うのか

ファイラー:エクスプローラ
エディタ:gVim
ターミナル:ConEmu & powershell

選定理由を書くと長くなるのでここでは考察しない

どんな連携が必要か

1.ターミナルで開いているディレクトリをファイラーで開く
2.ターミナルで開いているディレクトリ内のファイルをエディタで開く
3.ファイラーで開いたフォルダをターミナルで開く(管理者権限でも開ける)
4.ファイラーで開いているフォルダ、もしくはその中のファイルをエディタで開く

上記4つの連携をスムーズにできることが開発をする上では必要条件となる

ターミナルからの連携

ターミナルからの連携は難しくない。
ディレクトリをファイラーで開く場合は

ii .

ファイルをエディタで開く場合は

gvim [ファイル名]

これだけでOK。ただし、gvimにはPathを通す必要がある。
また、gvimを複数起動したくない場合は

gvim --remote [ファイル名]

とすれば、すでに開いているgVimで開いてくれる。
--remoteを毎回打つのがつらい人は$profileに


function gvimr($arg){gvim --remote-silent $arg}

を追加すればgvimrコマンドで開くことができる。

ファイラーからの連携

ファイラーからの連携は右クリックのコンテキストメニューを利用する。
コンテキストメニューはレジストリを追加することでカスタマイズできる。
※レジストリの変更は実行は自己責任でお願いします。

下記スクリプトをUTF8BOM付で保存し実行すればコンテキストメニューに追加される


$vimpath = (get-command gvim).source
if($vimpath -eq $null){
  write-host "gvimにpathが通ってないよ?"
  return
}
$conemupath = (get-command conemu64).source
if($vimpath -eq $null){
  write-host "conemu64にpathが通ってないよ?"
  return
}

function SetRegistry($binpath,$regpath,$contextValue,$argString){
  $command = "`"" + $binpath + "`"" + $argString
  New-Item $regpath
  New-ItemProperty $regpath -name "(default)" -value $contextValue
  New-ItemProperty $regpath -name "Icon" -value $binpath
  $regpath = $regpath +"\command"
  New-Item $regpath
  New-ItemProperty $regpath -name "(default)" -value ("`"" + $binpath+ "`"" + $argString)
}

$binpath = $vimpath
$regpath = "Registry::HKEY_CLASSES_ROOT\Directory\Background\shell\gvim"
$contextValue = "gvimで開く"
$argString = " `"--remote-silent`" `"%v.`""
SetRegistry $binpath $regpath $contextValue $argString

$regpath = "Registry::HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\gvim"
$argString = " `"--remote-silent`" `"%v`""
SetRegistry $binpath $regpath $contextValue $argString

$binpath = $conemupath
$regpath = "Registry::HKEY_CLASSES_ROOT\Directory\Background\shell\ConEmu"
$contextValue = "ConEmuで開く"
$argString = " `"-single`" `"-dir`" `"%v.`""
SetRegistry $binpath $regpath $contextValue $argString

$regpath = "Registry::HKEY_CLASSES_ROOT\Directory\Background\shell\ConEmuRunas"
$contextValue = "管理者としてConEmuで開く"
$argString = " `"-cmd`" `"powershell.exe`" `"-noexit`" `"-command`" `"Set-Location`" `"-literalPath`" `"%v`" `"-new_console:a`""
SetRegistry $binpath $regpath $contextValue $argString

ファイルを右クリック→gvimで開く
フォルダ内の何もないところを右クリック→gvimで開く(gvim内でnetrwが開かれる)
フォルダ内の何もないところを右クリック→ConEmuを開く
フォルダ内の何もないところを右クリック→管理者としてConEmuを開く
上記4つが追加される。ただしgvim,ConEmuはPathを通す必要がある。

ちなみにレジストリを削除するときは下記スクリプトで行う

remove-Item -Recurse "Registry::HKEY_CLASSES_ROOT\Directory\Background\shell\gvim"

remove-Item -Recurse "Registry::HKEY_CLASSES_ROOT\AllFilesystemObjects\shell\gvim"

remove-Item -Recurse  "Registry::HKEY_CLASSES_ROOT\Directory\Background\shell\ConEmu"

remove-Item -Recurse "Registry::HKEY_CLASSES_ROOT\Directory\Background\shell\ConEmuRunas"

2
5
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
2
5