Vim Ctrlp插件:ctrlp_root_markers忽略我设置的值?

时间:2015-07-16 10:44:00

标签: vim ctrlp

我的根项目目录包含以下内容:

root/
    .git
    Assets
    Library
    obj
    Temp
    etc.

默认情况下,Ctrlp会在此根目录中查找。我想将它开始查找的目录设置为“Assets”。我查看了文档并阅读了一些我应该使用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

然后重新映射C-p:

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

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

我在设置根标记时遇到了什么错误?

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您所看到的是预期的行为。根据{{​​3}}:

Assets

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

如果您打算将项目根目录更改为 <?php $url = 'http://username:password@hostname:9090/path?arg=value#anchor'; from php manual var_dump(parse_url($url)); var_dump(parse_url($url, PHP_URL_SCHEME)); var_dump(parse_url($url, PHP_URL_USER)); var_dump(parse_url($url, PHP_URL_PASS)); var_dump(parse_url($url, PHP_URL_HOST)); var_dump(parse_url($url, PHP_URL_PORT)); var_dump(parse_url($url, PHP_URL_PATH)); var_dump(parse_url($url, PHP_URL_QUERY)); var_dump(parse_url($url, PHP_URL_FRAGMENT)); ?> ,那么您应该包含位于该文件夹内的文件/文件夹。