zshで「!」をaliasしたい
コマンドラインで作業してて、
$ vim very_very_long_name_file.py
みたいなのを何度も打つことになるとシンドイ。なので
$ !v
をよく使ってたけど、!
を打つのすらめんどくさい気がしてきたのでもういっそ
$ v
だけで!v
と同じ動作をしてほしくなった。
じゃあといってzshrcに以下を書いてみたところ、動かなかった。
alias v=!v
シェルのこととか何もわからないけど、見る人が見れば当たり前なんだろうと思う。
とりあえずこれを力ずくで実現するためにzshrcに以下を書いたのでメモ。
alias v='$(fc -ln 1 | grep "^v." | tail -1 | sed -e "s|~|$HOME|")'
もっとスマートな方法がある気がするので知りたい。
一度きっちり勉強しなきゃならんなぁという感じ。
簡単な解説↓
fc -ln 1
: コマンドヒストリーを表示
grep "^v."
: vから始まって2文字以上のコマンド(.を入れないと二回目からv
がヒットしてしまう)
tail -1
: 該当するうち一番新しいもの
sed -e "s|~|$HOME|"
: ~があるとうまく動かなかったので置換。仕組みを理解していない