Vim Formatprg设置工作目录

时间:2018-05-22 12:23:48

标签: vim formatting

:)

我只是将格式化程序与 Vim 结合使用。到目前为止,我使用neoformat作为插件来处理这个问题。但它在某些方面落后,所以我试着通过自己定义formatprg来解决它。关键是一些(可能是所有?)格式化程序在项目根目录中有一个配置。因为有必要使用此配置而不是全局默认代码格式化代码,我需要为此设置formatprg

通过使用我用作格式化程序的简单脚本的实验,我发现脚本/格式化程序是在 Vim的当前工作目录中执行的。我曾经将 Vim 实例自动放在项目的根目录中,所以这一切都应该有效,格式化程序会找到项目配置。但我不想依赖于此。所以我很感兴趣是否可以将工作目录独立于 Vims 当前的formatprg。我在文件中找不到这样的选项,但这并不意味着它没有。

作为一种替代方案,我想到了一个脚本,它将格式化程序及其参数传递给formatprg,但在调用它之前首先更改工作目录并将输出传递给它自己的stdout。所以称之为包装器,只需确保目录正确即可 因此,而不是像setlocal formatprg=prettier\ --stdin那样使用setlocal formatprg=formatwrapper\ prettier\ --stdin

你有什么看法? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

这是一个简单的函数,它根据当前目录或父目录中是否存在package.json文件返回项目的根目录:

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

您可以在formatprg中使用它,如下所示:

let &l:formatprg = 'cd ' . FindRoot() . ' && prettier --stdin'