Group 是什麼
cycle.vim 搜尋相關候選字時
(例如目前是 true,應該要找到 false),會在一連串的 group 中查詢;
每個 group 是由 items 和 options 組成,以下便是一個簡單 group:
{ 'items': ['true', 'false'], 'options': {} }
如果想讓 foo 變成 bar,增加一個 items 為 ['foo', 'bar']
的 group 就可以了。
怎麼設定 group
使用中的 groups 會存在 cycle_groups 這個變數,可以用 :echo string(g:cycle_groups)
查看;
但是這東西比較繁瑣,所以不建議直接修改它的值。
比較好的方式是在 .vimrc 定義 g:cycle_default_groups
這個變數,
cycle.vim 啟動時會自動解析它,把需要的 group 都建好。
具體例子如下:
let g:cycle_default_groups = [ \ [['true', 'false']], \ [['yes', 'no']], \ [['on', 'off']], \ [['+', '-']], \ [['>', '<']], \ [['"', "'"]], \ [['==', '!=']], \ [['0', '1']], \ [['and', 'or']], \ [['in', 'out']], \ [['up', 'down']], \ [['min', 'max']], \ [['get', 'set']], \ [['add', 'remove']], \ [['to', 'from']], \ [['read', 'write']], \ [['save', 'load', 'restore']], \ [['next', 'previous', 'prev']], \ [['only', 'except']], \ [['without', 'with']], \ [['exclude', 'include']], \ [['width', 'height']], \ [['asc', 'desc']], \ [['是', '否']], \ [['上', '下']], \ [['男', '女']], \ [['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', \ 'Friday', 'Saturday'], ['hard_case', {'name': 'Days'}]], \ [['{:}', '[:]', '(:)'], 'sub_pairs'], \ [['(:)', '「:」', '『:』'], 'sub_pairs'], \ ]
可以只為特定檔案類型設 group 嗎
cycle_groups 可以分成 global 和 buffer 兩個 scope(作用範圍)的版本,分別是 g:cycle_groups 和 b:cycle_groups 兩個變數。 搜尋的時候會以 buffer 版為優先,你可以讓 "get" 在 html 類型的 buffer 中轉為 "post",在其他類型 buffer 中則轉為 "set"。
設定方式是在 .vimrc 定義 g:cycle_default_groups_for_{filetype},其中 {filetype} 表示想生效的檔案類型。
例如 html 專用的設定是:
let g:cycle_default_groups_for_html = [ ...(後略)
註:可以用 :echo string(b:cycle_groups)
檢查設定。
調整 group 行為
Group 的行為可以用 options 微調。目前(version 0.1.0)支援的選項如下:
-
name
名稱,目前沒什麼用,只有處理衝突時(在多個 group 都有搜尋到目標字時)會顯示一下。
-
match_case
搜尋候選字時,大小寫預設是不計的,所以 True、true 和 trUe 都會被 cycle,只要設定其中一個即可。
反之若要限制大小寫相符才 cycle,就要設定這個選項。 -
hard_case
預設情形會保留關鍵字的大小寫位置,也就是 true/false 互換時,True 會變成 False、tRUe 會變成 fALse。
這個選項可以停用此功能,互換時「若設定中是寫 fAlse,就一律換成 fAlse」。 -
sub_tag
如果開啟這個選項,cycle.vim 會搜尋成對的 xml 開啟/結束標籤,有的話就一起 cycle 掉。
例如<EM>example</EM>
可以變成<STRONG>example</STRONG>
。 -
sub_paris
這個比較特別,它是 sub_pair、end_with 和 begin_with 三個選項的簡易寫法,具體請看 doc。(建議用 sub_pairs 即可)
以
[['(:)', '「:」'], 'sub_pairs']
為例, 各個 item 會由 ":" 拆開, (:) 會拆成 ( 和 ), 「:」 會拆成 「 和 」。
cycle.vim 處理 "(" 時,會搜尋成對的 ")",若有的話就一起 cycle,
例如(請保密)
可以變成「請保密」
。
具體要怎麼設定選項(options)
設定 group 時,每個 group 的第一個參數是 items,之後就都是 options 了。
支援以下各種型式:
-
[['true', 'false']]
- 沒有 options -
[['true', 'false'], {'match_case': 1}]
- 以 hash 型式指定 options -
[['true', 'false'], 'match_case']
- options 可以是字串,cycle.vim 會把它轉成 hash,hash 的預設值依各個 option 而不同,此處 'match_case' 的預設值為 1 -
[['true', 'false'], 'match_case', {'name': 'BOOL', 'sub_tag': 1}, 'hard_case']
- 字串和 hash 混著用也沒關係
你說完了沒
這篇應可滿足一般使用,我自己用到的也差不多這樣了。
在 doc 裡一些比較深入、低階的操作也有介紹,需要的話可以參考看看。
有 0 個意見
☂