#はじめに
wsl2もfzfも便利ですよね。
特にfzfはcdrと組み合わせて履歴からディレクトリ移動できるようになると、ディレクトリ移動が爆速になります。
※参考
https://www.rasukarusan.com/entry/2018/08/14/083000
# fzf-cdr
alias cdd='fzf-cdr'
function fzf-cdr() {
target_dir=`cdr -l | sed 's/^[^ ][^ ]* *//' | fzf`
target_dir=${target_dir/\~/$HOME}
if [ -n "$target_dir" ]; then
cd $target_dir
fi
}
ただ、これには問題があり、名前にスペースがあるディレクトリに移動しようとすると
no such file or directory:
と怒られてしまいます。
名前にスペースがあるディレクトリなんて作らなければいいじゃんと思うのですが、、、
会社などの組織で利用しているOneDriveと同期させたフォルダは"OneDrive - 組織名"となってしまい、スペースが入ってしまいます。
私は頻繁にwsl2からOneDrive上のフォルダにアクセスするのでfzf-cdrできないのは手間です。
#調査
# スペース入りのディレクトリを作成しみる。
mkdir test1\ 2
# cdで入ってみる。
cd test1\ 2
# OK
dir='test1\ 2'
cd $dir
# NG
dir='test1 2'
cd $dir
# OK
どうやら、cdに直接打ち込む場合はスペースの前にエスケープが入りますが、
変数で指定する場合はエスケープは不要のようです。
#解決策
# 修正後
# fzf-cdr
alias cdd='fzf-cdr'
function fzf-cdr() {
target_dir=`cdr -l | sed 's/^[^ ][^ ]* *//' | fzf`
target_dir=${target_dir/\~/$HOME}
target_dir=${target_dir//\\/}
if [ -n "$target_dir" ]; then
cd $target_dir
fi
}
解決策としては、単純ですがエスケープを取り除く処理を一文つけたしました。
これでちゃんと、wsl2からOnedrive上のフォルダにアクセスできるようになりました。