Ubuntu に移植した vim script の
付録にあるような Vim script を Windows で使っています。Vim7.3 Kaoriya です。IME
を介すことなくギリシャ文字の漢字コードを書くためのスクリプトです。数式を手早く
記述するために使っています。Vim input mode で、ギリシャ文字に対応するアルファ
ベットの直後にカーソルを置いておき ctrl-a ctrl-g 操作をすることで、その英語アル
ファベットをギリシャ文字に変更します。
数式記述のため ∇□∂△ の記号も入力できるようにしています。n`,d`,r`,l` の文字
の直後にカーソルを置いておき、 ctrl-a ctrl-g 操作をすることで、その対応する漢字
記号に変更します。
WindowsXP, Windows7 で、この Vim script を動かしています。
この Vim script を VMware Player(versio 5.01) 上の Ubuntu で動かそうとしていま
す。Ubuntu の Vim もバージョンは 7.3 です。apt-get で取り込みました。
しかし Ubuntu 側で問題が出ました。 ∇□∂△ の記号を入力しようとして
n`,d`,r`,l` の直後で ctrl-a ctrl-g 操作をすると、漢字記号ではなく
n<88>,d<e2>,r<a1>,l<88> になってしまいます。この誤動作の原因が分からなくて困っ
ています。
正しく動いたこともあるので、Vim script の誤りというより OS 側も含めた設定による
ものだと推測しています。.givmrc の漢字フォントとが原因かもと思い、set
guifont=VL\ ゴシック\ 11 を set guifont=Takaoゴシック\ 11 に変更してみましたが
同じ現象でした。
VMware, Linux を使い始めたのは今年の初めからであり、設定でミスをやらかしている
可能性は高いと思います。
このような状況ですが、原因らしいものを指摘願えますでしょうか。よろしくお願いし
ます。
------------ code begin ------------
let s:strAlphLowerStt = "abgdezhqiklmnxoprstufcyw"
let s:strGreekLowerStt = "αβγδεζηθικλμνξοπρστυφχψω"
let s:strAlphUpperStt = "ABGDEZHQIKLMNXOPRSTUFCYW"
let s:strGreekUpperStt = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"
let s:strSpecialSymbolStt = "ndrl"
let s:strSpecialKanjiStt = "∇□∂△"
function! s:ConvertAlpbt2Greek()
let l:strAt = getline(".")
let l:inPosAt = col(".")
if l:inPosAt > len(l:strAt)
let l:inPosAt = len(l:strAt)
let l:chAt = l:strAt[l:inPosAt-1]
else
let l:chAt = l:strAt[l:inPosAt-2]
endif
if l:chAt == "`"
if inPosAt >= 2
let l:chAt = l:strAt[l:inPosAt-2]
"debug
"echo l:chAt
if l:chAt == "`"
let l:chAt = l:strAt[l:inPosAt-3]
endif
let l:inPosAt = match(s:strSpecialSymbolStt, l:chAt)
"debug
"echo l:inPosAt
if l:inPosAt >= 0
if l:chAt == s:strSpecialSymbolStt[l:inPosAt]
let @" = s:strSpecialKanjiStt[(2*l:inPosAt) : (2*l:inPosAt+1)]
let @* = @"
return "\<ESC>phhxx`]a"
endif
endif
endif
return ""
endif
let l:inPosAt = match(s:strAlphLowerStt, l:chAt)
" AND (char2nr(l:chAt) >= 97) is a countermeasure
" for match("abgdezhqiklmnxoprstufcyw", "G") == 2
if (l:inPosAt >= 0) && (char2nr(l:chAt) >= 97)
let @" = s:strGreekLowerStt[(2*l:inPosAt) : (2*l:inPosAt+1)]
let @* = @"
return "\<ESC>phx`]a"
endif
let l:inPosAt = match(s:strAlphUpperStt, l:chAt)
if (l:inPosAt >= 0) && (char2nr(l:chAt) <= 90)
if l:inPosAt >= 0
let @" = s:strGreekUpperStt[(2*l:inPosAt) : (2*l:inPosAt+1)]
let @* = @"
return "\<ESC>phx`]a"
endif
endfunction
inoremap <expr> <C-a><C-g> <SID>ConvertAlpbt2Greek()
------------ code end ------------