basyura's blog

あしたになったらほんきだす。

BookMark plugin for vim

定石が分からないけど勉強がてら作ってみた。
bookmark.vim はファイルの任意の位置を記憶できるんだけど、ディレクトリを覚えさせられなくて不便。ディレクトリを覚えられるようにしてみた。

ブックマークの一覧を開く

:B

新しいタブで一覧を表示

Enter で指定のディレクトリを netrw で表示

ブックマークに追加

:BA

編集しているファイルのあるディレクトリ、netrw で開いているディレクトリを追加

ブックマーク一覧を編集

:BE

ソース

github にもあっぷ。http://github.com/basyura/b.vim/tree/master

scriptencoding utf-8
" b.vim
" Author : basyura <basyura@gmail.com>
" version: $Id$
" 
" :B 
"    ブックマークリストを表示
"    ブックマークリストで Enter を押すと netrw で表示
" :BA 
"    ブックマークリストにパスを追加
" :BE 
"    ブックマークリストを編集
"

command! B   call <SID>Blist()
command! BA  call <SID>BAdd()
command! BE  call <SID>BEdit()
" ブックマークリストの保存先
let s:btags_path = expand('<sfile>:p:h') . "/btags"
" ファイルを読み込めない場合
if !filereadable(s:btags_path)
    " ファイルを生成する
    exe "redir! > " . s:btags_path
    silent echon "----------------------------------"
    silent echo  "BookMark"
    silent echo  "----------------------------------"
    silent echo  ""
    silent redir END
endif
"
" ブックマークのリストを表示
"
function! s:Blist()
    " 新しいタブを開く
    tabnew
    " ブックマークのリストを読み込む
    exe "read " . s:btags_path
    " Enter 押下時に B_Jump を呼ぶ
    noremap <Enter> :call B_Jump()<cr>
    " 変更を受け付けたことにする
    set nomodified
    " 変更させない
    "set nomodifiable
endfunction
"
" ブックマークのリストに追加
"
function! s:BAdd() 
    " 追加するパス
    let path = expand("%:p:h")
    " 出力先をファイルに
    exe "redir! >> " . s:btags_path
    " パスを出力
    silent echo path
    " 出力終了
    silent redir END
    " メッセージ
    echo "add " . path
endfunction
"
" ブックマークリストを編集
"
function! s:BEdit()
    exe "tabnew " . s:btags_path
endfunction
"
" ブックマークリストで Enter 押下時に呼び出される
" カレント行のパスを netrw で表示
"
function! B_Jump()
    " カレントの行を取得
    let path = getline(".")
    " ディレクトリの場合
    if isdirectory(path)
        " 編集開始
        execute "e! " . getline(".")
        " マップを戻す
        noremap <Enter> <Enter>
    else
        " ディレクトリでない場合はメッセージ通知
        echo path . " is not directory"
    endif
endfunction

問題点

  • Mac環境でしか動かしたことない
  • パスに空白が混ざると移動できない
  • 機能が貧弱


地道に作って行くか