Vim Formatprg Set Рабочий каталог - PullRequest
0 голосов
/ 22 мая 2018

:)

Я просто работаю с программами форматирования в сочетании с Vim .До сих пор я использовал neoformat как плагин, чтобы справиться с этим для меня.Но он отстает в некоторых моментах, и поэтому я попытался решить его сам, определив formatprg сам.Дело в том, что некоторые (может быть, все?) Форматеры имеют конфигурацию в корневом каталоге проектов.Потому что необходимо, чтобы код был отформатирован с этой конфигурацией, а не с глобальной настройкой по умолчанию, мне нужно настроить formatprg для этого.

Экспериментами с простым сценарием, который я использовал в качестве средства форматирования, я нашелчто скрипт / форматер выполняется в Vim's текущем рабочем каталоге.Раньше мой экземпляр Vim автоматически находился в корневом каталоге проектов, поэтому все это должно работать, и средство форматирования находит конфигурацию проектов.Но я не хочу на это полагаться.Поэтому меня интересует, можно ли передать рабочий каталог в formatprg независимо от текущего Vims .Я не смог найти такой вариант в документации, но это не значит, что это не так.

В качестве альтернативы я подумал о скрипте, который принимает программу форматирования и ее аргументы, передаваемые * 1019.*, но сначала измените рабочий каталог перед вызовом this и передайте вывод в его собственный stdout.Поэтому назовите его оболочкой, которая просто проверяет правильность каталога.
Так что вместо setlocal formatprg=prettier\ --stdin используйте его с setlocal formatprg=formatwrapper\ prettier\ --stdin.

Каково ваше мнение?Спасибо за помощь!

1 Ответ

0 голосов
/ 22 мая 2018

Вот простая функция, которая возвращает корневой каталог вашего проекта на основе наличия файла package.json в текущем каталоге или родительском каталоге:

function! FindRoot() abort
    return fnamemodify(findfile('package.json", '.;'), ':h')
endfunction

Вы можете использовать его в своем formatprg вот так:

let &l:formatprg = 'cd ' . FindRoot() . ' && prettier --stdin'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...