Neovim 中的 ALE 固定器配置
ALE Fixer Configuration in Neovim
我想配置我的 Ruby 修复程序来执行以下序列:
- 关闭语法
- 运行 rubocop 修复者
- 打开语法
根据:help ale-fix-configuration
:
Synchronous functions and asynchronous jobs will be run in a sequence
for fixing files, and can be combined. For example:
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
我做错了什么?
我找到了另一种方法来完成这项工作。
我没有尝试在固定器对象中对函数调用进行排序,而是使用了自动分组。
首先我定义了以下函数:
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 必须做些什么来用语法高亮重绘缓冲区。
我想配置我的 Ruby 修复程序来执行以下序列:
- 关闭语法
- 运行 rubocop 修复者
- 打开语法
根据:help ale-fix-configuration
:
Synchronous functions and asynchronous jobs will be run in a sequence for fixing files, and can be combined. For example:
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
我做错了什么?
我找到了另一种方法来完成这项工作。
我没有尝试在固定器对象中对函数调用进行排序,而是使用了自动分组。
首先我定义了以下函数:
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 必须做些什么来用语法高亮重绘缓冲区。