zshにショートカットを追加してターミナル操作を便利にする
zshにユーザー定義のショートカットキーを追加してみました。
はじめに
他のシェルにはあるかわからないが、zshではユーザーがキーバインドを設定することで機能を拡張することができる。 また、emacs, vimのキーバインドを選択することができる。
bindkey -v
とする。
zshzle
zshzle (zsh command line editor)に手を加えることでショートカットを使ったシェルの操作をすることができる。
例えば、up-history
ではbashのCtrl-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-history
やdown-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の機能があればコメントをお待ちしています。