Hatena::ブログ(Diary)

Life is a Role Playing Game

 | 

2011-10-17

project.vim にパス入力だけでツリーを作るスクリプトを追加した

project.vim を使った場合、\C でプロジェクトを自動生成してくれるけど、入力項目が多くてうざったいです。

ツリーにするパスだけを入力するようにしてみました。


\R で更新した場合ディレクトリを追加した時の更新は行なってくれないので、作るのが楽にこしたことはありません。


  • ~/.vim/plugin/project.vim
if !exists("*<SID>CreateAutoProject()") "<<<
  function! s:CreateAutoProject()
    let path = inputdialog('Enter the Absolute Path: ')
    if !isdirectory(glob(path))
      echo path . ' is not a valid directory.'
      return
    end

    :Project 
    let line = line('.')
    call <SID>DoEntryFromDir(1, line, path, path, path, '.', '*', '*', foldlevel(line), 0)
  endfunction
endif ">>>
command CreateAutoProject call <SID>CreateAutoProject()

finish

project.vim の一番下の finish の上に貼り付ける。

:CreateAutoProject で起動で、 ~/work みたいにパスを追加するとツリーが生成されます。

nmap <c-e> :CreateAutoProject<CR> みたいに適当なキーにマッピングすると便利かもしれません。


vim script tips

vim script 修正するの死ぬほどめんどくさかったので、作業手順をメモっておきます。

もっと良い方法があればご教授お願いします(_ _)


https://sites.google.com/site/vimdocja/usr_41-html を参考に

mv ~/.vim/plugin/project.vim ~

cp ~/project.vim ~/work/vim

cd ~/work/vim

vim project.vim

一旦 .vim にある project.vim をホームディレクトリに移して project.vim を起動しないようにします。

project.vim は <SID> や s: のようなスクリプト内でしかスコープがないものを使っているので直接 project.vim を作業ディレクトリにコピーして手を入れることにしました。

  • ~/work/vim/project.vim(の最初あたり)
"if exists('loaded_project') || &cp
"  finish
"endif

ファイルの先頭にある多重読み込み防止スクリプトをコメントにします。


  • ~/work/vim/project.vim(の最後あたり)
function! Test()
  :call <SID>DoToggleProject()
  :Project

  " ここで変更した関数を呼んだりする
  :call <SID>CreateEntriesFromDir(1)
endfunction

nmap <c-h> :source project.vim<CR>:call Test()<CR>

finish

finish の前に再読み込みのマッピングをします。初回のみは :source project.vim をしないといけませんが次回からは Control + h を押すと自動的に読み込まれます。

Project のウィンドウを閉じないと変更が反映されないので DoToggleProject() で毎回閉じてます。


あとは project.vim 内の CreateEntriesFromDir や マッピング してる箇所に当たりをつけて弄ってみる。

function Test 内でメソッドを呼ぶ時はメソッド名の前に <SID>(スクリプトIDっぽい)を付けて呼ぶ。


みたいな感じでやってみたんですが、もっと良い方法がありそうな感じは凄いします(汗)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/alpha_neet/20111017/1318853524
 | 
Connection: close