:)
我只是将格式化程序与 Vim 结合使用。到目前为止,我使用neoformat
作为插件来处理这个问题。但它在某些方面落后,所以我试着通过自己定义formatprg
来解决它。关键是一些(可能是所有?)格式化程序在项目根目录中有一个配置。因为有必要使用此配置而不是全局默认代码格式化代码,我需要为此设置formatprg
。
通过使用我用作格式化程序的简单脚本的实验,我发现脚本/格式化程序是在 Vim的当前工作目录中执行的。我曾经将 Vim 实例自动放在项目的根目录中,所以这一切都应该有效,格式化程序会找到项目配置。但我不想依赖于此。所以我很感兴趣是否可以将工作目录独立于 Vims 当前的formatprg
。我在文件中找不到这样的选项,但这并不意味着它没有。
作为一种替代方案,我想到了一个脚本,它将格式化程序及其参数传递给formatprg
,但在调用它之前首先更改工作目录并将输出传递给它自己的stdout。所以称之为包装器,只需确保目录正确即可
因此,而不是像setlocal formatprg=prettier\ --stdin
那样使用setlocal formatprg=formatwrapper\ prettier\ --stdin
。
你有什么看法? 谢谢你的帮助!
答案 0 :(得分:1)
这是一个简单的函数,它根据当前目录或父目录中是否存在package.json
文件返回项目的根目录:
function! FindRoot() abort
return fnamemodify(findfile('package.json", '.;'), ':h')
endfunction
您可以在formatprg
中使用它,如下所示:
let &l:formatprg = 'cd ' . FindRoot() . ' && prettier --stdin'