私もその種族なのですが、今日はそういった世界中のWindowsエンジニアの中でも数パーセントしかいないであろう人達にとって便利なTipsを紹介したいと思います。(オマケでbash連携もあるよ)
lestrrat/peco - GitHub
https://github.com/lestrrat/peco
以前、私も同じようなツールとして gof というのを作りましたが、peco はこれをもっと簡素に、もっとカスタマイザブルにした物になります。
一見、UNIX でしか動作しなさそうに見えますが、gof ど同様に Windows でも動作します。マルチバイト文字列も扱えます(ただし標準入力は utf-8 にする必要があるので必要な方は iconv コマンドや nkf コマンドをパイプに加えて下さい)。
peco の動作は非常にシンプルで、標準入力から与えられた行を UI で選択し、選んだ行を標準出力に書き込みます。キーのカスタマイズも出来ますので、詳しく知りたい方は上記リンクを参照下さい。
で、Windows でこの peco をどう使うかですが、今回
pcd
というコマンドを作ってみました。
@echo off
if "%1" equ "add" (
if "%2" neq "" (
echo %2 >> "%USERPROFILE%\.peco-cd"
goto end
)
goto usage
)
if "%1" equ "edit" (
goto edit
)
if "%1" neq "" (
goto usage
)
goto query
:usage
echo %0 [add PATH ^| edit]
goto end
:edit
if "%EDITOR%" neq "" (
"%EDITOR%" "%USERPROFILE%\.peco-cd"
goto end
)
notepad "%USERPROFILE%\.peco-cd"
goto end
:query
rem NOTE:
rem
rem If you have a problem caused by character-set, modify below part like:
rem 'type ^"%USERPROFILE%\.peco-cd^" ^| iconv -f char -t utf-8 ^| peco'
rem
for /f %%i in ('type ^"%USERPROFILE%\.peco-cd^" ^| peco') do (
cd %%i
break
)
:end
良く使うフォルダに簡単に移動できるコマンドです。まず良く移動するフォルダを登録します。
C:\>pcd add c:\vagrant
C:\>pcd add c:\users\mattn\vimfiles
めんどくさい人は
C:\>pcd edit
とするとエディタが起動し、そこで編集出来ます。そして
C:\>pcd
とすると
peco が起動しますのでそこで移動したいフォルダを絞り込み、ENTER で確定するとそのフォルダに移動できます。
面倒な手順が省略できて便利かと思います。
またこれを応用すると golang を使った開発も便利に出来ます。
ghqを使ったローカルリポジトリの統一的・効率的な管理について - delirious thoughts上記の記事では UNIX シェルコマンドが紹介されていますが、これを Windows のバッチファイルで書くと以下になります。
http://blog.kentarok.org/entry/2014/06/03/135300
peco-ghq.bat
@echo off
for /f %%i in ('ghq list -p ^| peco') do (
cd %%i
break
)
これで、「peco のソースを確認したい」と思ったら何時でも何処でも「peco-ghq」を実行するだけで
peco のフォルダへ移動する事が出来ます。
番外編
基本的に perco や peco は zsh と連携して使用される事が多いですが bash でも問題なく使えます。例えば以下を$HOME/.bashrc
に追加しておけば <C-x><C-g>
で ghq による github リポジトリ作業フォルダへの移動が、<C-x><C-r>
でコマンド履歴の選択が行える様になります。
select-ghq() {
DIR=$(ghq list -p | peco)
[ -n "$DIR" ] && cd $DIR
}
select-history() {
CMD=$(history | sed 's/^\s[0-9]\+\s*//' | peco)
[ -n "$CMD" ] && cd $CMD
}
bind '"\C-x\C-g":"select-ghq\n"'
bind '"\C-x\C-r":"select-history\n"'
なお、peco は golang で開発されており、exe ファイル1個だけあればランタイム等は必要ありません。