問題

日本語やベトナム語を入力している時に、コマンモードを移動する度に英語インプットソースに変えないといけないという問題があるんでしょうね。 それのような問題(中国語の場合)に対して、解決できるVIMプラグインが有りました。 今回それを基づいて初めてのVIMプラグイン開発することとして、日本語やベトナム語もそういう機能に適用します。

対策

全体的に言うと、VIMが提供してくれているInsertEnterInsertLeaveと言うイベントを使います。 それらの時に現在のカーソルの位置のキャラクターはどんな言語化を判定して、インプットソースを変える。

1
2
3
4
5
autocmd InsertEnter * :call s:insert_entered()

if g:osxime_insert_leave
  autocmd InsertLeave * :call s:insert_leave()
endif

上記のコードを見ると、InsertEnterイベントが発火したらs:insert_entered()が呼ばることを何とか判定できるんでしょうね。 そのように、InsertLeaveも発火したらs:insert_leave()が呼ばると言う認識が間違いないでしょう。

何でs:と言う微妙な文字が入ってるんですか?

それはVIMのスコープを指定する文字です。

1
:help internal-variables

を実行したら、以下のスコープを指定する文字一覧が出てきます。

1
2
3
4
5
6
7
8
buffer-variable    b:	  Local to the current buffer.
window-variable    w:	  Local to the current window.
tabpage-variable   t:	  Local to the current tab page.
global-variable    g:	  Global.
local-variable     l:	  Local to a function.
script-variable    s:	  Local to a |:source|'ed Vim script.
function-argument  a:	  Function argument (only inside a function).
vim-variable       v:	  Global, predefined by Vim.

と言うのは:sと言うは簡単に言えばファンクションの指定語です。


2021年2月時点:申し訳ないです、このブログを書き続けるつもりだったが現在Emacsを使用することにしましたので、プラグインのGitをこちらに参考してください https://github.com/nhs000/vim-macos-ime