Windows ユーザのごく一部には、コマンドプロンプトが無いと生きられない民族がいます。そしてその民族の一部には cygwin や msys bash 等といった、サードパーティなシェル(powershell?何それ聞こえなーい)を使いたがらない種族もいます。
私もその種族なのですが、今日はそういった世界中のWindowsエンジニアの中でも数パーセントしかいないであろう人達にとって便利なTipsを紹介したいと思います。(オマケでbash連携もあるよ)
lestrrat/peco - GitHub
https://github.com/lestrrat/peco
以前、私も同じようなツールとして gof というのを作りましたが、peco はこれをもっと簡素に、もっとカスタマイザブルにした物になります。
一見、UNIX でしか動作しなさそうに見えますが、gof ど同様に Windows でも動作します。マルチバイト文字列も扱えます(ただし標準入力は utf-8 にする必要があるので必要な方は iconv コマンドや nkf コマンドをパイプに加えて下さい)。
peco の動作は非常にシンプルで、標準入力から与えられた行をUIで選択し、選んだ行を標準出力に書き込みます。キーのカスタマイズも出来ますので、詳しく知りたい方は上記リンクを参照下さい。
で、Windows でこの peco をどう使うかですが、今回
peco が起動しますのでそこで移動したいフォルダを絞り込み、ENTER で確定するとそのフォルダに移動できます。
面倒な手順が省略できて便利かと思います。
またこれを応用すると golang を使った開発も便利に出来ます。
ghqを使ったローカルリポジトリの統一的・効率的な管理について - delirious thoughts
http://blog.kentarok.org/entry/2014/06/03/135300
上記の記事では UNIX シェルコマンドが紹介されていますが、これを Windows のバッチファイルで書くと以下になります。
peco のフォルダへ移動する事が出来ます。
![peco](http://lestrrat.github.io/peco/peco-demo-ghq.gif)
pcd
というコマンドを作ってみました。
@echo off
if "%1" equ "add" (
if "%2" neq "" (
echo %2 >> "%USERPROFILE%\.p
eco-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%\.pec
o-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%\.pec
o-cd^" ^| iconv -f char -t utf-8
^| peco'
rem
for /f %%i in ('type ^"%USERPROF
ILE%\.peco-cd^" ^| peco') do (
cd %%i
break
)
:end
良く使うフォルダに簡単に移動できるコマンドです。まず良く移動するフォルダを登録します。
C:\>pcd add c:\vagrant
C:\>pcd add c:\users\mattn\vimfi
les
めんどくさい人は
C:\>pcd edit
とするとエディタが起動し、そこで編集出来ます。そして
C:\>pc
d
とすると
![pcd](http://gyazo.compile-error.net/93661c9b53610648.png)
peco-ghq.bat
@echo off
for /f %%i in ('ghq list -p ^| p
eco') do (
cd %%i
break
)
これで、﹁peco のソースを確認したい﹂と思ったら何時でも何処でも﹁peco-ghq﹂を実行するだけで
![peco-ghq](http://gyazo.compile-error.net/00d34cd203bb6fa9.png)
番外編
基本的に 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個だけあればランタイム等は必要ありません。