1

我的根项目目录有以下内容:

root/
    .git
    Assets
    Library
    obj
    Temp
    etc.

默认情况下,Ctrlp 在此根目录中查找。我想将它开始查找的目录设置为“资产”。我查看了文档并阅读了一些我应该使用的链接ctrlp_root_markers,所以在我的vimrc

let g:ctrlp_root_markers = ['Assets']

但是,当我在 Assets 下的任何源文件中时,在 vim 中调用 Ctrlp 时,它总是从root目录开始索引/搜索。它只是忽略了我在根标记列表中设置的值。(我也试过弄乱ctrlp_working_path_mode

我最终使用了这个功能(我发现它潜伏着):

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).'/'.a:lookFor
        endif
    endwhile
    return 0
endfunction

然后重新映射 Cp:

nnoremap <C-p> :CtrlP `=FindProjectRoot("Assets")`<CR>

工作正常。但是如果核心插件中应该包含一个功能,我觉得必须解决它是多余的。

任何想法我在设置我的根标记时做错了什么?

感谢任何帮助!

4

1 回答 1

1

您所看到的是预期的行为。根据文档

'g:ctrlp_root_markers'
Use this to set your own root markers in addition to the default ones (.git,
.hg, .svn, .bzr, and _darcs). Your markers will take precedence:
let g:ctrlp_root_markers = ['']

请注意,在 git 项目中, .git 文件夹位于项目根目录中,如您的示例所示。通过包含Assets作为根标记,您什么都没有改变。

如果您打算将项目根目录更改为,Assets那么您应该包含一个位于该文件夹内的文件/文件夹。

于 2015-07-16T12:41:47.047 回答