もた日記

くだらないことを真面目にやる

Fasdコマンドで最近使ったファイルとディレクトリに素早くアクセス

github.com

Fasd(発音はfastに似ているということなので、ファースド?ファスド?)は作者の説明によるとautojumpzのようなコマンドラインの生産性を上げるツールで、よく使うファイルとディレクトリに素早くアクセスできるようになる。
Fasdはアクセスしたファイルとディレクトリの情報を記録しておき"frecency"というランク付けをする。"frecency"は"frequency"と"recency"を併せた造語で、頻繁かつ最近アクセスしたものほど高ランクになるらしい。

インストール


Fasdコマンドのインストール方法は下記ページに書かれている。
Installing via Package Managers · clvv/fasd Wiki · GitHub

CentOSの場合はRPMパッケージをインストール。

$ sudo rpm -ivh https://build.opensuse.org/package/binary/utilities/fasd\?arch\=x86_64\&filename\=fasd-1.0.1-3.1.noarch.rpm\&repository\=CentOS_6

Macの場合はbrewでインストール。

$ brew install fasd


次に初期設定コードを追加するが、oh-my-zshを使っている場合は.zshrcを編集してプラグインを有効にすればよい。

plugins=( [plugins...] fasd)

oh-my-zshを使っていない場合は.zshrcに下記行を追加する(最小限の設定)。

eval "$(fasd --init posix-alias zsh-hook)"


これでFasdコマンドが使えるようになる。

$ fasd --help
fasd [options] [query ...]
[f|a|s|d|z] [opions] [query ...]
  options:
    -s         list paths with scores
    -l         list paths without scores
    -i         interactive mode
    -e <cmd>   set command to execute on the result file
    -b <name>  only use <name> backend
    -B <name>  add additional backend <name>
    -a         match files and directories
    -d         match directories only
    -f         match files only
    -r         match by rank only
    -t         match by recent access only
    -R         reverse listing order
    -h         show a brief help message
    -[0-9]     select the nth entry

fasd [-A|-D] [paths ...]
    -A    add paths
    -D    delete paths


基本的な使い方


Fasdをインストールすると以下のエイリアスが設定されている。

alias a='fasd -a'        # any
alias s='fasd -si'       # show / search / select
alias d='fasd -d'        # directory
alias f='fasd -f'        # file
alias sd='fasd -sid'     # interactive directory selection
alias sf='fasd -sif'     # interactive file selection
alias z='fasd_cd -d'     # cd, same functionality as j in autojump
alias zz='fasd_cd -d -i' # cd with interactive selection

Fasdは履歴を使用するため、まずはテストとして適当にディレクトリを移動したり、ファイルを編集しておく。
fを実行すると最近使ったファイル、dを実行すると最近使ったディレクトリ、aを実行すると両方が表示される。ここで表示される数値は最近、頻繁に使用したものほど高くなり、この後説明するコマンドでマッチするものが複数ある場合に数値が高い方が優先される。

f:id:wonder-wall:20160626133048p:plain

ディレクトリ移動

ディレクトリ移動するにはzを実効する。上記のような状態でz fasdを実行するとfasdがマッチする.oh-my-zsh/plugins/fasdディレクトリに移動する。z fのようにマッチすれば一文字でもよい。またz p fのように各階層の文字列を指定することもできる。

f:id:wonder-wall:20160626135306p:plain

zzを実行するとインタラクティブディレクトリを選択でき、番号を指定してリターンを押せば移動できる。

f:id:wonder-wall:20160626134456p:plain

ファイルアクセス

同様な方法でファイルにもアクセスできるが、ファイルの場合は選択したファイルに対して何かを実行したいので-eオプションでコマンドを指定する。
f -e vim rc$を実行すればrcで終わる($は末尾指定)最近使用したファイル(この場合は.zshrc)をvimで編集できる。
このコマンドは長いので通常はエイリアスを指定してv rc$のように実行する。

f:id:wonder-wall:20160626140705p:plain

タブ補完


Fasdではタブを押せば補完ができる。以下の例のようにd,を指定すればディレクトリ、f,を指定すればファイル、,は両方を指定して補完が可能。

$ vim ,rc,lo<Tab>
$ vim /etc/rc.local

$ mv index.html d,www<Tab>
$ mv index.html /var/www/