vimから、現在編集中のスクリプトに対してpythonをpdb付きで起動できるようにしてあったのだが、何故か突然、スクリプトへのパスが見つからないと言い出した。
(もしかして最近のpdb.py日本語化改造が影響してるのかもしれない)
が、原因がよく判らない。もともとおかしかったんだろうか?
とにかく、よく見てみると、与えられたパスが化けている。
d:\\python\\test\\test.py
という風なのが渡されてるとしたら、
d:\\\\python\\test\\test.py
にされている。多分、再評価されて最初のパス区切りだけが有効、後のは\\tとして認識されているのだろう。
Windowsならではの光景とでも言うか…うーむ。
ともかく、修正せねばなるまい。
いろいろ考えたのだがwindowsでもpythonはパスデリミタを/(スラッシュ)で認識してくれる。要するに、python pdb.pyで起動するときにあらかじめvimスクリプト内で\\を/に置換してしまえばいいのだ。
探した結果、vimのスクリプトでは
substitute(ソース文字列,置換元パターン,置換文字列,フラグ)
という関数がこの目的にぴったりであった。
具体的にはcurfilenameという変数に対象となるパスが入っていれば
let curfilename=substitute(curfilename,"\\","/","g")
とすればいい。
俺の場合、もう少しでmatchとwhileを使ってループさせてstrpartなど使ってパスを切り刻んで変換処理を行いそうだったのはナイショだ。
(もしかして最近のpdb.py日本語化改造が影響してるのかもしれない)
が、原因がよく判らない。もともとおかしかったんだろうか?
とにかく、よく見てみると、与えられたパスが化けている。
d:\\python\\test\\test.py
という風なのが渡されてるとしたら、
d:\\\\python\\test\\test.py
にされている。多分、再評価されて最初のパス区切りだけが有効、後のは\\tとして認識されているのだろう。
Windowsならではの光景とでも言うか…うーむ。
ともかく、修正せねばなるまい。
いろいろ考えたのだがwindowsでもpythonはパスデリミタを/(スラッシュ)で認識してくれる。要するに、python pdb.pyで起動するときにあらかじめvimスクリプト内で\\を/に置換してしまえばいいのだ。
探した結果、vimのスクリプトでは
substitute(ソース文字列,置換元パターン,置換文字列,フラグ)
という関数がこの目的にぴったりであった。
具体的にはcurfilenameという変数に対象となるパスが入っていれば
let curfilename=substitute(curfilename,"\\","/","g")
とすればいい。
俺の場合、もう少しでmatchとwhileを使ってループさせてstrpartなど使ってパスを切り刻んで変換処理を行いそうだったのはナイショだ。