
付録にあるような 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 ------------
No.1ベストアンサー
- 回答日時:
> n<88>,d<e2>,r<a1>,l<88> になってしまいます。
これ見てピンときたので
> let @" = s:strSpecialKanjiStt[(2*l:inPosAt) : (2*l:inPosAt+1)]
> let @* = @"
を *3 に直せばとりあえずは動いたけど。キーワードは utf8
let @" = s:strSpecialKanjiStt[(3*l:inPosAt) : (3*l:inPosAt+2)]
if has("clipboard")
let @* = @"
endif
この回答への補足
返答が遅れて失礼しました。回答が得られないと思い込んでいました。
御指摘どおりにすることで Ubuntu でも vim script を意図どおりに動作させられるよ
うになりました。
今回のことから Vim は漢字を扱うとき uft-8 や cp932 のバイト列として扱っているの
だと分かりました。 unicode で統一的に扱っているのではないと分かりました。意外で
した。
この問題では 10 日以上、色々と調べ試していたのですが、ご指摘の点には気付けませ
んでした。本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- Visual Basic(VBA) 順列をランダムに発生するプログラム 1 2022/11/16 12:16
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
Geminiフォーム 画像生成で 人...
-
画像生成AIのプロンプトの作り...
-
数学、プログラミング、物理、...
-
CSVファイルの複数行削除
-
VBAでパワーシェルを実行したい...
-
OS入ってる機器のソフト・アプ...
-
初心者powershellのPS1ファイル...
-
プログラミング言語のバージョ...
-
pythonについて(初心者です)
-
プログラミングに興味があるの...
-
Python... 環境設定 初心者です...
-
pip --versionがエラーになる
-
趣味がプログラミングだと言っ...
-
Pythonのエラーメッセージをコ...
-
pythonの実行に関する質問
-
パイソンのソースコードをChatG...
-
ネットワークフォルダの中身を...
-
ImageMagickでgif画像の一部が...
-
HTMLソースが表示のページのも...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
CSVファイルの複数行削除
-
OS入ってる機器のソフト・アプ...
-
Python 3.12.2 か一番最新のパ...
-
pythonの実行に関する質問
-
パイソンのソースコードをChatG...
-
画像生成AIのプロンプトの作り...
-
数学、プログラミング、物理、...
-
pip --versionがエラーになる
-
Google ColaboでGUI作成
-
Python... 環境設定 初心者です...
-
HTMLソースが表示のページのも...
-
ネットワークフォルダの中身を...
-
MOVEコマンドでサブフォルダー...
-
google Colabでmatplotlibの描...
-
VBAでパワーシェルを実行したい...
-
Pythonでの文字列からfloatへの...
-
Webサイト内に埋め込んだmp4動...
-
初心者powershellのPS1ファイル...
-
pythonについて(初心者です)
おすすめ情報