有馬総一郎のブログ

(彼氏の事情)

今更ながらfcitx-remoteとeskk.vimの使い方が分かる

今回、Ubuntu 18.04にして Neovimに乗り換えて、 Input Methodskkのみにしていた。

そして、 vimでコマンドモードにした時に英数入力になるように

Vimからfcitxを使う - Qiitaなどで見かけるとおり

set imactivatefunc=ImActivate
function! ImActivate(active)
  if a:active
    call system('fcitx-remote -o')
  else
    call system('fcitx-remote -c')
  endif
endfunction
set imstatusfunc=ImStatus
function! ImStatus()
  return system('fcitx-remote')[0] is# '2'
endfunction

と設定したのだけど、英数入力にならない。

やはり、 Input Methodskkだけだと意味がないらしいので keyboard - English(US)を追加する。

しかし、切り替わらない。fcitx-remote -cで IMEがオフに( keyboard - English(US))にならない。何故かfcitx-remote -oでなる…どういうことだ。

Input Methodの順番を上を keyboard - English(US)にして下に skkを移動させたところfcitx-remote -cで IMEがオフになるように。えっとfcitxってそういう挙動するの!!!

また上記で紹介したVimからfcitxを使うでは、

set iminsert=2
set imsearch=2
set imcmdline

2(自動で日本語入力モード)を設定しているが、 input methodがサポートされていない?1Invalid argumentとして怒られる。

なので

set iminsert=0
set imsearch=0

0(IMEをオフにする)を設定する(今は0がデフォルトみたい)。

また、今まで skkユーザーのためのプラグインtyru/eskk.vimについて、その使い方が良く分からなかった。

.vimrcinit.vimにとりあえず

let g:eskk#directory = "~/.eskk"
let g:eskk#dictionary = { 'path': "~/.skk-jisyo", 'sorted': 0, 'encoding': 'utf-8', }
let g:eskk#large_dictionary = { 'path': "~/.eskk/SKK-JISYO.L", 'sorted': 1, 'encoding': 'euc-jp', }

と設定したけど2set imactivatefunc=ImActivateの設定なしには、Ctl+[<Esc>をしても英数入力に切り替わらなかったりと、プラグインの意味が分からなかった。

しかし、set imdisableでIMEのON/OFFをさせないようにしてから、IMEオフの状態、つまり英数入力( keyboard - English(US))にしてCtl+jにするとIME関係なく skkできる。

プラグインの説明にそう記載されているのだけど、今までIMEをオンにした状態で使っていたので、その意味が分からなかった。そして、その状態からCtl+[<Esc>すると英数入力になってくれる。

はぁ、こうやって使うんだな。これならset imactivatefunc=ImActivateの記述も不要になると。

また、 neovim-qtだと fcitx-skkの英数入力による<(LEFT ANGLE BRACKET、左山括弧、LESS-THAN SIGN)が入力できないという意味不明のバグに悩まされたけど( neovimだと可能)、 keyboard - English(US)だと当然というか、入力できる。

更にeskk.vimがskkserv機能を実装しました - Humanityにあるとおり、自分好みの辞書を育てるのも skkの醍醐味であるけど、入力の快適さだけを求める方にはこうしたチート?設定も可能というわけだ。


  1. help iminsertによると2 is available only when compiled with the |+multi_byte_ime|, |+xim| or |global-ime|とあるけどイマイチ分からない。

  2. ユーザー辞書 user.dictはデフォルトでは euc-jpとなってるけど、先頭行を;;; -*- coding: utf-8 -*-と変更することで utf-8として保存できる。

Comments