Избегайте идеи «изменения рабочего каталога» или различия между «рабочим каталогом и корнем проекта», потому что почти ни один инструмент не подготовлен для правильной обработки этих понятий.
Единственные инструменты, которые это делают (например, git), - это те, которые не заботятся о текущем каталоге с самого начала.
В противном случае было бы безумием пытаться заставить все работать без побочных эффектов. «Рабочий каталог» — понятие слишком фундаментальное, чтобы даже пытаться его изменить в работающей программе.
Лучший подход — открыть новые сеансы Vim внутри каталогов, где вы хотите выполнять «локальные» действия, и переключиться обратно на сеанс «проекта» для запуска команд проекта. Vim защитит вас от случайной перезаписи изменений в другом сеансе.
Альтернативой является перенос команд в оболочки, чтобы они могли иметь свои «собственные» рабочие каталоги, например:
:!cd ../../..; ctags -R
(Что позволит вам регенерировать файл тегов для проекта, а не только для текущего каталога)
or:
:!cd ../../..; grep -r foo **/*
Но любой вывод с именами файлов будет относиться к этому корневому каталогу, а не к текущему.
Итак, вы можете предпочесть:
:!cd ../../..; vim
который создает новый сеанс Vim внутри текущего, но в контексте корневого каталога.
Или вы можете предпочесть обратное (при условии, что Vim работает в корневом каталоге проекта):
:!cd $(dirname %); vim
Это позволяет вам работать в каталоге текущего файла, и вам придется выйти в основной сеанс, чтобы снова запустить инструменты для всего проекта.
Таким образом, вместо «изменения» каталогов вы «меняете сеансы vim» (либо имея 2 сеанса, либо «вкладывая» один в другой, как указано выше).
person
Cezary Baginski
schedule
16.01.2015
tags
, где вы можете получить доступ к каждому файлу в вашем проекте… - person romainl   schedule 16.01.2015