VimをアップデートしたらVimからPythonのlxmlが使えなくなったのでVimを過去版に戻した

ちゃんと調べきれていないので断片的な情報になるけどメモ

たぶんコンパイラがVC9からVC10に変わったことでPythonコンパイラが合わずDLLの読み込みでエラー
VimコンパイラがVC9時代のkaoriyaさんのところの旧バージョン7.2に戻したところ読み込めるようになった
今のところPython2.7/2.6はVC9コンパイラになっているのでVimからPythonを使う場合でpydを読み込むタイプのライブラリを使いたい場合はPythonVimを自分でビルドするか、Vimを7.2に戻す必要があるみたい。

Windows 7でIPythonを使う場合の補完

IPythonで補完を使用する場合に、Windows XPではTABで補完時にユニークでなかった
場合は候補が表示されるが、Windows 7になってからはリストが出なくて使いにくかっ
たのが解決した。

http://stackoverflow.com/questions/3771837/ambiguous-tab-completion-not-working-in-ipython-on-windows

候補が複数ある場合はCtrl+lで候補が表示される。

vimでPythonを使うときにインポートエラー

vimスクリプトを作ろうとしたらエラー

:py import lxml.html

Traceback (most recent call last):
  File "", line 1, in 
  File "C:\Python26\lib\site-packages\lxml-2.3beta1-py2.6-win32.egg\lxml\html\__init__.py", line 12, in 
    from lxml import etree
ImportError: DLL load failed: 指定されたモジュールが見つかりません。

lxmlのモジュールが読めないみたい。
python単体でのimportはうまくいくから、vimpythonで相性が悪いのかな??
どうしたらいいものやら。。。

11/12 追記

別の環境では動作した。
C:\Python26にPATHが通ってないせいかもしれない。

PATHを通してもやはり動作しない。
違いといえば動作したのはXPで今動かないのは7ということくらいかな?

11/19 追記

gvimを7.3.62にバージョンアップしたら動作した。

円記号の扱い

円記号(0xA5)がsjisでは解釈できるけど、cp932では解釈できない。
sjisでは逆に株とかが解釈できないので困る。

とりあえずはmbcsでエンコードすることで回避した。

>>> print u'\xa5'.encode('sjis')
    • > print(u'\xa5'.encode('sjis'))
\ >>> print u'\xa5'.encode('cp932')
    • > print(u'\xa5'.encode('cp932'))
                                                                                                                      • -
Traceback (most recent call last): File "", line 1, in UnicodeEncodeError: 'cp932' codec can't encode character u'\xa5' in position 0: illegal multibyte sequence >>> print u'\xa5'.encode('mbcs')
    • > print(u'\xa5'.encode('mbcs'))
\

vimwikiが動作しなくて困った

原因はvimball_homeではない$VIMRUNTIME/ftpluginにvimwiki.vimがあったこと。
きっとアップデートに失敗していたんだとおもう。

vimwikiをアップデートするときは手動ファイルコピーするようにしよう。

[Python]os.walkでUnicodeのファイル名を検索する

os.walkでShift_JISで扱えない文字のファイルが存在する場合にstringでフォルダを
検索すると文字が???になる。

>>> for root,dirs,files in os.walk('c:\\temp\\unicode'):
...     print root
...     print files
...
c:\temp\unicode
['?.txt']

os.walkに渡す文字列をUnicode文字列として渡せば正しく取得できる。

>>> for root,dirs,files in os.walk(u'c:\\temp\\unicode'):
...     print root
...     print files
...
c:\temp\unicode
[u'\u2661.txt']

netrwとshellslash

ちょっとはまってたのでメモ

shellslashを設定するとwindowsでもvimのファイル名補完などでディレクトリの区切り文字がスラッシュになる。
なんか問題があってスラッシュに変更していたと思ったんだけどshellslashを設定するとshellescape()でコマンドライン用のクォートがダブルクォートからシングルクォートに変更されてnetrwでhttp:〜などを開いたときにエラーになるらしい。