背景
開発をするときに必要な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"