有馬総一郎のブログ

(彼氏の事情)

2020年09月01日 00:10:21 JST - 4 minute read - Linux

バカには使えないものになりつつあるLinuxの日本語入力環境

バカとは私のこと。Ubuntu 18.04のときも日本語入力について、メモっていたが、それでもインストールして何日かは、あーでもないこーでもないとやってるので、もっと詳細にメモることにした。個人的メモなので整理する気もない。

Ubuntu 20.04でibus-skkが動かなくなり1困っていたが原因が分かった…fcitxを試すときに作成した~.pam_environmentの中身が

XMODIFIERS DEFAULT=@im=fcitx
GTK_IM_MODULE DEFAULT=fcitx
QT_IM_MODULE DEFAULT=fcitx

fcitx のままだったから…im-configibus に変更したりしていたのが、上記ファイルは変更されなかったようだ。

細かく見ると

~/.xinputrc

# im-config(8) generated on Thu, 23 Jul 2020 19:59:21 +0900
run_im ibus
# im-config signature: 952ed4c3a278cc54c2b6c23e16fd88e8  -

といったファイルもあるんだね。

しかし、何故 fcitx に浮気などしたかというと、 vi でやはりコマンドモード(ノーマルモード)にしたときに英数入力になってほしいのだけど、上手くいかなかったりしたからだ。(それは私が、設定の理解をしてなかったからだ)

tyru/eskk.vimを使うときは、viで日本語入力をうけもつから、OS(?)側の入力メソッドは英数入力であるのが望ましい。しかし、Windowsと違ってimdisableできない。だから eskk.vim での制御は諦める。

そこで、 fudist - im_control.vim - IBusにあるとおりの設定を行う。

ibus engineはインプットメソッドの変更はできるので、 fuenor/im_control.vimを使う。英数(US)にするibus engine "xkb:us::eng"とskkにするibus engine "xkb:jp::jpn" の二つの外部コマンド使って切り替えさせる。

let IM_CtrlMode = 1
"「日本語入力固定モード」切替キー
inoremap <silent> <C-j> <C-r>=IMState('FixMode')<CR>
function! IMCtrl(cmd)
let cmd = a:cmd
if cmd == 'On'
  echo 1
  let res = system('ibus engine "skk"')
elseif cmd == 'Off'
  echo 2
  let res = system('ibus engine "xkb:us::eng"')
endif
return ''
endfunction

この時、インプットメソッドがskkだけだと、切り替えできない。なので、入力ソースに 英数(US) を追加する必要がある。

入力ソース

また、システム設定の 地域と言語 の入力ソースのオプションを ウィンドウごとに別のソースを使用可能にする にしておかないと、vimと他のアプリを行ったり来たりするときに、折角vimでインプットメソッドを制御しているのに、水の泡となってしまう。

地域と言語

また、困るのがibusの仕様で言語を日本語にすると、キーボードレイアウトも日本語になってしまうので /usr/share/ibus/component/skk.xml<layout>ja</layout><layout>us</layout>にする必要がある。

お好みで、iBus SKK設定の動作、初期入力モードをひらがな、もしくは、英数を選択する。

iBus SKK

ここらへんの事情はfcitxでも同じ。 fudist - Vim/GVimで「日本語入力固定モード」を使用するを参照に、 入力メソッドを不活性化する fcitx-remote -c入力メソッドを活性化する fcitx-remote -o を使って制御する。

let IM_CtrlMode = 6
"「日本語入力固定モード」切替キー
inoremap <silent> <C-j> <C-r>=IMState('FixMode')<CR>

これだけで済むのはありがたい。ただ 入力メソッドの設定 でキーボード-英語(US)とSKKの上下の順番を逆にすると正しく動作しない。fcitxibusのようなキーボードレイアウトの問題が起きないのと、設定の細かさなどで、できればこちらを使い続けたいのだけど、 GNOMEの検索、拡張機能などでは日本語入力できない という問題がある…

となると GNOME を使うならやはりibusが良いということで、fcitxibusをああでもないこうでもないと繰り返していたら、冒頭で言ったようにibus-skkが動かないってざまになった。

あれこれ難しく考えすぎて、遠回りしたが、システム設定の 地域と言語 の入力ソースのオプションを ウィンドウごとに別のソースを使用可能にする にする。そして、vim使用時は英数(US)のままにしておいて、 tyru/eskk.vimを使えば、imdisableの状態と変わらずに操作できる。また vimrc でもあれこれと制御のための記述を書く必要もなくなる。

ということで、結局、自分は

設定箇所 設定
地域と言語 ウィンドウごとに別のソースを使用可能にする
vim tyru/eskk.vim

で問題なく日本語入力できていいる。


  1. インプットメソッドは切り替えられるのだけど、Ctrl+jを押下してもskkが動かない ↩︎