<~2015>AutoHotkeyを使ってWindows PowerShellのキーバインドをbashにしよう

Windows PowerShellは強力なオブジェクト指向ベースのシェルで従来のコマンド・プロンプトに対して、タブ補完も非常に優れていますが、bashなど*sh系からの移行にとって困難なのが、キーバインドです。

左右移動はもちろん、行頭、行末まで削除など、キーボードの中心から指を離さずに操作できるようにできている*sh系に比べて、「←」、「Home」などを押さないと移動できず、さらにはPowerShell自身にはキーバインドの変更の仕組みがありません。

開発者やシステム管理者、テスト・エンジニアにとってキーボードの中心から指を移動させることは非常に効率が悪くストレスの溜ることです。

しかし、今回ご紹介するAutoHotkeyを使うと簡単に*sh系のキーバインドに変更することができます。

AutoHotkey

ダウンロードして、インストーラに従っていけば、簡単にインストールできます。

AutoHotKeyの設定ファイルである「AutoHotoKey.ahk」に以下のように記述します。

#IfWinActive , ahk_class ConsoleWindowClass
^a::SendInput {HOME}
^e::SendInput {END}
^u::SendInput {ESC}
^p::SendInput {Up}
^n::SendInput {Down}
^l::SendInput {ESC}cls{ENTER}
^k::SendInput {F4}
^f::SendInput {right}
^b::SendInput {left}
#IfWinActive

これで、快適Ctrl + *生活ができます。

これはWindows PowerShellのコンソールを使っているときのみ有効にするキーバインドですので、他のアプリケーションに影響を与えることはありません。

加えて、PowerShellでもシェルのセッションを終わらせてもヒストリが有効になるように、$profileに以下を記述しておくと、さらに*shにように便利にヒストリが使えるようになります。

$HistoryFile = Join-Path (Split-Path $Profile -Parent) history.xml
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action {
Get-History -count $MaximumHistoryCount | Export-Clixml $HistoryFile
}
if (Test-Path $HistoryFile) {
Import-Clixml $HistoryFile | Add-History
}

Get-Historyコマンドレットで過去のヒストリを表示、Invoke-Histroyコマンドで下記のヒストリの実行ができます。

参考

http://programming-aip.blogspot.jp/2013/01/powershellckwunix.html

Windows PowerShellではaliasとしてUNIXコマンドがほぼ使用できるようになっているのに加えて、キーバインドの変更とヒストリの追加によって、UNIXのシェル環境に慣れた方でも違和感&ストレスなく移行することできますので、普段MacやLinuxでシェルを使っている方でWindowsを使うことがあったら、是非今回のカスタマイズをして、快適なPowerShell生活を送って下さい。

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/