4

所以我一直在 vim 中使用 NERDTree,因为它增加了能够浏览文件系统的强大功能。借助书签功能,它非常适合在项目之间切换。

但是,我已经开始在 vim 中越来越多地使用 Marks,并且想知道是否有人知道允许您拥有一组标记的插件。就像我希望`C 转到我目前正在处理的项目中的配置文件一样。我可以在每次切换项目时设置它,但想知道是否有人知道打包它们的好方法。

考虑一下,我认为如果它在您进入目录时仅读取文件(例如使用 NERDTree 在书签之间切换......),那将是非常棒的。

无论如何,有人知道这样的事情吗?

4

2 回答 2

4

所以事实证明,标记没有存储在session中,而是存储在 viminfo 文件中!因此,我使用您的 vimrc 中的代码作为基础,并使用vim 帮助文件中会话部分底部的代码来创建一个函数,该函数允许我保存会话和 viminfo 文件。创建对我有用的基本项目管理!

这是我最终得到的代码。

if version >= 700
    " localoptions has to be here:
    " for some reason, new session loading code fails to set filetype of files in session
  set sessionoptions=blank,tabpages,folds,localoptions,curdir,resize,winsize,winpos
endif

command! -nargs=1 Project :call LoadProject('<args>')
command! -nargs=+ SaveProject :call SaveProject('<args>')

let s:projectloaded = 0
let s:loadingproject = 0
let s:projectname = ''

function! LoadProject(name)

    let s:projectloaded = 1
    let s:projectname = a:name
    exe "source ~/vimfiles/projects/".a:name.".vim"
    exe "rviminfo! ~/vimfiles/projects/".a:name.".viminfo"

endfunction

function! SaveProject(name)

    if a:name ==# ''
        if s:projectloaded == 1
            let pname = s:projectname
        endif
    else
        let pname = a:name
    endif

    if pname !=# ''
        let s:projectloaded = 0
        let s:projectname = ''
        exe "mksession! ~\\vimfiles\\projects\\".pname.".vim"
        exe "wviminfo! ~\\vimfiles\\projects\\".pname.".viminfo"
    endif

endfunction

autocmd VimLeave * call SaveProject()
于 2009-12-26T20:23:35.637 回答
3

我相信标记存储在会话文件中,这可以让你做你想做的事。会话管理本身是另一个主题,但您可以在这里找到一些想法。此代码已更新以包括对多个会话文件的支持,因此请在vimrc 文件中获取最新版本。

于 2009-12-24T19:11:45.187 回答