vim 快速開啟目錄下的檔案

用過 XCode 的 "shift+command+o" 快速開啟檔案後, 一直很想在 vim 內用同樣的功能。按個快速鍵會跳出一個輸入框, 接著只要打部份字串, 就會濾出有可能的檔案。

看到 DKcmd 推薦用 ctrlp, 就來試用一下。試用後感覺相當不錯, 用法如下:

  1. 在 command mode 打 ctrl+p
  2. 打檔名
  3. 選定檔案, 按 ctrl+t 開在新分頁; 按 ctrl+v 開在目前分頁的新 window; 按 enter 開在目前分頁

ctrlp 除介面好用外, 另一大優點是使用 pure vim script, 理論上有 vim 的平台都能用 ctrlp。不過最近用一陣子後發覺一些小問題, 微調之後才會更好用。

在 $HOME/.vimrc 中加上這幾行:

  • let g:ctrlp_clear_cache_on_exit = 0 " 離開 vim 後不要清 cache
  • let g:ctrlp_max_files = 1000000 " 加大 cache 索引的檔案數, 否則會漏找檔案
  • let g:ctrlp_user_command = 'find %s -type f' " 使用 find 加速建索引的速度

備註: 無用的實驗觀察

之前沒讀完官網, 漏看了參數 g:ctrlp_user_command, 只好自己手動建索引加速, 下面的心得就當紀念吧。

另外 cache 預設存放在 $HOME/.cache/ctrlp 下, 若嫌 ctrlp 建 cache 太慢, 可以自己手動建:

$ cd /path/to/target
$ index=$(echo `pwd` | sed 's#/#%#g' | sed 's#$#.txt#')
$ find . | cut -b 3- | LC_ALL=C sort > $HOME/.cache/ctrlp/$index

自己建會快超多, 不過會比較不乾淨一點, ctrlp 似乎有濾掉不能開的檔案, 像是目錄或圖檔之類的。

留言

這個網誌中的熱門文章

virtualbox 使用 USB 裝置

如何 git merge 更改檔名的檔案

熟悉系統工具好處多多