2008-03-09

project.vim の修正

vim script の project.vim を使っているのだけど、
  • project.vim のプロジェクトを定義しているファイルパスがデフォルトで ~/.vimprojects
    => それぞれのプロジェクトごとに指定しておきたい
  • プロジェクトのパスを絶対パスで定義する必要がある。
    =>絶対パスを調べるのが面倒
    =>プロジェクトを移すと設定しなおさないといけない
というのが不満だった。
なので
  • デフォルトはカレントディレクトリの .vimprojects を見る
  • プロジェクトのパス設定をカレントディレクトリからの相対パスで出きるようにする。
という修正を行った。
で、その project-1.4.1.tar.gz 用パッチ。

--- org/project.vim 2008-03-09 14:08:04.000000000 +0900
+++ new/project.vim 2008-03-09 14:12:47.000000000 +0900
@@ -21,7 +21,8 @@
let filename=bufname(g:proj_running)
else
if strlen(a:filename) == 0
- let filename ='~/.vimprojects' " Default project filename
+ "let filename ='~/.vimprojects' " Default project filename
+ let filename ='./.vimprojects' " Default project filename
else
let filename = a:filename
endif
@@ -971,12 +972,19 @@
let home=substitute(a:info, '.\{-}"\(.\{-}\)".*', '\1', '')
if strlen(home) != strlen(a:info) | let home=escape(home, ' ') | endif
endif
+ let parent_home=a:parent_home
+ " If project home path isn't absolute path, set current direcotry.
+ if parent_home == ''
+ if !s:IsAbsolutePath(home)
+ let parent_home = getcwd()
+ endif
+ endif
if strlen(home) == strlen(a:info)
- let home=a:parent_home
+ let home=parent_home
elseif home=='.'
- let home=a:parent_home
+ let home=parent_home
elseif !s:IsAbsolutePath(home)
- let home=a:parent_home.'/'.home
+ let home=parent_home.'/'.home
endif
return home
endfunction

project.vim のあるディレクトリで
patch -p1 < project.patch
で適用してね。

上を適用することで、
Project のパスを相対パスで指定できる。
元の様に絶対パスでも指定出来る。

後は、taglist.vim と連携できるとうれしいのだけども。

追記(2008-03-11 02:50):

考えなしに拡張すると、痛い目見た。
サブディレクトリでカレントディレクトリ変更すると、
後のファイルオープン操作がおかしくなる。
それを修正しました。
.vimprojects ファイルからの相対パスが使えるようになります。


diff -ur org/project.vim new/project.vim
--- org/project.vim 2006-10-13 22:47:08.000000000 +0900
+++ new/project.vim 2008-03-11 02:36:15.000000000 +0900
@@ -21,7 +21,8 @@
let filename=bufname(g:proj_running)
else
if strlen(a:filename) == 0
- let filename ='~/.vimprojects' " Default project filename
+ "let filename ='~/.vimprojects' " Default project filename
+ let filename ='./.vimprojects' " Default project filename
else
let filename = a:filename
endif
@@ -971,12 +972,18 @@
let home=substitute(a:info, '.\{-}"\(.\{-}\)".*', '\1', '')
if strlen(home) != strlen(a:info) | let home=escape(home, ' ') | endif
endif
+ let parent_home=a:parent_home
+ if parent_home == ''
+ if !s:IsAbsolutePath(home)
+ let parent_home = fnamemodify(bufname("%"),":p:h")
+ endif
+ endif
if strlen(home) == strlen(a:info)
- let home=a:parent_home
+ let home=parent_home
elseif home=='.'
- let home=a:parent_home
+ let home=parent_home
elseif !s:IsAbsolutePath(home)
- let home=a:parent_home.'/'.home
+ let home=parent_home.'/'.home
endif
return home
endfunction

2 comments:

Anonymous said...

サブディレクトリにあるファイルを開くとパスの指定がおかしくなりますね。

tf said...

サブディレクトリで、
CDを変更しているとダメみたい。