Vimで古代ギリシア語【自作プラグインのすすめ】

みなさん、Vimは好きですかー？？
……そうですか、好きですか。

みなさん、古代ギリシアは好きですかー？？
……ほう、ほう、大好きですか。

好きと好きが合わさったら最高に幸せですよね。
という訳でVimプラグインを作りました。その名もソクラテス。[^1]

https://github.com/NI57721/vim-socrates

![screenshot.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726727/6249adcc-8033-e3c7-d372-9197eb66e927.gif)

この記事では古代ギリシア語入力用のVimプラグインのお話をします。
これから古代ギリシア語をターミナルからでもすらすら入力したいという人向けの内容になっています。

# インストール
お好きなプラグイン・マネージャーで入れてください。
```vim:.vimrc
" dein.vim
call dein#add('NI57721/vim-socrates')

" vim-plug
Plug 'NI57721/vim-socrates'

" neobundle
NeoBundle 'NI57721/vim-socrates'

" jetpack
Jetpack 'NI57721/vim-socrates'
```

# 使い方
`.vimrc`に以下の3行の内好きな1行を加えるといい感じに使えるようになります。これはキーマップをトグルするマッピングです。キーマップは`socrates-greed`がお勧めです。詳しくは[後述](#キーマップ)。
```vim:.vimrc
nnoremap <leader>q <Plug>(socrates-greed)
nnoremap <leader>q <Plug>(socrates-latin)
nnoremap <leader>q <Plug>(socrates)
```

# キーマップ
`socrates`はギリシア語キーボードに対応したキーマップ、`socrates-latin`はギリシア語のローマ字化に対応したキーマップ、`socrates-greed`はそれらの良いとこ取りをしたキーマップです。thでθ、psでψなどが入力できるようになります。

## socrates-greedのキーマップ
|キー|ギリシア語|キー|ギリシア語|キー|ギリシア語|
|---|---|---|---|---|---|
|a|α|m|μ|t|τ|
|b|β|n|ν|y|υ|
|g|γ|j|ξ|u|υ|
|d|δ|x|ξ|f|φ|
|e|ε|ks|ξ|ph|φ|
|z|ζ|o|ο|ch|χ|
|h|η|p|π|ps|ψ|
|th|θ|r|ρ|v|ω|
|i|ι|rh|ῥ|w|ω|
|k|κ|s|σ|||
|l|λ|c|ς|||

大文字も似た感じです。ただし大文字の場合は`PS`と`Ps`がともに`Ψ`になります。`socrates`, `socrates-latin`についてはここでは割愛します。詳しくはGitHubの[README](https://github.com/NI57721/vim-socrates)をご覧ください。

## 記号
発音記号などの入力方法は全てのキーマップで共通です。WindowsのIMEではこれらの記号を入力するのに、複雑な配列を覚えたうえでキーを3つも4つも同時に押さなければならなかったりして大変でしたよね。このプラグインではメインのアルファベットの後に記号類を順不同で入力できます。
したがって、`a~[_`, `a~_[`, `a_[~`などは全部`ᾇ`と入力されます。
|キー|タイプ例|意味|
|---|---|---|
|[|ἁ|有気記号|
|]|ἀ|無気記号|
|`|ὰ|重アクセント|
|'|ά|鋭アクセント|
|~|ᾶ|曲アクセント|
|_|ᾳ, ᾼ|下書き/横書きのイオタ|
|-|ᾱ|マクロン|
|^|ᾰ|ブリーブ|
|"|ϋ|トレマ|

# 句読点など
|キー|タイプ例|意味|
|---|---|---|
|?|;|疑問符。セミコロンではない|
|;|·|セミコロン|
|:|·|コロン(↑と同一)|

## 古いアルファベット
|キー|タイプ例|意味|
|---|---|---|
|F\ |Ϝ|大文字のディガンマ|
|f\ |ϝ|小文字のディガンマ|
|M\ |Ϻ|大文字のサン|
|m\ |ϻ|小文字のサン|
|Q\ |Ϙ|大文字のコッパ|
|q\ |ϙ|小文字のコッパ|
|H\ |Ͱ|大文字のヘータ|
|h\ |ͱ|小文字のヘータ|
|S\ |Ͳ|大文字のアルカイック・サンピ|
|s\ |ͳ|小文字のアルカイック・サンピ|
|Z\ |Ϡ|サンピ|
|z\ |ϡ|小文字のサンピ|
|SH\ |Ϸ|大文字のショー|
|Sh\ |Ϸ|大文字のショー|
|sh\ |ϸ|小文字のショー|
|W\ |Ͷ|大文字のパンフィリアのディガンマ|
|w\ |ͷ|小文字のパンフィリアのディガンマ|
|ST\ |Ϛ|スティグマ|
|St\ |Ϛ|スティグマ|
|st\ |ϛ|小文字のスティグマ|
|j\ |ϳ|ヨット|

## 区切りのスラッシュ
全てのキーはスラッシュで確定させることができます。`socrates-greed`では`τη`と入力しようとして`th`と打つと`θ`になってしまいますが、`t/h`と打つことにより`τη`と入力することができます。

# スマート・モード
デフォルトで`smart mode`がオンになっています。これにより、語頭の`ρ`は自動で有気記号が付いて`ῥ`になります。また、語末の`σ`は自動で`ς`になります。ラテン文字のつもりでそのまま入力できるので便利です。
例えば、`Swkra't/hs`と入力すれば、そのまま`Σωκράτης`となります。
オフにするには.vimrcに以下を加えてください。
```vim:.vimrc
let g:socrates_smart_mode = v:false
```

また、語頭・語末判定に使う文字を変更することができます。
デフォルトでは`,.'";:? ;·<U+00FF>`が指定されています。変更するには以下の行を.vimrcに加えてください。
```vim:.vimrc
let g:socrates_punctuations = "語頭・語末判定で使う文字"
```

# プラグインの作成について
本プラグインは全てVim scriptで書かれています。[^2]
Vim scriptに関しては既に優れた文章がいくつもあるのでここでは語りませんが[^3]、[Vim用のGitHub Action](https://github.com/thinca/action-setup-vim)や[Vim scriptのテスト用フレームワーク](https://github.com/thinca/vim-themis)なども充実しており開発体験の良い環境が整っています。
まだプラグインを作ったことがない方も、是非自分の「好き」のために書いてみてはいかがでしょうか。

では、締めにスクリーンショットでタイプしたソクラテスのセリフの翻訳を。
> じゃあ、クリトーンよ、それで良いんだ。僕らはそのようにしよう。

[^1]: スクリーンショットはオクスフォード古典作家叢書中のバーネット校訂版、プラトンの初期対話篇『クリトーン』より。処刑直前のソクラテスによる最期のセリフ。
[^2]: 大量のキーマップをVim scriptに吐かせるためにスクリプト言語を使用しています。
[^3]: 例えば[Vim scriptでプラグインを作ろう 〜 Vimはいいぞ！ゴリラと学ぶVim講座(8)](https://knowledge.sakura.ad.jp/23436/)