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

如何设置全局vim';项目根目录';路径,vim,path,project,Vim,Path,Project,当我在vim中工作时,我通常一次在屏幕上有多个缓冲区,需要在它们之间切换并打开很多新文件。我已经安装了Command-T插件,以方便快速文件切换,但我有一些问题 每当我按Command-T时,它只显示与我当前编辑的文件相同文件夹(和子文件夹)中的文件 我想让它显示我项目中的所有文件,即: Project Folder: ~/project1/ Current Buffer: ~/project1/front/js/file1.js 当我在缓冲区中按Command+T时,我希望它显示从项目文件

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

每当我按Command-T时,它只显示与我当前编辑的文件相同文件夹(和子文件夹)中的文件

我想让它显示我项目中的所有文件,即:

Project Folder:
~/project1/

Current Buffer:
~/project1/front/js/file1.js
当我在缓冲区中按Command+T时,我希望它显示从项目文件夹开始的文件


谢谢。

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


如果没有,设置
:cd
可能会起作用,但这是一个相当激进的解决方案

:help命令-t-usage
建议在使用项目文件夹之前将
:cd
放入项目文件夹中

您还可以将路径作为参数传递给它,如中所示

:CommandT ..

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

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

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

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

将以下函数放入
.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
该函数将从当前文件向上搜索包含具有指定名称的文件或文件夹的父文件夹,并返回该路径。这样,您就可以将
项目
文件放在项目的根文件夹中,并将
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

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

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

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

是否有任何标志可用于标识主项目目录?比如目录名中的某个模式,或者仅存在于每个项目主目录中的文件/目录?不,但我可以进行更改,例如,在根目录中有一个名为project的文件。我想这可以用于递归搜索?嗨,我明白;在尝试快速打开文件时似乎有很多麻烦。在这个帖子中有一些不错的答案。我同意你的看法,默认方式似乎很麻烦,但你可以做一些类似于
nnoremap tt:command..
的事情来简化整个过程。顺便说一句,我发现使用标记和
gf
足以满足我在项目中的大部分导航需求。嗨,伊丹,这看起来像是我想要的东西——我可以将它与@davidbrown的答案结合使用来查找项目根。它非常有用,这是一个很好的例子