taglist&vim-latexの文字化けを解決

本日、ubuntuにて前から困っていたtaglist.vimvim-latexの文字化けを解決できたので解決法をかいておきます。

taglist.vim

まずtaglist.vimから。この間texに対応していることを知りました。まぁ、普通にtaglistをつかうときはおそらく日本語を表示することはないので困らないかと思いますが、texファイルではセクション名等を表示でき、目次代わりに利用できます(ubuntuでは何も設定しなくてもできました。windowsではなぜかうまくいきません)。この時日本語を表示すると、自分の環境では次のようになってしまいました。



texはfilecncodingをeuc-jpにしないと日本語が使えませんが、taglistではutf-8で文字を表示しているために文字化けが起きてしまいます。これを解決するために、taglist.vimの2289行目(ver4.5の場合)の

let cmd_output = system(ctags_cmd)

というところを

let cmd_output = system(ctags_cmd . "| nkf -w " )

に変更。これできちんと表示されるようになります。



[補足]taglistは関係ないですが、exuberant ctagsを使うと\ref{}の参照場所などにファイルをまたいでいても飛べるので便利です。~/.ctagsに以下のような記述をするとtexのtagファイルを生成できるようになります。

--langdef=latex
--langmap=latex:.tex.sty.bib
--regex-latex=/\\label\{([^} \t]+)[ \t]*\}/\1/l,label/
--regex-latex=/\\(sub)*section\{([^}]*)\}/\2/s,section/
--regex-latex=/@.*\{(.*),/\1/b,bib/

で、自分はlabelを次の写真みたいに\label{tbl:tool}としているのですが、vimのデフォルトの状態で\refの{}内でとすると「tbl」、「:」、「tools」のいずれかが選択されてしまいジャンプができません。



そこで、.vimrcに以下のように書いてます。

augroup MyAutoCmd
    au BufNewFile,BufRead *.tex,*.bib nnoremap tt <Esc>vi{y:tag <C-R>"<CR>
augroup END

やや強引な気がしますがこれで無事にジャンプできます。
(あーでもよくよく考えるとこれじゃぁ\cite{foo,hoge}みたいにしてるときだめですね。なんかもっといい方法ないかなぁ)

vim-latex

次にvim-ltex。vim-latexで\cite{}を補完しようとすると、次のようになってしまいます。



これもtaglist.vimと同じでbibファイルのfileencodingがeuc-jpなので文字化けしています。この補完にはpythonを使っていて、自分はpythonを知らなかったので解決策を見つけるのが大変でしたが、次のようにすると文字化けが解決しました。
1. /usr/lib/python2.6/sitecustomize.py に以下の内容を追加

import sys
sys.setdefaultencoding('utf-8')

2. ~/.vim/ftplugin/latex-suite/bibtools.py(自分の場合)の先頭に

import codecs 

を追加。さらに170行目の

fields = open(file).read().split('@')

を、

fields = codecs.open(file,'r','euc-jp').read().split('@')

これで無事に表示されるようになりました。



(以上の写真ではここここのサンプルファイルを利用しました。)


今日いろいろやってみて文字コード関連の話はややこしいなと改めて感じました。はっきりいってよく分かってないことが多いので本でも読んでしっかり勉強したいです。
あとpythonをちょっとさわってみてこれいいかもと思ったり。これも勉強しよう。