※ ChatGPTを利用し、要約された質問です(原文:Ubuntu に移植した vim script の)
UbuntuでVim scriptを使ってギリシャ文字の漢字コードを入力する方法
このQ&Aのポイント
UbuntuでVim scriptを利用してIMEを介さずにギリシャ文字の漢字コードを入力する方法について説明します。
数式を手早く記述するためにVim scriptを使用しています。具体的な操作は、Vim input modeでギリシャ文字に対応するアルファベットの直後にカーソルを置き、Ctrl-A Ctrl-G操作をすることで、その英語アルファベットをギリシャ文字に変更します。
しかし、UbuntuでこのVim scriptを実行した際に問題が発生し、ギリシャ文字の代わりに文字化けが表示されます。原因は不明ですが、OSの設定やフォントなどに問題がある可能性があります。
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 ------------
補足
返答が遅れて失礼しました。回答が得られないと思い込んでいました。 御指摘どおりにすることで Ubuntu でも vim script を意図どおりに動作させられるよ うになりました。 今回のことから Vim は漢字を扱うとき uft-8 や cp932 のバイト列として扱っているの だと分かりました。 unicode で統一的に扱っているのではないと分かりました。意外で した。 この問題では 10 日以上、色々と調べ試していたのですが、ご指摘の点には気付けませ んでした。本当にありがとうございました。