« 2013年4月 | トップページ | 2013年6月 »

2013年5月

2013年5月27日 (月)

[Vim]ダイグラフ(digraph)って何だろう?

Time-stamp: "Fri Jul 27 11:57:00 JST 2012"

§(セクションマーク)や¶(パラグラフマーク)などはキーボードから直接に 入力することができない。これらは日本語文で使われることもあるが元々は 舶来の記号である。キートップに刻印されていない記号は数多くある。おそ らく日本人なら、これらの特殊記号をかな漢字変換を使って入力するだろ う。さて、英語圏の人達はどうやってキートップにない特殊記号を入力する のだろうかと考えるとき、二文字の組み合わせとして特殊記号を入力する digraphを使うのだろうと気付く。

我々日本人は、特殊記号入力に、かな漢字変換という代替手段を持っている ためにダイグラフは馴染みがないのである。そのため「ダイグラフ」で検索 しても殆ど情報がない。「ダイグラフ vim」でグーグル検索するとvimのヘ ルプの翻訳版が引っ掛かるくらいで情報が少ない。キーワードを 「digraph」にして英語情報を検索したほうがよい。

私がvimにおけるdigraph入力を知ることになったのは、かな漢字変換のため のスクリプト(マクロ)skk.vimにおいて組み合わせキーのctrl+kがautofill にバインドされていることから芋蔓(いもづる)式に行き着いたものである。 このことがなければdigraphについて調べてみる気にならなかっただろう。 digraphを知らなくて困ったことはない。知ってしまえば、使えると便利と 感じるだろうが、知らないものは無くても不便とは思わない。かな漢字変換 という別ルートでこなせるからだ。

vim専用のかな漢字変換であるskk.vimでは、「きごう」に対する変換候補と して上記の特殊記号が現われる。これとは別に、かな漢字変換を使わなくて もこれらの記号を入力できる仕掛けが本来のvimに備わっている。それがダ イグラフ入力である。その方法は、先ずインサートモードでctrl+kを打ち、 それに続けてアルファベットや記号・数字などの二文字を連続入力すると特 殊な文字(記号)を出すことができる。例えば、「§」は「ctrl+k S E」で、 また「¶」は「ctrl+k P I」(大文字・小文字を区別する)で入力することが できる。

skk.vimのバージョン0.22では、ctrl+kがautofillにバインドされている。 設定が適切でないとautofillにはならない。ctrl+kを押すとカーソルの後ろ に「?」(疑問符)が表示される。skk.vimを使い始めたころは、この挙動が何 なのかが分からなかった。疑問符を消そうとdeleteキーを押す。そうすると 疑問符が文字列<Del>に変わって確定する。いったい何なのだろう。vimのヘ ルプを引こうにもキーワードを思い付かない。ヘルプは日本語化してあって も日本語のキーワードを受け付けてくれない。

グーグルでvimの使い方を検索してからvimのヘルプを読むという本末転倒な ことをやっている。おそらく日本語ワープロの一太郎を使っている人なんか も、分からないことはグーグルで検索しているのではなかろうか。ソフト付 属のヘルプを使うよりインターネットに相談したほうが速い。そして痒いと ころに手が届いた親切な説明が見つかる。ダイアルアップ接続でインター ネットに接続していた頃は接続の面倒と従量課金が頭をよぎり、よほど重要 でないかぎりインターネットで検索なんてゼイタクはできなかった。そもそ も検索サイトがなかった(少なかった)。今やインターネットの常時接続は当 たり前で、もはや常時接続という用語は死語になっている。なんとも便利な 時代になったものである。

私がパソコンを使い始めた1995年の頃のワープロソフト一太郎には電話帳く らいの大部なマニュアルが付属していた。当時はインターネット接続が一般 人にも手が届くようになったくらいの時代で、インターネットよりパソコン 通信のほうが盛んであった。先ずはパソコン通信を開通させて、それに慣れ たらインターネットを試すという順番だった。パソコン通信にはグーグルの ように便利な検索手段はなかった。一太郎の紙製のマニュアルを読んでも分 からないことはパソコン通信の会議室で質問するという時代である。次第に 一太郎のマニュアルは薄っぺらいものになり、現在では本物の電話帳みたい に希望しなければ付属しない(別売りの)時代になっている。分からないこと は周りの誰かか、またはグーグル先生に尋ねるのが普通になった。

skkを使い始めた後でskk.vim(0.22)はformat.vimを必要としていることを知 る。そして設定が適切であればskk.vimが起動しているときにctrl+kを押す とステータスラインに「FILL」の文字が現われることに気付く。この状態に なっていると日本語入力してゆきtextwide(省略形はtm)で設定された文字数 のところで自動的に改行文字が挿入されてカーソルが次行に移る。emacsで いうところのauto-fill-modeになる。

このautofillは、ワープロソフトのように、既存の行に文字列を挿入したり 消除したりで自動的に段落全体を詰め込むことはしない。その行の最終カラ ムに文字が入力されたら次の行を新設するだけである。既存行の最終カラム の文字を変更しない文字列の挿入や消除では、textwideに設定した文字数を 超えたり足りなかったりの行末が長短マチマチのデコボコになる。それをキ チンと一定文字数に揃えるには範囲を指定して整形コマンドを使うことにな る。

FILL状態にしていると入力行の最終カラムの次に自動的に改行文字が入るの は便利である。英語は空白で単語を区切る分かち書きなのでvim自体にそな わっている機能で自動的に改行文字が入り、残りの部分(行末からのはみ出 し)が次行送りされる。日本語はベタ書きなのでどこで改行文字を入れても 構わないが禁則処理は必要になる。開き括弧が行末に来ては困るとか小書き の「っ」が行頭にあっては見苦しいとかである。これらは英語向けのvimで は処理できない。その辺りを担当しているのがformat.vimになる。

skkを起動してない場合は、vim自体のキーバインドにより、ctrl+kは digraph入力になる。skk.vimが生きていると「l」による直接入力でも 「ctrl+j」によるかな漢字変換でもautofillになる。なお、skk.vimの最新 版(tyru版)ではctrl+kを押してもautofillにならないようである。

「:help digraph」(「:he digraph」に省略できる)でヘルプが読める。 skk.vimを使っているときはctrl+jでskkを停止させる必要がある。digraph 入力に入るためにctrl+kを使うからである。skkではctrl+kがautofillに キーバインドされている。

digraphの入力法には2つの方法がある。一つ目は、先ずctrl+kを押す。そう すると「?」(疑問符)が表示される。そうしたら「RT」のように二つの文字 を連続して入力する(大文字と小文字は区別される)。そうすると疑問符が 「√」(ルート記号、平方根号)に置き換わる。連続する二文字はasciiに限 られるからskkが起動していては不味い。またskkが起動していて「l」によ り直接入力状態であってもctrl+kがautofillにバインドされているなら digraph入力にならない(skk.vimのバージョンによりctrl+kがautofillにな らない)。その場合は疑問符が表示されてdigraph入力受け付け状態になる。

digraphの入力の二つ目の方法を使うにはdigraphオプションが設定されてい る必要がある。それが設定されているかどうかを見るには「:set all」また は「:set digraph?」を実行してみる。nodigraphが返ればdigraphオプション が設定されてない。それを設定するには「:set digraph」とする(digraphの 直後に疑問符が無いときはオプションの設定になる、疑問符があれば問い合 わせになる)。digraphオプションが設定されておれば「R <BS> T」(大文字 のR、バックスペース、大文字のT)の入力で「√」が入力される。

digraphで入力できる文字は「:digraps」で一覧表示される。積分記号の 「∫」は「ctrl+k I n」で入力できる。キーボードから入力できない文字を 扱えるようにするのがdigraphである。英語ならその必要がないけれどポン ドマーク「£」はキーボードに無い。これは「ctrl+k P d」で入力できる (ctrl+k $ $ でもよい)。

日本語文の二重かぎ括弧「『」は「ctrl+k < "」で入力できる。また、 「』」は「ctrl+k > "」で出る。かな漢字変換を使わなくても呼び出せる。

方法が分かってもどんな文字が入力できるのかを知らなければ使おうという 気にならないだろう。「:digraphs」で一覧できる。√は「るーと」を、 £は「ぽんど」をかな漢字変換(skk.vimなど)すれば出る。ギリシア文字も αは「あるふぁ」、βは「べーた」でよい。これらと違ってかな漢字変換で は出にくいものに数学記号がある(出るのだけれども候補が多すぎて選び出 すのに手間がかかる)。なお、digraph入力には仮名(ひらがな、カタカナ)も ある。驚いたことに、かな漢字変換を使わなくても仮名を入力することがで きるのである。

「:digraphs」の一覧には該当文字が表示されないものがいっぱいある。結 局のところdigraphの定義があっても相当するフォントが無ければ入力(表 示)できない。フォント(文字コード?)を取り揃えて色々なdigraph入力でき るようにしても、そのテキストファイルを閲覧するパソコンに該当フォント が無ければ表示できない。今となっては非力になってしまった感じの shift_jisに無い(表示されない)文字は使わないようにするのが無難であ る。私のシフトJISなパソコンで使えているdigraph(の一部)を次にあげる。 かな漢字変換を使わないでこれらが入力できる方法を知っておくと便利なこ とがある。

なお、このテの特殊な記号がどうしても出ないようなら使うのをあきらめた ほうがよい。何らかの複雑な方法で入力できたとしてもその場で印刷するの ではないかぎり徒労に終わるかもしれない。その特殊な記号(文字)が入った ファイルを他のパソコンで開いたときちゃんと表示されるかどうかが分から ない。どんな非力な(古い)パソコンでも表示できる文字しか使わないように すべきである。

RT(root)
<-(leftwards arrow)
->(rightwards arrow)
-!(upwards arrow)
-v(downwards arrow)
=!(rightwards double arrow)
==(left right double arrow)
.M(middle dot)
£Pd(pond sign)
£$$(pond sign)
¢Ct(cent sign)
§SE(section sign)
°~o(degree sign、チルダスモールオー)
°DG(degree sign)
±+-(plus-minus sign)
PI(pilcrow sign, paragraph mark)
pp(pilcrow sign)
<<(left-pointing double angle quotation mark)
>>(right-pointing double angle quotation mark)
%0(per mille sign、パーセントゼロ)
:X(reference mark)
AO(angstrom、ラージエーラージオー)
oC(degree celsius、スモールオーラージシー)
-3(horizontal bar)
..(two dot leader)
!=(not equal to)
=3(identical to)
×*X(multiplication sign)
FA(for all, for any)
TE(there exists)
(-(element of)
-)(contains as member)
)U(set union, union)
(U(set intersect, intersection)
(C(subset of, contained in)
)C(subset of, contains)
(_(subset of or equal to)
)_(superset or or equal to)
-T(up tack)
00(infinity、ゼロゼロ)
0((proportional to)
-V(angle)
PP(parallel to)
AN(logical and)
OR(logical or)
(A(arc)
hh(box drawings light horizontal)
HH(box drawings heavy horizontal)
vv(box drawings light vertical)
VV(box drawings heavy vertical)
M8(eighth note)
;_(ideographic closing mark)
+"(ditto mark)
,_(ideographic comma、コンマアンダースコア)
._(ideographic full stop、ドットアンダースコア)
*_(ideographic iteration mark)
0_(ideographic number zero)
<+(left double angle bracket)
>+(right double angle bracket)
<"(left white corner bracket)
>"(right white corner bracket)
("(left black lenticular bracket)
)"(right black lenticular bracket)
=T(postal mark)
=_(geta mark)
~.(middle dot、チルダドット)
¬-,(not sign)
¬NO(not sign、ラージエヌラージオー)
-=(macron)
NB(nabla)
dP(partial differential)
In(integral S)
DI(double integral S)
.:(therefore)
:.(because)
<*(much less-than)
*>(much greater-than)
αa*(alpha) (注)第1文字を大文字にするとギリシア文字の大文字になる
βb*(beta)
γg*(gamma)
δd*(delta)
εe*(epsilon)
ζz*(zeta)
ηy*(eta、注意)
θh*(theta、注意)
ιi*(iota)
κk*(kappa)
λl*(lambda)
μm*(mu)
νn*(nu)
ξc*(xi、注意)
οo*(omicron)
πp*(pi)
ρp (rho)
σs*(sigma)
τt*(tau)
υu*(upsilon)
φf*(phi、注意)
χx*(chi、注意)
ψq*(psi、注意)
ωw*(omega、注意)
/-(dagger)
/=(double dagger)
UT(black up-pointing triangle)
uT(white up-pointing triangle)
Dt(black down-pointing triangle)
dT(white down-pointing triangle)
Db(black diamond)
Dw(white diamond)
0m(white circle、ゼロスモールエム)
0o(bullseye、ゼロスモールオー)
0M(black circle、ゼロラージエム)
Fm(female sign)
Ml(male sign、ラージエムスモールエル)

| | コメント (6) | トラックバック (0)

« 2013年4月 | トップページ | 2013年6月 »