【问题标题】:ALE Fixer Configuration in NeovimNeovim 中的 ALE Fixer 配置
【发布时间】:2021-05-15 01:25:18
【问题描述】:

我想配置我的 Ruby 修复程序以执行以下序列:

  1. 关闭语法
  2. 运行 rubocop 修复程序
  3. 打开语法

根据: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

我做错了什么?

【问题讨论】:

    标签: function neovim rubocop linter


    【解决方案1】:

    我找到了另一种方法来完成这项工作。

    我没有尝试在修复程序对象中对函数调用进行排序,而是使用了自动组。

    首先我定义了以下函数:

    function! SyntaxTurnOff()
      "Turns syntax off only in current buffer
      exec "syntax clear"
    endfunction
    
    function! SyntaxTurnOn()
      exec "syntax on"
    endfunction
    

    然后,我使用了内置的ALEFixPreALEFixPost 自动命令:

    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 必须做的任何事情来重绘带有语法突出显示的缓冲区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-21
      • 2019-01-20
      • 2017-04-29
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      相关资源
      最近更新 更多