■ Windows Subsystem for Linux の Emacs で利用できる設定
【お知らせ】
<2021/02/05 追記>
本ページの内容は WSL2 でも動作します。DrvFs や VolFs の記載がある場合には、Windows 側のファイルシステム、WSL2 側のファイルシステムと読み替えてください。
<2018/08/28 追記>
Cygwin での locate の利用については、こちらを参照ください。
【本題】
Ubuntu on WSL で locate を利用するための設定です。
Ubuntu の locate には次のページで説明されているとおり、2つのパッケージがあります。
デフォルトでは、mlocate がインストールされていますが、mlocate の updatedb は複数の database root パスを指定できないため、使いづらいです。
このため、locate.findutils をインストールします。
$ sudo -E apt install locate
$ sudo update-alternatives --config locate # locate.findutils を有効にする
つぎに、locateを使うためのDBを以下のようなスクリプトを実行して作成します。updatedb のオプションは、適当に修正してください。
~/bin/updatedb.sh
#!/bin/sh
sudo updatedb \
--localpaths='
/mnt/c/home
/mnt/d/home
/mnt/server/home
' \
--findoptions='
-type d -name .git -prune -o
-type d -name .svn -prune -o
-path /mnt/c/home/tmp -prune -o
-path /mnt/d/home/tmp -prune
'
findoptions の設定の意味は、次のとおりです。
一行目:ディレクトリ.git は含めない
三行目:/mnt/c/home/tmp で始まるパスは含めない
これで、shell から locate <検索文字列> と入力して、検索が可能となります。
Emacs からは、M-x locate で実行できます。
※ locate の検索に時間が掛かる場合は、データベース化するディレクトリの範囲を絞ってください。
検索結果は、dired のように、Enter や f が利用可能ですが、以下の設定を行っておくと、より便利に利用できます。
(require 'locate)
;; ファイルのあるディレクトリを Explorer で開く
(define-key locate-mode-map (kbd "E")
(lambda ()
(interactive)
(os-open-command (locate-get-dirname))))
;; ファイルのあるディレクトリを dired で開く
(define-key locate-mode-map (kbd "d")
(lambda ()
(interactive)
(dired (locate-get-dirname))))
;; C-c l で locate を起動する
(global-set-key (kbd "C-c l") 'locate)
locate は helm とも連携できます。
;; locateコマンドのパラメータを指定する
(setq helm-locate-command "locate %s -A --regex %s")
※ helm の設定については、次のページを参照してください。
<変更履歴>
最終更新:2021年02月05日 09:38