2011-11-22 186 views
3

当我在vim中工作时,我通常在屏幕上同时拥有多个缓冲区,并且需要在它们之间切换并打开很多新文件。我已经安装了Command-T插件来实现快速文件切换,但我遇到了一些问题。如何设置全局vim'项目根目录'路径

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

我希望它给我看所有的文件在我的项目即:

Project Folder: 
~/project1/ 

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

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

谢谢。

+0

是否有可用于识别的主要项目目录中的任何迹象?像目录名称中的特定模式,或仅存在于每个项目的主目录中的文件/目录? –

+0

不,但我可以做出改变,以便有例如。一个名为root的文件。 我想这可以用于递归搜索? –

回答

3

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

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

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

这个工作很好,谢谢! –

0

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

如果不是,设置:cd <path>可能会工作,但这是一个非常激烈的解决方案!

3

:help command-t-usage建议将:cd放入您的项目文件夹中,然后再使用它。

你也可以把它作为参数的路径在

:CommandT .. 
+0

嗨,我明白了;在尝试快速打开文件时似乎很麻烦。 –

+0

在这个线程中有几个很好的答案。我同意你的看法,默认的方式看起来很麻烦,但你可以像'nnoremap tt:CommandT .. '这样做,使整个事情变得更简单。 – romainl

+0

在附注中,我发现使用标签和'gf'足以满足我在项目中的大部分导航需求。 – romainl

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会在你的项目的根目录打开本身。

+0

这是非常有用的,这是情况 – arutaku

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')作为参数传递给命令-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 
+0

嗨伊丹,这看起来像我想要的东西 - 我可以与@David Brown的答案一起使用它找到项目根。 –