如何设置全局vim'项目根目录'路径

时间:2011-11-22 10:42:00

标签: vim path project

当我在vim工作时,我通常会在屏幕上同时有多个缓冲区,需要在它们之间切换并打开新文件。我已经安装了Command-T插件以方便快速切换文件,但我遇到了一些问题。

每当我按下Command-T时,它只显示我正在编辑的文件的同一文件夹(和子文件夹)中的文件。

我想让它向我展示我项目中的所有文件,例如:

Project Folder:
~/project1/

Current Buffer:
~/project1/front/js/file1.js

当我在缓冲区中按下Command + T时,我希望它显示从项目文件夹开始的文件。

感谢。

5 个答案:

答案 0 :(得分:3)

在使用之前,

:help command-t-usage建议:cd进入项目文件夹。

您也可以将路径作为参数传递给

:CommandT ..

答案 1 :(得分:3)

将以下功能放入.vimrc

function! FindProjectRoot(lookFor)
    let pathMaker='%:p'
    while(len(expand(pathMaker))>1)
        let pathMaker=pathMaker.':h'
        let fileToCheck=expand(pathMaker).'/'.a:lookFor
        if filereadable(fileToCheck)||isdirectory(fileToCheck)
            return expand(pathMaker)
        endif
    endwhile
    return 0
endfunction

该函数将向上搜索包含具有指定名称的文件或文件夹的父文件夹的当前文件,并返回该路径。这样,您可以将project文件放在项目的根文件夹中,并将FindProjectRoot('project')作为参数发送到Command-T

甚至更好 - 调用该文件project.vim,并使用它来加载每个项目的特定设置和键绑定。

修改 的 该功能只适用于Linux。请改用此功能:

function! FindProjectRoot(lookFor)
    let pathMaker='%:p'
    while(len(expand(pathMaker))>len(expand(pathMaker.':h')))
        let pathMaker=pathMaker.':h'
        let fileToCheck=expand(pathMaker).'/'.a:lookFor
        if filereadable(fileToCheck)||isdirectory(fileToCheck)
            return expand(pathMaker)
        endif
    endwhile
    return 0
endfunction

答案 2 :(得分:3)

您遇到的问题是因为CommandT在当前工作目录中搜索。您可以使用:pwd命令查看工作目录。当您使用gui打开文件时,它会将当前工作目录设置为该文件包含的目录。正如romainl所说,您只需:cd进入项目的根目录,然后CommandT将从那里搜索(记得:CommandTFlush

或者您可以使用ctrl-p(我个人更喜欢,因为它不需要编译C帮助程序)。它有一个选项ctrlp_working_path_mode选项将工作目录更改为包含以下目录或文件之一的第一个祖先:

.git/
.hg/
.bzr/
_darcs/
root.dir
.vimprojects

答案 3 :(得分:2)

免责声明:我编写了以下插件

如果您习惯将所有代码存储在同一个目录中,我建议您使用codepath.vim。所以,您可以执行以下操作:

map <silent> <C-T> :CommandT <c-r>=codepath#path()<CR><CR>
imap <silent> <C-T> <ESC>:CommandT <c-r>=codepath#path()<CR><CR>

CommandT将在你项目的根目录中打开。

答案 4 :(得分:0)

我不知道Command-T插件,但您可以尝试set path=<project_path>设置Vim的文件搜索路径。

如果没有,设置:cd <path>可能会有效,但这是一个非常大的解决方案!