初速1PV

プログラミングにまつわることの記録

zshにショートカットを追加してターミナル操作を便利にする

zshにユーザー定義のショートカットキーを追加してみました。

はじめに

他のシェルにはあるかわからないが、zshではユーザーがキーバインドを設定することで機能を拡張することができる。 また、emacs, vimキーバインドを選択することができる。

たとえば、vimキーバインドを使うためにはzshrcに

bindkey -v

とする。

zshzle

zshzle (zsh command line editor)に手を加えることでショートカットを使ったシェルの操作をすることができる。 例えば、up-historyではbashCtrl-P, down-historyではCtrl-N相当の機能を実行することができ、bindkeyと共に使うことでショートカットキーとして割り当てることができる。 以下がそのコード例

bindkey -M vicmd '^P' up-history
bindkey '^P' up-history

bindkey -M vicmd '^N' down-history
bindkey '^N' down-history

-M vicmdというのはviキーバインドのコマンドモードにいるときで-Mで何も指定されていないのはmainつまり、viキーバインドでは挿入モードにいるときである。 デフォルトのコマンドはman zshzleを読むと色々出てくる。

widgetの作成

up-historydown-historyを実行する要領でユーザー定義のコマンドを実行することができる。 たとえばlsコマンドを頻繁に使うなら以下のように書くとCtrl-Zでlsを実行することができる。

function list_files() {
    echo; /bin/ls -a; echo
    zle reset-prompt
}
zle -N list_files
bindkey -M vicmd '^Z' list_files
bindkey '^Z' list_files

同様にgit statusをつい癖で実行しがちな人なら以下のように記述することでショートカットを割り当てることができる。

function git_status() {
    /usr/bin/git status
    zle reset-prompt
}
zle -N git_status
bindkey -M vicmd '^G' git_status
bindkey '^G' git_status

cd ..なんかもよく使うと思うのでpushd ..popdもショートカットとして登録できる。

function cd_parent() {
    pushd ..
    zle reset-prompt
}
zle -N cd_parent
bindkey -M vicmd '^K' cd_parent
bindkey '^K' cd_parent

function cd_back() {
    popd
    zle reset-prompt
}
zle -N cd_back
bindkey -M vicmd '^B' cd_back
bindkey '^B' cd_back

おわりに

このように頻繁に使うコマンドにショートカットキーを割り当てておくといちいちエンターキーを押さずに作業ができるので作業が捗るかもしれない。 便利なコマンドの割り当て方やその他有用なzshの機能があればコメントをお待ちしています。