Как установить глобальный путь vim 'root проекта' - PullRequest
4 голосов
/ 22 ноября 2011

Когда я работаю в vim, у меня обычно несколько экранов одновременно, и мне нужно переключаться между ними и часто открывать новые файлы.Я установил плагин Command-T, чтобы облегчить быстрое переключение файлов, но у меня есть несколько проблем с ним.

Каждый раз, когда я нажимаю Command-T, он показывает файлы только в одной папке (и подпапках).) файла, который я сейчас редактирую.

Я хочу, чтобы он показывал мне все файлы в моем проекте, например:

Project Folder:
~/project1/

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

Когда я нажимаю Command + T в буфере, яхотите, чтобы отображались файлы, начиная с папки проекта.

Спасибо.

Ответы [ 5 ]

3 голосов
/ 23 ноября 2011

Проблема в том, что CommandT выполняет поиск в текущем рабочем каталоге. Вы можете увидеть ваш рабочий каталог с помощью команды :pwd. Когда вы открываете файл с помощью графического интерфейса, он устанавливает ваш текущий рабочий каталог в каталог, который содержит файл. Как сказал romainl, вы можете просто :cd войти в корневую директорию вашего проекта, и тогда CommandT будет искать оттуда (не забудьте :CommandTFlush)

В качестве альтернативы вы можете использовать ctrl-p (что я лично предпочитаю, так как оно не требует компиляции вспомогательной программы на C). Параметр ctrlp_working_path_mode позволяет изменить рабочий каталог на первого предка, который содержит один из следующих каталогов или файлов:

.git/
.hg/
.bzr/
_darcs/
root.dir
.vimprojects
3 голосов
/ 22 ноября 2011

Поместите в ваш .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 и используйте его для загрузки определенных настроек и сочетаний клавиш для каждого проекта.

EDIT эта функция будет работать только на 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
3 голосов
/ 22 ноября 2011

:help command-t-usage рекомендует :cd в папку вашего проекта перед его использованием.

Вы также можете передать ему путь в качестве аргумента, как в

:CommandT ..
2 голосов
/ 22 ноября 2011

Отказ от ответственности: я написал следующий плагин

Я бы предложил использовать 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 голосов
/ 22 ноября 2011

Я не знаю о плагине Command-T, но вы можете попробовать set path=<project_path>, чтобы задать путь поиска файлов Vim.

Если нет, настройка :cd <path>, вероятно, будет работать, но это довольно радикальное решение!

...