我的 FuzzyFinder 壞掉了
忘了何時開始,本機 FuzzyFinder 初次打開時,如果前幾個字輸入太快,就會「過早自動完成」補成一條無效候選。
例如 FufFile
的 mapping 是 ,f 的話,輸入 ,ff 就會出現下圖狀況,非常惱人。
調查不出原因,只好放棄,反正沒人維護了,就跟 FuzzyFinder 說拜拜吧。
最後一張照片,親愛的 fuf
替代品當然是 unite.vim
之前寫過一篇簡介「試試新的萬能尋找器 unite.vim」,那時就它用來輔助 FuzzyFinder 了,選 action 的介面有時候真的比較方便,現成的實用 source 又多。
而且 2011 至今,幾乎每次跑 BundleInstall 都看到它在更新,相當驚人。 回報 bug 很快就會被處理,這點相當酷。
豪放的大視窗
Unite buffer 開出來整個外觀如下圖,分割位置、寬或高、buffer 名稱、訊息(兩行 [file_rec]
的部分)都可以調整。
輸入方式(narrowing 語法)的變更
需要重新習慣的不多:
- FuzzyFinder 以
;
分隔多個關鍵字,在 unite.vim 改用空白。 - 離開 Insert Mode 不會直接退出 unite buffer,要用另外的 mapping 才行。
而關鍵字與候選範圍的比對關係,在 unite.vim 被抽出為 matcher,可以用 unite#filters#matcher_default#use()
、unite#custom_source()
或 unite#set_substitute_pattern()
等方式作細部調整。
Matcher 可以換成 matcher_regexp、matcher_fuzzy、……,可惜文件不清,我只能邊改邊試。
set_substitute_pattern 可以做到輸入 $HOME
展開 $HOME,輸入 gem/
展開 ruby gem path,理論上應該能自由調整 narrowing 用語。
※我是參考這篇 unite.vim の設定を一部晒してみる - 永遠に未完成調的。
我的 mappings
註:我認為分享 key mapping 無聊透頂,尤其選的按鍵只是習慣、沒有語義,那你改個按鍵也要分享一篇嗎?
這裡只是形容一下操作的感覺,有些按鍵是預設的、沒改。
-
,ff - 開啟
Unite file
介面,由目前 buffer 所在目錄開始搜尋。 - ; - 在 unite buffer Insert Mode 向前刪除一個 word,反悔或打錯字時用。
- <Ctrl-J> 和 <Ctrl-K> - 移動到下一個/上一個候選。如果在 Insert Mode,會自動進入 Normal Mode,然後只要按 j k 就能上下移動。
- <Tab> - 對選中的項目,開始選擇 action。
- <CR> - 對選中的項目執行 default action,例如檔案的預設 action 我調成在新分頁開啟。
- ,<CR> - 對選中的項目執目第二 default action(目前 unite.vim 沒有所謂第二 action,要自己設 mapping),我設定成在目前分頁開啟檔案。
- <F5> - 在 unite buffer 中,重新整理,清除候選快取。
- ,q - 退出一層 unite buffer。
- ,Q - 退出全部 unite buffer。
API 與設定感覺
其實設計蠻漂亮的…… source、kind 是要處理的情境和候選物件類型, action 是要執行的動作, filter 包含 matcher、sorter、converter 的微調。 以上定義清楚,設定時的指令自然會乾淨,這部分做得不錯,比 FuzzyFinder 進步多了。
比較惱人的是文件趕不上開發速度,英文不太講究、repo 裡的 commit message 也敘述不清。 有點難搞。
目前常用的 source
※更多 source,參考 unite plugins · Shougo/unite.vim Wiki。
- file - 最常用的就是這個。
-
file_mru (most recent used files)
- register - 多行內容也能顯示喔。
- bookmark - 目錄、檔案、位置都通,比 fuf 方便。
-
help - 但要用 tags-caching 這個 branch 才有快取,否則實在太慢。
- session
- tab
-
outline - 有了這個,幾乎就沒在開 Tagbar 了(雖然我本來就少用 tag)。
還不大會用的其他功能
-
file_rec source
Fuf 要找深層目錄下的檔案,會使用
**/
查詢。 Unite.vim 也能使用**/
寫法,我一般用這個就 OK 了。而 unite.vim 還有專門做深層搜尋的 file_rec source,作者也經常磨亮這個功能。 不過目錄樹很大時,總是會跑到 too many candiates(預設 1000 項),加大快取數又要跑很久。 解法應該是用另外的 file_rec/async source,可以非同步發動更快的搜尋,但需要裝別的東西,我就沒試了。
-
Quick Match
類似 EasyMotion 的選擇法,打一個鍵就能對某個項目動作。 還沒想到要用在哪,也許適合用在 bookmark 吧。
總之一下子就能習慣,早就可以換了
我目前的設定放在 bootleq/vimrc_human/.vimrc#L808-923 at 500f59,沒什麼特別的,doc 裡也有範例,純擺設。