要怎麼把 Yes 換成 No? 標準答案是 ciw 再輸入 "No"。

更快的方法是寫 script 處理,很久以前看到一篇 Toggling yes-no, 把常用組合先定義好,只要一個鍵就能把 Yes 換成 No,再按一次就換回來,真是聰明啊~ 這方法我用了很久,當時改出來的設定如這個 gist

因為覺得方便,又有蠻多地方想改善,所以打算寫成 plugin。
搜尋 toggle 才發現真多人寫過,不過似乎大同小異,除了 SwapIt.vim

  • 用 visual 選起來,就可以處理含空白的 some words(原本的實作方式辦不到)。
  • 可以把 <H1>example</H1> 變成 <H2>example</H2>(一次換掉前後 tag)。
  • 可以吃 omni-completion 的結果,所以不必額外設定,就知道 CSS display block 可以換成 inlinenone 等等。
  • 其它。

我比較同意 SwapIt 的設計,認定 swap 這個功能,用力加強它。
SwapIt 的問題是實作還未成熟,所以我也 fork 它準備貢獻。 但是送第二個 pull request 前,覺得有點走不下去:

  • 繼續改下去,細部的實作幾乎都不一樣。
  • 重寫比重構簡單。
  • 在使用者立場,我想像的 interface 是另一番面貌,向前相容顯得多餘。
  • 我想全權處理所有問題。

另外對 SwapIt 這個名字也有點在意,至少我搜尋的時候就沒想到 swap 這關鍵字。
想起來最適合的字是 Cycle(因為是在一組字中循環,例如 top right bottom left),但是在 GitHub 一搜就發現已經有同名 plugin 了 ——zef/vim-cycle——很精簡,程式聰明漂亮,可惜作者太忙比較沒空更新。


結果我的 plugin 還是叫 cycle,這樣好嗎?

我把碰到的困難告訴兩位開發者 Michael BrownZef,他們都很開放,表示基本上不介意我這麼做(我想還是有點情緒干擾吧); 而雖然大家目標類似,但個人考量的點(有趣的是想法從 coding style 與用法設計就看得出來)還是不容易統合,變成一個專案。

這種情況下,我就先開發再說了,把手上的問題解決。

目前 0.1.0 版本已經是堪用階段: bootleq/vim-cycle - GitHub
之後會再寫一篇簡易使用說明。