くふんを狙え(vimグループ) このページをアンテナに追加 RSSフィード

くふんを狙え

 | 

2008-07-24

skk.vimにsticky-shiftぽい機能を追加してみた

19:03 | skk.vimにsticky-shiftぽい機能を追加してみた - くふんを狙え(vimグループ) を含むブックマーク はてなブックマーク - skk.vimにsticky-shiftぽい機能を追加してみた - くふんを狙え(vimグループ) skk.vimにsticky-shiftぽい機能を追加してみた - くふんを狙え(vimグループ) のブックマークコメント

skk.vimを改良しようと思った。

SKKVimのようにモードを持つFEPなのに、なぜだかひどくマイノリティ。きっと、なにかが足りないからに違いない。とりあえず、気になったところから手をつけていくことにした。

はじめに気になった点は、

  • 起動やひらがなモードへの切り替えに使う「<C-j>」、
  • 変換開始や送り仮名ごとに強制される「Shiftキー」

の二つ。<C-j>はいい対処法が思い浮かばないので、Shiftキーの対処法としてよく言われる sticky-shift を実装することにした。

本家のSKKではsticky-shiftな機能が実装されているみたいだけど、skk.vimでは実装されていないみたい。先日のVimMで何度か名前が出た「窓使いの憂鬱」を使ってもいいが、それだとVim全体に適用されたりでイマイチだ。

というわけで、今回はskk.vimにsticky-shiftぽい機能を追加することにした。

ちなみにオリジナルのskk.vimに対して上位互換性を保っているはずなので、skk.vimを使っている方は是非試してみてほしい。

使い方としては、パッチを当てたskk.vimを普段通りに:sourceしたあと、vimrc に以下の一行を追加するだけ。

let g:skk_sticky_key = ';' 

これで、;を前置すれば、変換開始や送り仮名の開始位置を指定できる。

--- skk.vim
+++ skk.vim.new
@@ -1463,6 +1463,25 @@
     try
       if b:skk_henkan_mode == 3
 	return SkkHenkan(a:char)
+      elseif exists('g:skk_sticky_key') && b:skk_henkan_mode == 0
+	    \ && a:char == g:skk_sticky_key
+	" krogue-sticky: ■→▽
+	return SkkSetHenkanPoint('')
+      elseif exists('g:skk_sticky_key') && b:skk_henkan_mode == 1
+	    \ && a:char == g:skk_sticky_key
+	" krogue-sticky: ▽→▽(送り)
+	if !s:SkkCheckMarker(g:skk_marker_white, b:skk_hstart)
+	  let b:skk_henkan_mode = 0
+	  throw "skk cannot find " . g:skk_marker_white . " mark"
+	endif
+	if b:skk_rstart == 0 || b:skk_line != s:SkkCursorLine()
+	  let b:skk_line = s:SkkCursorLine()
+	  let b:skk_rstart = s:SkkCursorCol()
+	endif
+	let b:skk_ostart = b:skk_rstart
+	let b:skk_rstart = b:skk_rstart + strlen(g:skk_marker_okuri)
+	let b:skk_henkan_mode = 2
+	return g:skk_marker_okuri
       elseif stridx(g:skk_henkan_point_keys, a:char) != -1 && b:skk_abbrev_mode_on == 0
 	return SkkSetHenkanPoint(a:char)
       elseif b:skk_henkan_mode == 1 && a:char ==# g:skk_start_henkan_key

このバージョンは古いです。連続押下や「ん」を考慮した修正版を公開しています。

 | 
最近のコメント
最近のトラックバック
カレンダー
<< 2008/07 >>
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
カウンター
96397