VIM: чтение «переменной» из текущего каталога / проекта - PullRequest
0 голосов
/ 16 октября 2018

Так что в моем .vimrc у меня есть это:

let g:syntastic_python_pylint_post_args="--max-line-length=80"

Я хочу иметь что-то вроде:

let g:syntastic_python_pylint_post_args="$(cat .line_length.txt)"

И я хочу, чтобы эта команда cat запускалась всякий раз, когда я открываюvim.

Например, если у меня есть файл в проекте

myproject/.line_length.txt

И содержимое .line_length.txt, например, 120, и я запускаю

vim

внутри этого каталога, он должен прочитать этот файл и установить содержимое файла в переменную.

...

Возможно ли это как-то?

Я пытался использовать специфичные для проекта файлы .vimrc, но он, кажется, не читает

let g:syntastic_python_pylint_post_args="--max-line-length=120"

Он будет читать set ... строк, но не let g: ... строк.

1 Ответ

0 голосов
/ 16 октября 2018

Дословный перевод вашего попытанного синтаксиса $(...) будет выглядеть так:

let g:syntastic_python_pylint_post_args = substitute(system('cat .line_length.txt'), '\n\+$', '', '')

Но на самом деле для этого не нужно запускать внешнюю команду.Vim имеет функцию низкого уровня :help readfile():

let g:syntastic_python_pylint_post_args = readfile('.line_length.txt')[0]

Предостережения

  • В зависимости от местоположения, в котором вы запускаете Vim, конфигурация может не существовать,Вы должны учитывать это, возможно, используя условное условие filereadable() или просто игнорируя любые ошибки с помощью :silent!.
  • Некоторые плагины только читают свои переменные конфигурации во время запуска, а после этого игнорируют любые изменения вЭто.Это должно подойти для вашего плана в ~/.vimrc, но может повлиять на вашу способность «перезагрузить» другой проект во время выполнения (см. Ниже).

Обновление в локальной конфигурации

Ваше решение зависит от запуска Vim в «каталоге проекта».Вы также упомянули специфичный для проекта vimrc в качестве альтернативы.Вот несколько вариантов для этого:

Центральная конфигурация

Если можно централизованно настраивать определенные команды / локальные исключения, вы можете поместить такие autocmds в ваш ~/.vimrc:

:autocmd BufRead,BufNewFile /path/to/dir/* setlocal ts=4 sw=4

Важно использовать :setlocal вместо :set, а также :map <buffer> ... и :command! -buffer ....

С другой стороны, если вы хотите, чтобы конкретная конфигурация сохранялась вместе с проектом (и вы не хотите встраивать это во все файлы с помощью modelines ), у вас есть следующие две опции:

Локальная конфигурация со встроенной функциональностью

Если вы всегдаЗапустите Vim из корневого каталога проекта, встроенный

:set exrc

позволяет считывать файл .vimrc из текущего каталога.Вы можете поместить туда команды :set ts=4 sw=4.

Локальная конфигурация через плагин

В противном случае вам понадобится помощь плагина;на vim.org их несколько;Я могу порекомендовать плагин localrc (особенно с моими собственными улучшениями ), который даже допускает локальную конфигурацию для конкретного типа файла.

Обратите внимание, что чтение конфигурации изфайловая система имеет последствия для безопасности;Вы можете захотеть :set secure.

...