jedi-vimとneocomplete.vimを併用する際に行っておきたい設定

この記事は Vim Advent Calendar 2013 53日目の記事になります。

neocomplete.vim利用者がjedi-vimも使う場合、下記の id:heavenshell さんご指摘の点を不満に思われるのではないかと思います。

jedi.vim の popup_select_first が効かない

これをアドホックな対応ですませないためにはどう設定するとよいかをvim-users.jp – Lingrで質問したところ Shougoさんから下記の設定を教えていただきました。

autocmd FileType python setlocal omnifunc=jedi#completions
"let g:jedi#popup_select_first=0
let g:jedi#completions_enabled = 0
let g:jedi#auto_vim_configuration = 0
let g:neocomplete#force_omni_input_patterns.python = '\%([^. \t]\.\|^\s*@\|^\s*from\s.\+import \|^\s*from \|^\s*import \)\w*'

1行目でomnifuncにjediを用いたneocompleteによる補完が設定され、3,4行目でjedi-vimの補完機能は切る、といった具合のようです。
2行目にcomment outして書いた設定はjedi-vimの機能なのでこれを設定しても意味は無いようです。
(書いても意味が無いので書かないのがいいと思います、という意図です。)
最後の行はimport系についての補完の配慮のようです。
omnifunc以外のneocompleteの機能をdisableしてomnifuncの方に専念させるということのようです。

このissueだけを見ていると3,4行目の設定だけで済ませてしまいそうですが その場合、omnifuncにpythoncompleteが適用され、jediの補完は効いていないようです。 pythoncompleteよりもjediの方が何かとよい(pythoncompleteはjediよりもモタる気がします) ようなので1行目の設定も書かれることをおすすめします。

また id:osyo-manga さんから

わたしは g:neocomplete#sources#omni#functions.python に jedi#completions を設定して使用しているなー

というご意見もいただいたのですが、Shougoさんによると

それでもよいですが、omni sourceは互換性に難があるので動かない補完関数があります
聞いたところによると、jediでも問題が起こるらしい。
詳細はよく分かりません

とのことです。
伝聞調ばかりですみません。以上です。

T-code best practices その4 VimでT-code (漢直advent calendar 10日目)

このentryは漢直advent calendarの10日目です。

VimのT-code(TUT-code)入力plugin tcvime

Vimmerの方にもT-code入力用pluginがあるので紹介します。 detonさん作のtcvimeがそうです。

tcvimeのinstall

pathogenとかを使ってもらえればokです。 今のtcvimeはencodingがutf-8になっておりかつT-code用のkeymap tcode.vim も同梱されるようになったのでOSを問わずinstallが楽にできるようになって います。

tcvimeのT-code用の設定

tcvimeのdocに書いてありますが、T-code用の最低限の設定は下記になります。 vimrcに追記してください。

if has('keymap')
let tcvime_keymap_for_help = 'tcode'
set iminsert=0 imsearch=0
imap <unique> <C-J> <C-R>=<SID>EnableKeymap()<CR>
imap <silent> <unique> <C-L> <C-R>=<SID>DisableKeymap()<CR>
imap <silent> <unique> <ESC> <ESC>:set imsearch=0<CR>
endif

function! s:EnableKeymap()
" 既にオンの場合は何もしない
if &iminsert
return ''
endif
call tcvime#SetKeymap(g:tcvime_keymap_for_help)
" <Space>で前置型交ぜ書き変換を開始するか、読みが無ければ' 'を挿入。
" (lmapにすると、lmap有効時にfやtやrの後の<Space>が使用不可。(<C-R>=なので))
imap <silent> <Space> <C-G>u<Plug>TcvimeIConvOrSpace
return "\<C-^>"
endfunction

function! s:DisableKeymap()
" 既にオフの場合は何もしない
if !&iminsert
return ''
endif
set iminsert=0
silent! iunmap <Space>
TcvimeCloseHelp
return "\<C-^>"
endfunction

" lmapのカスタマイズを行う関数。
" tcvime#SetKeymap()からコールバックされる。
function! TcvimeCustomKeymap()
" tc2同様の後置型交ぜ書き変換を行うための設定:
" " 活用しない語
" lmap <silent> 18 <C-G>u<C-R>=tcvime#InputPostConvert(1, 0)<CR>
" lmap <silent> 28 <C-G>u<C-R>=tcvime#InputPostConvert(2, 0)<CR>
" lmap <silent> 38 <C-G>u<C-R>=tcvime#InputPostConvert(3, 0)<CR>
" lmap <silent> 48 <C-G>u<C-R>=tcvime#InputPostConvert(4, 0)<CR>
" " 活用する語(ただしtc2と違って、読みの文字数には活用語尾は含まない)
" lmap <silent> 29 <C-G>u<C-R>=tcvime#InputPostConvert(2, 1)<CR>
" lmap <silent> 39 <C-G>u<C-R>=tcvime#InputPostConvert(3, 1)<CR>
" lmap <silent> 49 <C-G>u<C-R>=tcvime#InputPostConvert(4, 1)<CR>
" lmap <silent> 59 <C-G>u<C-R>=tcvime#InputPostConvert(5, 1)<CR>
endfunction

とりあえずこれでinsert modeに入ってからC-jすることでT-codeと交ぜ書き 変換を行うことができます。 (T-codeを無効にするにはC-lします)

明日はもう少しtcvimeについてお話しようと思います。

T-code best practices その3 (漢直advent calendar 7日目)

このentryは漢直advent calendarの7日目です。

tcの使い方も少し

前回紹介したfjでの交ぜ書き変換以外に知っておくとよさそうなtcの使い方 を書いてをみます。

?が便利

tcode-mode中に?keyを押下すると下記のhelpが表示されます。

f:id:kozo2:20131208230223p:plain

この中でとりあえず使ってほしいのは44, 55, [1-4]8, [2-5]9です。

[1-4]8, では活用しない語の変換 [2-5]9, では活用する語の変換を行います。

部首合成変換はよっぽど漢直の達人にならない限りまだやらんでいいと思いま す。

T-codeのcustomize

T-codeのmanual.pdfに書いてありますが $HOME/.tcに

;;; -*-emacs-lisp-*- This file is automatically created
(setq tcode-data-directory "/Users/kozo2/tcode/")
(setq tcode-default-input-method "japanese-T-Code")
(setq tcode-key-layout "qwerty")
(add-hook 'tcode-after-load-table-hook
          (lambda ()
            (when (eq tcode-input-method 'tcode)
              (tcode-set-action-to-table '(23 29) "頂"))))

みたいな設定を書くとT-codeのcustomizeができます。 f;では本来「額」が入るはずですがこの設定の場合「頂」が入ります。 23,29はそれぞれ「f」と「;」のkey codeです。 よく使う漢字がT-codeに無い場合こんな感じでcustomizeしてください。

次はVimのT-code(TUT-code)入力環境tcvimeを紹介しようと思います。

T-code best practices その2 (漢直advent calendar 5日目)

このentryは漢直advent calendarの5日目です。5日目以降もその3、その4と続きます。

EmacsのT-code(TUT-codeも、の)入力用機能拡張のtcの導入方法

Emacs24を使い、melpaからのinstallをおすすめします。 autotoolsが必要無くinstallが簡単に行えます。

init.elに

(require 'package)
(add-to-list 'package-archives
  '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)

を追加します。 上記をevalした後で

M-x package-install
tc

します。package-installが終わったらinit.elに

(require 'tc-setup)

の1行を追加し、emacsをrestartしてください。 restart後は M-x toggle-input-method を実行し、用いるinput-methodにT-codeを選択してください。 tcの設定file作成場所についてなども問われるかもしれませんがすべて defaultで問題無いです。

tcを用いた漢字変換の方法について

T-code best practices その1 でひらがなを覚えた方は適当にひらがなを入力した後でfjを入力してみてく ださい。

例えばてきとうとひらがなを入力した後でfjを入力します。 そうするとてきとう適当に変換され、別bufferには

f:id:kozo2:20131205220918p:plain

のようなT-codeのhelp表が表示されたのではないでしょうか。 このように変換を使いつつよく使う漢字から少しずつ漢直を覚えていくことで 無理無く漢字も直接入力できるようになります。

fontに注意

T-codeのhelp表ですがfont設定に注意しないと表示がずれて使いものになりません。

を使うとずれずに表示されるかと思います。

次回

もう少しtcの使い方について説明してみようと思います。

T-code best practices その1 (漢直advent calendar 4日目)

このentryは頓挫した技術系アドベントカレンダーの一覧に加えられる原因となっ た漢直advent calendarの4日目になります。5日目以降もその2、その3と続きます。

T-code best practicesを書く目的

T-codeを楽に習得するための方法を伝えることを目的としています。 T-codeとは何なのかについての説明はすっとばします。

ひらがなのT-codeを覚えよう

T-code best practicesといいつつも、いきなり漢字を直接入力することはすすめま せん。むしろばんばん変換使いましょう。 しかしひらがなのT-codeは覚えてください。

id:sak_kanchoku さんの漢直 Advent Calendar 2013 3日目 漢直はこわくない。 にあるようにTUT-codeであればひらがなの習得は容易ですが、あえて私は T-codeでのひらがな習得を推します。

その理由はT-codeはひらがなの入力もキーストロークとキー位置の関係が全く 無い無連想の方式だからです。 無連想方式の入力は習得にcostがかかりますが入力にruleを連想するための思 考が伴わないため、習得してしまえば連想方式よりも効率のよい入力が行えま す。 (思考によるinterceptのcostは大きい)

どうやってひらがなのT-codeを習得するとよいか

iOS deviceをお持ちでない方は

eelll/JS を使ってひらがなのT-codeだけ覚えてください。

iOS deviceをお持ちの方は

まず id:meech さんのentry Mozc で(だいたい) T-Code風入力 の通りにmozc(google日本語入力)を設定してください。 これによってmozcではT-codeが使えるようになります。

T-codeのkey strokeの参照には漢直Pad を使い、まずはひらがなのT-codeだけを参照しつつ文章を書いてみてください。

mozcはT-code入力専用にし、通常入力時(急いで文字を書く必要がある時など)には他のIMにswitchすることを想定しています。 これを望まれない方はiOS deviceをお持ちでない方と同様にmozcの設定は変更せ ず、eelll/JSでひらがなのT-codeを覚えてください。

eelllは伝統的なT-codeの学習programですが、私はこのprogramで学習するこ とが最善かどうかについて疑問を持っており、できれば漢直Padの使用をおす すめしたいところです。

注意

  • 最初はかなりいらつくと思います。
  • あせらず学習してください
  • 急いで文字を入力する必要がある場合は無理に使おうとしないで普通のIM にswitchしてください
  • (使う)ひらがなさえ覚えればもうT-codeは覚えたも同然ですのでここが肝心 要です。ゆっくりでよいのでできれば諦めないでいただきたいです。

次回

ひらがなのT-codeを覚えた方を対象とし、 EmacsのT-code(TUT-codeも)入力用機能拡張のtcの利用方法について紹介しま す。

Vimのremap設定が思い通りに動作しない時は

この記事は Vim Advent Calendar 2012 の306 日目の記事になります。
下記の内容は id:thinca さんに vim-users.jp で教えていただきました。ありがとうございます。
また vim-users.jp の Hack #148id:thinca さんはすでに下記の内容を執筆されています。
再掲になりますがお許しください。

remap設定の調査方法

私は下記のようなvimrcで 7行目で意図する<C-l>がEscapeにならないと思い困っていました。

こういった場合まずremap command対象の右側を省略したcommandを入力します。

:inoremap <C-l>

するとcommand lineには

i <C-L> <C-R>=<SNR>2_DisableKeymap()<CR>

と表示され、たしかに意図するようにremapできていないことが確認できます。

つぎに「この2_DisableKeymap()がどのfileでremapされているのか」ですが先程のcommandの先頭にverboseをつけた下記のcommandで確認できます。

:verbose inoremap <C-l>

この結果は

Last set from ~/.vim/vimrc

となり、「自分のvimrcの31行目でふたたび<C-l>にremapしていることに気がついていなかった」というのがオチでした。

私の場合、日本語入力用pluginであるtcvimeの設定をそのままcopy and paste していたため再びremapしていることを忘れていた、という具合です。

似たようなシチュエーションは結構あるかもしれないのでVACに書かせていただきました。

おわり。