При открытии vim найдите файл в древовидной структуре и выполните его, если он существует - PullRequest
2 голосов
/ 22 августа 2011

Я новичок в использовании vim ежедневно. Я делаю все возможное, чтобы создать хорошую среду. Я много работаю с проектами Django. И я хочу смоделировать проект, подобный установке, когда я редактирую файл внутри проекта django.

Давайте возьмем эту структуру каталогов:

/projects
    /django-app1
       manage.py
       settings.py
       .project
    /django-app1
       manage.py
       settings.py
       .project

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

Почему? Вот мой vimrc https://github.com/mariocesar/dotfiles/blob/master/.vimrc#L151, вы можете видеть, что я использую фрагмент для загрузки virtualenv, если он существует в переменных окружения, это очень круто, но я не думаю, что эффективно делать это каждый раз, когда я открываю файл, или, что еще лучше, добавьте несколько дополнительных путей к sys.path, так как у меня есть проекты с каталогами site-packages.

Итак:

  • Как я могу обнаружить определенный именованный файл, просматривая текущий каталог при открытии файла с помощью vim?
  • Как мне выполнить этот файл как скрипт vim?

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Существует несколько плагинов с именем local_vimrc, которые удовлетворяют вашим потребностям. Вот мой .

Кстати, ваш вопрос является дубликатом Vim: применить настройки к файлам в каталоге


РЕДАКТИРОВАТЬ: Недавние реализации плагинов local_vimrc используют возможности vim7. Почему-то это эквивалентно:

source <c-r>=findfile('.local_vimrc',expand('<afile>').';')<cr>

(спасибо, что напомнил мне о ';')

«Как-то», потому что многие важные функции отсутствуют:

  • возможность поиска всех найденных файлов в порядке убывания.
  • необязательная спецификация шаблона корневого каталога (например, '$HOME\|/opt/projects/)
  • внешние пути, такие как scp: //, ftp: //, http: // должны обрабатываться правильно (я не проверял, как они будут себя вести с findfile ())
  • должна быть возможность принудительного выполнения локального vimrc (s) до того, как плагин шаблона-расширителя вызовет расширение файла templare (типичное приложение - генерация ворот заголовка в C / C ++ .h файлы )

Следовательно, я предпочитаю использовать полный плагин, а не только одну строку, которая будет время от времени раздражать нас.

NB: мой плагин очень старый, он pre-vim7. Поскольку он работает (рекурсивно), я никогда не чувствовал необходимости переписывать его с помощью современных функций управления списком vim7.

1 голос
/ 22 августа 2011

При запуске vim

Я думаю

vim +'source **/.project' 

должно хорошо сработать.

Если у вас есть недавний bash, вы также можете напрямую

vim -S **/.project

При загрузке файла Python

Чтобы действовать при открытии / загрузке определенного файла:

autocmd BufReadPost *.py source %:h/**/.project

Загружает любой файл .project, найденный в поддереве, содержащем открываемый файл

autocmd BufReadPost *.py source %:h/.project

Загружает любой файл .project, найденный в том же каталоге, в котором находится открываемый файл

Чтобы удалить вышеуказанные автоматические команды (помните: добавление одной и той же команды дважды выполнит их дважды)

autocmd! BufReadPost *.py 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...