monday.vim : Ctrl-a、Ctrl-xで曜日、月をループ (+他の用途への応用)
Ctrl-a、Ctrl-xで数字をインクリメント、デクリメントできる機能のように、 曜日、月をインクリメント、デクリメントすることのできる機能を提供します。 (Windows, Mac)
概要
monday : Lets you use ctrl-a and ctrl-x on names of months and weekdays
http://www.vim.org/scripts/script.php?script_id=1046
Ctrl-a、Ctrl-xで、曜日、月をインクリメント、デクリメントできる機能を提供するvimスクリプトです。
インストール方法
スクリプト をダウンロードして、
そのスクリプトをpluginディレクトリにコピーして下さい。
ファイル | URL |
---|---|
monday.vim | http://www.vim.org/scripts/script.php?script_id=1046 |
使い方
現在のバージョン(2004/09/13)で対応しているのは、
曜日
monday、tuesday、wednesday、thursday、friday、saturday、sunday
月
january、february、march、april、may、june、july、august、september、october、november、december
です。
これらの単語の上で、
- Ctrl-aを押すと、1つ先の曜日、月に変更し、
- Ctrl-xを押すと、1つ前の曜日、月に変更します。
なお、このスクリプトは、大文字小文字の構成もなるべく確保してくれます。
- monday → tuesday (全部小文字の場合)
- Monday → Tuesday (先頭の文字だけ大文字の場合)
- MONDAY → TUESDAY (全部大文字の場合)
と変換します。
拡張
このスクリプトを拡張して、スクリプトが現在対応していない変換パターンを追加してみましょう。
変換パターンを追加するには、今の所、スクリプトを直接編集するしか方法はありません。 スクリプトをエディタで開いて、スクリプト内の変換パターンを定義している箇所にコードを追加します。
下の行の後に、パターンを追加していきます。
:call <SID>AddPair("december", "january")
曜日、月の省略形の変換パターンの追加
下のコードをスクリプト内のパターン定義箇所に追加してください。
:call <SID>AddPair("mon", "tue") :call <SID>AddPair("tue", "wed") :call <SID>AddPair("wed", "thu") :call <SID>AddPair("thu", "fri") :call <SID>AddPair("fri", "sat") :call <SID>AddPair("sat", "sun") :call <SID>AddPair("sun", "mon") :call <SID>AddPair("jan", "feb") :call <SID>AddPair("feb", "mar") :call <SID>AddPair("mar", "apr") :call <SID>AddPair("apr", "may") :call <SID>AddPair("may", "june") :call <SID>AddPair("june", "july") :call <SID>AddPair("july", "aug") :call <SID>AddPair("aug", "sep") :call <SID>AddPair("sep", "oct") :call <SID>AddPair("oct", "nov") :call <SID>AddPair("nov", "dec") :call <SID>AddPair("dec", "jan")
may、june、julyは、省略前と省略後でスペルが同じなので、組み込むことはできませんでした。
この場合、例えば「july」の次の月が「august」になるか、「aug」になるか、スクリプトからでは区別できないからです。
つまり、こういう状況が発生するような場合、変換パターンを追加することはできません。
このスクリプトのプログラマ的応用
変換パターンは、別に曜日、月など、時間に関わるものである必要はありません。
例えば、Javaプログラマなら
public ←→ protected ←→ private ←→ public ......
という変換パターンとか。
:call <SID>AddPair("public", "protected") :call <SID>AddPair("protected", "private") :call <SID>AddPair("private", "public")
true ←→ false、yes ←→ no、on ←→ off という変換パターンとか。
:call <SID>AddPair("true", "false") :call <SID>AddPair("false", "true") :call <SID>AddPair("yes", "no") :call <SID>AddPair("no", "yes") :call <SID>AddPair("on", "off") :call <SID>AddPair("off", "on")
いろいろ考えられそうです。
Recent Comments
ありがとうございます!
http://nanasi.jp/articles/howto/editing/visualcursor-endtoend.html · 7 years ago
知りませんでした。有難うございました。
http://nanasi.jp/articles/howto/file/open-with-format.html · 9 years ago
<c-f>1ページ分、下にスクロールする<c-b>1ページ分、上にスクロールする
どっちも逆です。
http://nanasi.jp/articles/howto/user-manual/user-manual-motion.html · 10 years ago
set 使用時に : で閉じるのを忘れて右往左往してました。
http://nanasi.jp/articles/howto/file/modeline.html · 10 years ago
やっぱり日本語の方が早いっす。
http://nanasi.jp/articles/howto/help/help_ja.html · 11 years ago