如何解决Neovim 中的 ALE Fixer 配置
我想配置我的 Ruby 修复程序以执行以下序列:
- 关闭语法
- 运行 rubocop fixer
- 开启语法
根据:help ale-fix-configuration
:
同步函数和异步作业将按顺序运行 用于修复文件,并且可以组合。例如:
let g:ale_fixers = {
\ 'javascript': [
\ 'DoSomething',\ 'eslint',\ {buffer,lines -> filter(lines,'v:val !=~ ''^\s*//''')},\ ],\}
我试着按照这个例子:
function! SyntaxTurnOff()
exec "syntax off"
endfunction
function! SyntaxTurnOn()
exec "syntax on"
endfunction
" FIXERS
let g:ale_fixers = {
\ '*': ['remove_trailing_lines','trim_whitespace'],\ 'ruby': [
\ 'SyntaxTurnOff',\ 'rubocop',\ 'SyntaxTurnOn',\],\ 'python': ['flake8'],\ 'json': ['jq'],\}
但是,当我尝试通过在编辑器中调用 :ALEFix
来执行它时,出现以下错误:
Error detected while processing function ale#fix#Fix[37]..<SNR>305_RunFixer:
line 17:
E118: Too many arguments for function: SyntaxTurnOff
我做错了什么?
解决方法
我找到了另一种方法来完成这项工作。
我没有尝试在 fixers 对象中对函数调用进行排序,而是使用了自动分组。
首先我定义了以下函数:
function! SyntaxTurnOff()
"Turns syntax off only in current buffer
exec "syntax clear"
endfunction
function! SyntaxTurnOn()
exec "syntax on"
endfunction
然后,我使用了内置的 ALEFixPre
和 ALEFixPost
自动命令:
augroup YourGroup
autocmd!
autocmd User ALEFixPre call SyntaxTurnOff()
autocmd User ALEFixPost call SyntaxTurnOn()
augroup END
我的修复程序恢复到以前的简单配置。
" FIXERS
let g:ale_fixers = {
\ '*': ['remove_trailing_lines','trim_whitespace'],\ 'ruby': ['rubocop'],\ 'python': ['flake8'],\ 'json': ['jq'],\}
我很高兴听到更好的方法,但这对我有用,我希望它可以帮助其他人。
这是因为我有一个 400 行的文件,修复速度非常慢,不是因为 rubocop,而是因为 Neovim 中的语法突出显示。以前,运行 ALEFix 会占用该缓冲区很长时间;现在它不是即时的,但它非常快。公平地说,这不是因为 ALEFix 本身,而是因为 Neovim 必须做的任何事情来重新绘制带有语法高亮显示的缓冲区。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。