google-ime-skk をeskk.vimで利用するようにした際のメモ。
google-ime-skkを動かすにはRubyが必要です。
私がインストールしたRubyは下記サイトから取得したRuby 1.9.3-p551です。
http://rubyinstaller.org/downloads/
最初は上記のサイトにあるRuby 2.2.1を使用したのですが、サービスの起動がいくらやってもうまくできませんでした。
発生したエラーは下記「(5)余談」の通りです。
Ruby 1.9.3-p551に変えてみたところあっさりとうまくいきました。
google-ime-skkをサービスに登録する際には下記のサイトを参考にしました。
google-ime-skkのWindowsサービス化 - 海色日報
Rubyのスクリプトをサービスとして常駐させる答えを知りたい | 答えを知りたい
(1)Ruby 1.9.3-p551のインストール
http://rubyinstaller.org/downloads/ からRuby 1.9.3-p551をダウンロードしてインストールします。
途中、「Rubyの実行ファイルへ環境変数PATHを設定する」と「.rbと.rbwファイルをRubyに関連付ける」のチェックボックスをオンにしました。
以下ではコマンドプロンプトは管理者として実行しています。
(2)google-ime-skkのインストール
コマンドプロンプトから下記のコマンドを実行します。
C:\WINDOWS\syste>gem install google-ime-skk
(3)google-ime-skkをWindowsのサービスとして登録する
コマンドプロンプトから下記のコマンドを実行します。
C:\WINDOWS\system32>gem install win32-service
次の内容のRubyスクリプトを作成します。
私はC:\Users\xxx\Documents\Apps\google-ime-skk.rbを作成しました。
#!C:/Ruby193/bin/ruby.exe -Ku
#
# This file was generated by RubyGems.
#
# The application 'google-ime-skk' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
require 'win32/daemon'
include Win32
class Daemon
def service_main
version = ">= 0"
gem 'google-ime-skk', version
load Gem.bin_path('google-ime-skk', 'google-ime-skk', version)
end
def service_stop
exit!
end
end
Daemon.mainloop
コマンドプロンプトから下記のコマンドを実行してサービスに登録し実行します。
実行した後STATEがRUNNINGになっていることを確認します。
C:\WINDOWS\system32>sc create google-ime-skk
binPath="C:\Ruby193\bin\ruby.exe
C: \Users\xxx\Documents\Apps\google-ime-skk.rb" type=own start=auto
(実際は1行)
C:\WINDOWS\system32>sc start google-ime-skk
SERVICE_NAME: google-ime-skk
TYPE : 10 WIN32_OWN_PROCESS
STATE : 2 START_PENDING
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x7d0
PID : 3864
FLAGS :
C:\WINDOWS\system32>sc query google-ime-skk
SERVICE_NAME: google-ime-skk
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
(4)eskk.vimでgoogle-ime-skkを利用する
vimrcに下記の内容を記述しました。
let g:eskk#enable_completion = 1
let g:eskk#server = {
\ 'host': 'localhost',
\ 'port': 55100,
\ 'type': 'notfound',
\}
(5)余談
ちなみにRuby 2.2.1だと下記のようなエラーになりました。
C:\WINDOWS\system32>sc create google-ime-skk
binPath="C:\Ruby22-x64\bin\ruby.exe
C:\Users\xxx\Documents\Apps\google-ime-skk.rb" type=own start=auto
(実際は1行)
[SC] CreateService SUCCESS
C:\WINDOWS\system32>sc start google-ime-skk
[SC] StartService FAILED 1053:
そのサービスは指定時間内に開始要求または制御要求に応答しませんでした。
試しに直接スクリプトを実行すると下記のようなエラーになりました。
C:\WINDOWS\system32>ruby.exe C:\Users\xxx\Documents\Apps\google-ime-skk.rb
C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- ffi_c (LoadError)
from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ffi-1.9.8-x64-mingw32/lib/ffi.rb:18:in `rescue in '
from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ffi-1.9.8-x64-mingw32/lib/ffi.rb:3:in `'
from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/win32-service-0.8.6/lib/win32/windows/helper.rb:1:in `'
from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/win32-service-0.8.6/lib/win32/daemon.rb:1:in `'
from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `require'
from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `rescue in require'
from C:/Ruby22-x64/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:39:in `require'
from C:/Users/xxx/Documents/Apps/google-ime-skk.rb:10:in `
なお、うちのCygwin環境ではVimをLANG=C /usr/local/bin/vimというようにLANGをja_JP.UTF-8から変えないとうまく漢字変換できません。large_dictionaryで設定した辞書ファイルをうまく読み込めていない感じです。