このエントリは,以下のエントリのfish版になります.
私もzshを使っていた際には,cd
で複数階層上に移動するのを簡単にするため
alias -g ...='../..'
alias -g ....='../../..'
のようなグローバルエイリアスを設定していました.
fishでもこれと同様のことをしたかったのですが
- fishにそもそもグローバルエイリアスがない
ことに加え,仮に...
を解釈可能なようにcd
を再定義1しても
-
...
それ自体は無効なパスなので,補完が効かない - fishは標準でシンタックスハイライト有効なので
...
がエラーとして色付けされてしまう2
という問題がありました.
しかし元エントリを見て,この方法ならfishでも上手くいく! と気付き,さっそく真似してみました.
replace_multiple_dots.fish
function replace_multiple_dots
set -l token (string match '*..' -- (commandline -tc))
if test -d "$token"
commandline -i '/..'
else
commandline -i '.'
end
end
まず上記の関数を定義.その後fish_user_key_bindings
関数内に以下を追加します.
fish_user_key_bindings
bind '.' replace_multiple_dots
ちょっとアレンジした点として,入力中の語が実在するパスでない場合は,普通に連続した.
が打てるようになっています.
cd .. # <- ここで.を打つとcd ../..に展開
echo "...." # <- パスの一部でないときは普通に.が連打できる
これでfish
でも,簡単に階層移動できるようになりました.
-
...
を解釈可能なように再定義されたcd
がoh-my-fishのプラグイン(oh-my-fish/plugin-cd)として存在します. ↩ -
別に実害はないのですが,エラーの色付けされているコマンドが実行できてしまうのがなんとなく気持ち悪かったです. ↩