dense-analysis/ale

GitHub: dense-analysis/ale

ALE 是一个为 Vim/Neovim 提供异步代码检查、自动修复及 LSP 集成的插件,旨在提升开发时的代码质量和效率。

Stars: 13990 | Forks: 1487

# 异步代码检查引擎 [![Vim](https://img.shields.io/badge/VIM-%2311AB00.svg?style=for-the-badge&logo=vim&logoColor=white)](https://www.vim.org/) [![Neovim](https://img.shields.io/badge/NeoVim-%2357A143.svg?&style=for-the-badge&logo=neovim&logoColor=white)](https://neovim.io/) [![CI](https://img.shields.io/github/actions/workflow/status/dense-analysis/ale/main.yml?branch=master&label=CI&logo=github&style=for-the-badge)](https://github.com/dense-analysis/ale/actions?query=event%3Apush+workflow%3ACI+branch%3Amaster++) [![加入 Dense Analysis Discord 服务器](https://img.shields.io/badge/chat-Discord-5865F2?style=for-the-badge&logo=appveyor)](https://discord.gg/5zFD6pQxDk) ![ALE Logo 由 Mark Grealish 设计 - https://www.bhalash.com/](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/0a36c185e8033128.jpg) ALE(异步代码检查引擎)是一个插件,可在 Neovim 0.7.0+ 和 Vim 8.2+ 中,于你编辑文本文件时提供语法检查和语义错误的代码检查功能,并充当 Vim 的[语言服务器协议](https://langserver.org/)客户端。 ALE 利用 Neovim 和 Vim 8 的任务控制函数及定时器,在文本缓冲区的内容上运行代码检查器,并在 Vim 中文本更改时返回错误。这使得在将文件保存回文件系统之前,就能在 Vim 中正在编辑的文件中显示警告和错误。 换句话说,此插件允许你在输入时进行代码检查。 ALE 支持通过命令行工具以非阻塞方式修复代码,其 `:ALEFix` 功能支持多种语言的工具,如 `prettier`、`eslint`、`autopep8` 等。 ALE 作为“语言客户端”支持多种语言服务器协议功能,包括: * 诊断(通过语言服务器协议检查器) * 转到定义(`:ALEGoToDefinition`) * 补全(内置补全支持,或与 Deoplete 配合) * 查找引用(`:ALEFindReferences`) * 悬停信息(`:ALEHover`) * 符号搜索(`:ALESymbolSearch`) 如果你不关心语言服务器协议,ALE 将不会加载任何与之相关的代码,除非有需要。ALE 的总体目标之一是,你不使用的功能不会带来任何开销。 **寻求帮助:** 如果你希望通过管理提交的许多问题和拉取请求来帮助维护此插件,请通过 [dev@w0rp.com](mailto:dev@w0rp.com?subject=Helping%20with%20ALE) 向作者发送邮件。 如果你喜欢这个插件,欢迎贡献,或者在 [w0rp.com](https://w0rp.com) 查看作者的其他内容。 ## 为什么选择 ALE? ALE 已经存在多年,在 Vim 中运行异步代码检查和修复的方式有很多。ALE 提供以下特点: * ALE 自身无依赖 * 轻量级插件架构(无需 JavaScript 或 Python) * 内存占用低 * 几乎可在任何地方运行,包括远程 shell 和 `git commit` 中 * 开箱即用地支持运行特定的代码检查器和语言服务器 * 使用自定义代码实现近乎零配置的更好默认设置 * 高度可定制且文档完善(`:help ale-options`) * 插件的破坏性变更极为罕见 * 与 Neovim 的 LSP 客户端(0.8+)和诊断(0.7+)集成 * 支持较旧的 Vim 和 Neovim 版本 * 支持 Windows * 与其他插件良好集成 ## 赞助 如果你想向 Dense Analysis 捐赠以感谢 ALE,请考虑访问我们的[赞助页面](https://denseanalysis.org/sponsors/)。 资金将用于支付我们的托管费用和研究。访问我们的网站时,请随时使用我们的教育资源和其他推荐工具。 ## 支持的语言和工具 ALE 支持多种语言和工具。请参阅[支持的语言和工具](supported-tools.md)页面中的[完整列表](supported-tools.md)。 ## 使用方法 ### 代码检查 安装此插件后,在受支持的语言和工具中正确安装的情况下编辑文件时,此插件会将你的文本缓冲区内容发送给各种程序,以检查程序的语法和语义。默认情况下,当你打开新缓冲区或编辑文件时,代码检查器会在后台重新运行以检查你的语法。 代码检查的行为可以通过多种选项进行配置,记录在 [Vim 帮助文件](doc/ale.txt)中。有关 ALE 提供的选项的更多信息,请查阅 `:help ale-options` 获取全局选项,查阅 `:help ale-integration-options` 获取特定于检查器的选项。 ### 修复 ALE 可以使用 `ALEFix` 命令修复文件。函数需要在每个缓冲区中通过 `b:ale_fixers` 配置,或通过 `g:ale_fixers` 全局配置。 推荐配置修复器的方法是在 ftplugin 文件中定义一个列表。 ``` " In ~/.vim/ftplugin/javascript.vim, or somewhere similar. " Fix files with prettier, and then ESLint. let b:ale_fixers = ['prettier', 'eslint'] " Equivalent to the above. let b:ale_fixers = {'javascript': ['prettier', 'eslint']} ``` 你也可以在 vimrc 中使用 `g:ale_fixers` 在 ALE 加载之前或之后配置你的修复器。 文件类型位置的 `*` 将把一个修复器列表应用于所有在字典中不匹配任何文件类型的文件。 注意,不支持对 `g:ale_fixers` 使用普通列表。 ``` " In ~/.vim/vimrc, or somewhere similar. let g:ale_fixers = { \ '*': ['remove_trailing_lines', 'trim_whitespace'], \ 'javascript': ['eslint'], \} ``` 如果你想在保存文件时自动修复它们,需要在 vimrc 中开启一个设置。 ``` " Set this variable to 1 to fix files when you save them. let g:ale_fix_on_save = 1 ``` `:ALEFixSuggest` 命令将建议一些支持的代码修复工具。 `g:ale_fixers` 和 `b:ale_fixers` 也可以接受函数,包括 lambda 函数,作为修复器,用于使用自定义工具修复文件。 请参阅 `:help ale-fix` 获取有关如何使用 ALE 修复文件的完整信息。 ### 补全 ALE 通过在输入时劫持全能补全功能提供了一些补全支持。ALE 的所有补全信息必须来自语言服务器协议检查器,或来自 TypeScript 的 `tsserver`。 在 Neovim 0.8+ 中运行 ALE 时,ALE 将默认与 Neovim 的 LSP 客户端集成,任何使用原生 LSP 客户端的自动补全插件在 ALE 运行语言服务器时都将有效。 推荐在 Neovim 中尝试 [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) 作为补全插件。 ALE 与 [Deoplete](https://github.com/Shougo/deoplete.nvim) 集成为补全源,名为 `'ale'`。你可以配置 Deoplete 仅使用 ALE 作为补全信息的来源,或与其他来源混合使用。 ``` " Use ALE and also some plugin 'foobar' as completion sources for all code. call deoplete#custom#option('sources', { \ '_': ['ale', 'foobar'], \}) ``` ALE 还提供自己的自动补全支持,不需要任何其他插件,可以通过在加载 ALE 前更改设置来启用。 ``` " Enable completion where available. " This setting must be set before ALE is loaded. " " You should not turn this setting on if you wish to use ALE as a completion " source for other completion plugins, like Deoplete. let g:ale_completion_enabled = 1 ``` ALE 提供了一个全能补全函数,你可以使用 `` 手动触发补全。 ``` set omnifunc=ale#completion#OmniFunc ``` ALE 支持从外部模块自动导入。此行为默认启用,可以通过设置禁用: ``` let g:ale_completion_autoimport = 0 ``` 注意,禁用自动导入可能导致来自某些 LSP 服务器(例如 eclipselsp)的补全项缺失。更多信息请参阅 `:help ale-completion`。 ### 转到定义 ALE 支持使用任何启用的语言服务器协议检查器和 `tsserver`,通过 `:ALEGoToDefinition` 命令跳转到光标下单词的定义。在 Neovim 0.8+ 中,你也可以使用 Neovim 内置的 `gd` 快捷键等。 更多信息请参阅 `:help ale-go-to-definition`。 ### 查找引用 ALE 支持使用任何启用的语言服务器协议检查器和 `tsserver`,通过 `:ALEFindReferences` 命令查找光标下单词的引用。 更多信息请参阅 `:help ale-find-references`。 ### 悬停信息 ALE 支持“悬停”信息功能,通过 `ALEHover` 命令打印光标处符号的简要信息,这些信息来自语言服务器协议检查器和 `tsserver`。 默认情况下,当光标停留在符号上且同一行没有问题时,将显示截断的信息。 在 Vim 或 GVim 中,可以通过将鼠标悬停在符号上来在 `balloon` 工具提示中显示信息。鼠标悬停在 GVim 中默认启用,在终端中的 Vim 8.1+ 中需要配置。 更多信息请参阅 `:help ale-hover`。 ### 符号搜索 ALE 支持通过 `ALESymbolSearch` 命令,使用语言服务器协议检查器搜索工作区符号。 可以执行搜索查询以查找与给定查询字符串相似的函数、类型等。 更多信息请参阅 `:help ale-symbol-search`。 ### 重构:重命名、操作 ALE 支持使用 `ALERename` 命令重命名代码中的符号,如变量或类名。 `ALEFileRename` 将重命名文件并修复导入路径(仅限 tsserver)。 `ALECodeAction` 将对光标处或应用于可视范围选择执行操作,例如自动修复错误。 更多信息请参阅 `:help ale-refactor`。 ## 安装 以常规方式将 ALE 添加到你的运行时路径中。 如果你阅读 `:help ale` 有困难,请尝试以下步骤。 ``` packloadall | silent! helptags ALL ``` #### Vim `packload`: ``` mkdir -p ~/.vim/pack/git-plugins/start git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/git-plugins/start/ale ``` #### Neovim `packload`: ``` mkdir -p ~/.local/share/nvim/site/pack/git-plugins/start git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.local/share/nvim/site/pack/git-plugins/start/ale ``` #### Windows `packload`: ``` # 在“Git for Windows”的 Bash 终端中运行以下命令 mkdir -p ~/vimfiles/pack/git-plugins/start git clone --depth 1 https://github.com/dense-analysis/ale.git ~/vimfiles/pack/git-plugins/start/ale ``` #### [vim-plug](https://github.com/junegunn/vim-plug) ``` Plug 'dense-analysis/ale' ``` #### [Vundle](https://github.com/VundleVim/Vundle.vim) ``` Plugin 'dense-analysis/ale' ``` #### [Pathogen](https://github.com/tpope/vim-pathogen) ``` git clone https://github.com/dense-analysis/ale ~/.vim/bundle/ale ``` #### [lazy.nvim](https://github.com/folke/lazy.nvim) ``` { 'dense-analysis/ale', config = function() -- Configuration goes here. local g = vim.g g.ale_ruby_rubocop_auto_correct_all = 1 g.ale_linters = { ruby = {'rubocop', 'ruby'}, lua = {'lua_language_server'} } end } ``` ## 贡献 如果你想看到更多语言和工具的支持,请[创建一个问题](https://github.com/dense-analysis/ale/issues)或[创建一个拉取请求](https://github.com/dense-analysis/ale/pulls)。 如果你的工具可以从 stdin 读取,或者你有好的代码建议,我们将乐于添加支持。 如果你对项目的总体方向感兴趣,请查看 [wiki 主页](https://github.com/dense-analysis/ale/wiki)。wiki 包含了未来的路线图等更多信息。 如果你想讨论 ALE 等,请访问此处的 Dense Analysis Discord 服务器:https://discord.gg/5zFD6pQxDk ## 常见问题解答 ### 如何禁用特定的代码检查器? 默认情况下,所有支持语言的所有可用工具都会运行。如果你想只选择一部分工具,可以为单个缓冲区定义 `b:ale_linters`,或全局定义 `g:ale_linters`。 推荐配置检查器的方法是在 ftplugin 文件中定义一个列表。 ``` " In ~/.vim/ftplugin/javascript.vim, or somewhere similar. " Enable ESLint only for JavaScript. let b:ale_linters = ['eslint'] " Equivalent to the above. let b:ale_linters = {'javascript': ['eslint']} ``` 你也可以在 vimrc 文件中声明你想运行哪些检查器,在 ALE 加载之前或之后。 ``` " In ~/.vim/vimrc, or somewhere similar. let g:ale_linters = { \ 'javascript': ['eslint'], \} ``` 对于字典中未指定的所有语言,将为这些语言运行所有可能的检查器,就像未定义字典时一样。 运行多个检查器通常不会妨碍在 Vim 中编辑,因为它们都将同时在单独的进程中执行。 如果你不希望 ALE 运行你没有明确请求的内容,可以将 `g:ale_linters_explicit` 设置为 `1`。 ``` " Only run linters named in ale_linters settings. let g:ale_linters_explicit = 1 ``` 此插件将在 [`ale_linters`](ale_linters) 目录中查找检查器。每个子目录对应 Vim 中的一种特定文件类型,每个目录中的每个文件对应一个特定检查器的名称。 ### 如何禁用特定警告或错误? 警告和错误应在相关工具的项目配置文件中进行配置。ALE 仅支持禁用与尾随空白相关的警告,Vim 用户通常会自动修复尾随空白。 ``` " Disable whitespace warnings let g:ale_warn_about_trailing_whitespace = 0 ``` 用户通常不应通过更改自己编辑器中的设置来忽略项目中的警告或错误。相反,应适当配置工具,以便同一项目的任何其他用户都能看到相同的问题。 ### 如何查看 ALE 为当前文件配置了什么? 运行以下命令查看当前配置: ``` :ALEInfo ``` ### 如何禁用出现在行尾的虚拟文本? 默认情况下,ALE 使用虚拟文本显示错误和警告。ALE 显示的问题会在每个找到的问题后以类似注释的语法显示。你可以将 ALE 设置为仅显示光标当前位置的问题,如下所示。 ``` let g:ale_virtualtext_cursor = 'current' ``` 如果你想完全禁用虚拟文本,请应用以下设置。 ``` let g:ale_virtualtext_cursor = 'disabled' ``` ### 如何自定义标记符号? 使用这些选项指定标记符号应使用的文本: ``` let g:ale_sign_error = '>>' let g:ale_sign_warning = '--' ``` ALE 会为标记列中的警告和错误自动设置一些背景颜色,名称为 `ALEErrorSign` 和 `ALEWarningSign`。 这些颜色可以自定义,甚至完全删除: ``` highlight clear ALEErrorSign highlight clear ALEWarningSign ``` 如果你希望,可以将标记列配置为始终打开。 ``` let g:ale_sign_column_always = 1 ``` ### 如何更改或禁用 ALE 使用的高亮显示? ALE 使用链接到 `SpellBad`、`SpellCap`、`error` 和 `todo` 组的高亮组来高亮显示问题。高亮显示的字符取决于所使用的检查器和提供给 ALE 的信息。 可以通过将 `g:ale_set_highlights` 设置为 `0` 来完全禁用高亮显示。 ``` " Set this in your vimrc file to disabling highlighting let g:ale_set_highlights = 0 ``` 你可以控制 ALE 使用的所有高亮显示,例如,如果你使用的配色方案产生了难看的高亮。例如: ``` highlight ALEWarning ctermbg=DarkMagenta ``` 更多信息请参阅 `:help ale-highlights`。 ### 如何更改回显消息的格式? 有 3 个全局选项允许自定义回显消息: - `g:ale_echo_msg_format`,其中: * `%s` 是错误消息本身 * `%...code...%` 是可选的错误代码,大多数字符可以写在 `%` 字符之间。 * `%linter%` 是检查器名称 * `%severity%` 是严重性类型 - `g:ale_echo_msg_error_str` 是用于错误严重性的字符串。 - `g:ale_echo_msg_warning_str` 是用于警告严重性的字符串。 所以例如这个: ``` let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' ``` 将给你: ![回显消息](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/cad93b6a13033129.png) 更多信息请参阅 `:help g:ale_echo_msg_format`。 ### 如何自定义状态行? #### lightline [lightline](https://github.com/itchyny/lightline.vim) 没有内置对 ALE 的支持,但是有一个插件添加了此功能:[maximbaz/lightline-ale](https://github.com/maximbaz/lightline-ale)。 更多信息,请查看该插件的源代码、`:help ale#statusline#Count()` 和 [lightline 文档](https://github.com/itchyny/lightline.vim#advanced-configuration)。 #### vim-airline [vim-airline](https://github.com/vim-airline/vim-airline) 与 ALE 集成,用于在状态栏中显示错误信息。如果你想以美观的格式查看 ALE 的状态,建议将 vim-airline 与 ALE 一起使用。 通过将以下内容添加到你的 vimrc 中,可以启用 airline 扩展: ``` " Set this. Airline will handle the rest. let g:airline#extensions#ale#enabled = 1 ``` #### 自定义状态行 你可以实现自己的状态行函数,而无需添加任何其他插件。ALE 提供了一些函数来协助完成这项工作,包括: * `ale#statusline#Count`:返回 ALE 在指定缓冲区中找到的问题数量。 * `ale#ale#statusline#FirstProblem`:返回一个字典,包含 ALE 在缓冲区中找到的第一个指定类型问题的完整 loclist 详细信息。(例如,当前缓冲区中的第一个样式警告。) 这对于显示更详细的信息很有用,例如文件中第一个问题的行号。 假设你想将所有错误显示为一个数字,所有非错误显示为另一个数字。你可以这样做: ``` function! LinterStatus() abort let l:counts = ale#statusline#Count(bufnr('')) let l:all_errors = l:counts.error + l:counts.style_error let l:all_non_errors = l:counts.total - l:all_errors return l:counts.total == 0 ? 'OK' : printf( \ '%dW %dE', \ all_non_errors, \ all_errors \) endfunction set statusline=%{LinterStatus()} ``` 更多信息请参阅 `:help ale#statusline#Count()` 或 `:help ale#statusline#FirstProblem()`。 ### 如何更改浮动预览窗口的边框? 浮动预览窗口的边框默认启用。你可以使用 `g:ale_floating_window_border` 设置来配置它们。 你可以用一个空列表禁用边框。 ``` let g:ale_floating_window_border = [] ``` 如果终端支持 Unicode,你可以尝试像下面这样设置值,使其看起来更好。 ``` let g:ale_floating_window_border = ['│', '─', '╭', '╮', '╯', '╰', '│', '─'] ``` 由于 vim 默认在可能的情况下使用漂亮的 Unicode 字符,你可以通过以下方式诱使 ale 使用该默认值: ``` let g:ale_floating_window_border = repeat([''], 8) ``` ### 这个插件会耗尽我笔记本电脑的所有电池电量吗? ALE 利用各种工具的强大功能来检查你的代码。这当然意味着 CPU 时间将用于持续检查你的代码。如果你担心 ALE 将花费的 CPU 时间(这当然会对电池寿命产生一些影响),你可以调整设置以减少 CPU 工作量。 首先,考虑增加在你输入时 ALE 运行任何检查器之前的延迟。ALE 使用一个超时,每次输入时都会取消并重置,可以增加此延迟,使检查器运行频率降低。更多信息请参阅 `:help g:ale_lint_delay`。 如果你不希望在输入时运行检查器,可以禁用该行为。将 `g:ale_lint_on_text_changed` 设置为 `never`。你不会得到那么频繁的错误检查,但 ALE 不会阻止你在保存文件后编辑文档的能力,因此插件的异步特性仍然是一个优势。 如果你仍然担心,可以完全关闭自动代码检查,包括 `g:ale_lint_on_enter` 选项,然后你可以使用 `:ALELint` 手动运行 ALE。 ### 如何将 ALE 与其他 LSP 客户端一起使用? ALE 提供了一个 API,允许任何其他插件与 ALE 集成。如果你有兴趣编写集成,请参阅 `:help ale-lint-other-sources`。 如果你在 Neovim 中使用 [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) 配置特定的语言服务器来运行 ALE,ALE 将默认为使用 nvim-lspconfig 配置的任何语言服务器禁用其 LSP 功能。默认应用以下设置: ``` let g:ale_disable_lsp = 'auto' ``` 如果你将 ALE 与另一个 LSP 客户端一起运行,你可能希望完全禁用 ALE 的 LSP 功能。你可以将设置更改为 `1` 以始终禁用所有 LSP 功能。 ``` let g:ale_disable_lsp = 1 ``` 你也可以在 ftplugin 文件中使用 `b:ale_disable_lsp` 来为不同文件类型启用或禁用 ALE 中的 LSP 功能。 #### Neovim 诊断 如果你运行的是 Neovim 0.7 或更高版本,你可以使 ALE 通过 Neovim 诊断 API 显示错误和警告。 ``` let g:ale_use_neovim_diagnostics_api = 1 ``` #### coc.nvim [coc.nvim](https://github.com/neoclide/coc.nvim) 是一个流行的 Vim 插件,用 TypeScript 编写,并依赖于 [npm](https://www.npmjs.com/) 生态系统,为 Vim 提供完整的 IDE 功能。ALE 和 coc.nvim 都实现了[语言服务器协议](https://microsoft.github.io/language-server-protocol/)(LSP)客户端,以支持诊断(使用实时服务器进行代码检查)以及自动补全和其他上面列出的功能。 ALE 主要专注于通过几乎任何方式与外部程序集成,前提是该插件几乎完全用 Vim 脚本编写。coc.nvim 主要专注于为 Vim 带来 IDE 功能。如果你想在文件上运行外部程序以检查错误,并同时使用最先进的 IDE 功能,你可能希望同时使用这两个插件。 让这两个插件协同工作的最简单方法是配置 coc.nvim 将诊断发送到 ALE,以便 ALE 控制如何向你呈现所有问题,并禁用 ALE 中的所有 LSP 功能,这样 ALE 就不会尝试提供已经由 coc.nvim 提供的 LSP 功能(如自动补全)。 使用 `:CocConfig` 打开你的 coc.nvim 配置文件,并在设置中添加 `"diagnostic.displayByAle": true`。 #### vim-lsp [vim-lsp](https://github.com/prabirshrestha/vim-lsp) 是一个流行的插件,作为 Vim 的语言服务器协议(LSP)客户端实现。它提供了所有 LSP 功能,包括自动补全、诊断、转到定义等。 [vim-lsp-ale](https://github.com/rhysd/vim-lsp-ale) 是一个桥接插件,用于解决同时使用 ALE 和 vim-lsp 时的问题。使用该插件,诊断由 vim-lsp 提供,ALE 可以处理所有错误。更多详情请阅读 [vim-lsp-ale 文档](https://github.com/rhysd/vim-lsp-ale/blob/master/doc/vim-lsp-ale.txt)。 ### 如何在 ALE 开始或停止代码检查时执行一些代码? ALE 在代码检查或修复周期开始和停止时运行自己的 [autocmd](http://vimdoc.sourceforge.net/htmldoc/autocmd.html) 事件。还有一个事件在检查器作业成功启动时运行。这些事件可用于在 ALE 操作的这些各自部分期间调用任意函数。 ``` augroup YourGroup autocmd! autocmd User ALELintPre call YourFunction() autocmd User ALELintPost call YourFunction() autocmd User ALEJobStarted call YourFunction() autocmd User ALEFixPre call YourFunction() autocmd User ALEFixPost call YourFunction() augroup END ``` ### 如何在错误之间快速导航? ALE 提供了一些带有 `` 键绑定的命令,用于在警告和错误之间快速移动。例如,你可以将 Ctrl+j 和 Ctrl+k 键映射为在错误之间移动: ``` nmap (ale_previous_wrap) nmap (ale_next_wrap) ``` 更多信息,请查阅在线文档 `:help ale-navigation-commands`。 ### 如何仅在保存文件时运行检查器? ALE 提供了一个选项 `g:ale_lint_on_save`,用于启用在保存文件时运行检查器。此选项默认启用。如果你只希望在保存文件时运行检查器,可以关闭其他选项。 ``` " Write this in your vimrc file let g:ale_lint_on_text_changed = 'never' let g:ale_lint_on_insert_leave = 0 " You can disable this option too " if you don't want linters to run on opening a file let g:ale_lint_on_enter = 0 ``` 如果出于任何原因你不想在保存文件时再次运行检查器,可以将 `g:ale_lint_on_save` 设置为 `0`。 ### 如何使用快速修复列表代替位置列表? 可以通过开启 `g:ale_set_quickfix` 选项来启用快速修复列表。如果你希望同时禁用位置列表,可以禁用 `g:ale_set_loclist` 选项。 ``` " Write this in your vimrc file let g:ale_set_loclist = 0 let g:ale_set_quickfix = 1 ``` 如果你希望在文件包含警告或错误时显示位置列表或快速修复项的 Vim 窗口,可以将 `g:ale_open_list` 设置为 `1`。 如果你希望即使在错误消失后也保持窗口打开,可以将 `g:ale_keep_list_window_open` 设置为 `1`。 ``` let g:ale_open_list = 1 " Set this if you want to. " This can be useful if you are combining ALE with " some other plugin which sets quickfix errors, etc. let g:ale_keep_list_window_open = 1 ``` 你也可以设置 `let g:ale_list_vertical = 1` 来垂直打开窗口,而不是默认的水平打开。 ### 为什么 ALE 不检查我的文件类型? #### JSX 的 stylelint 首先,安装 eslint 并使用 [stylelint-processor-styled-components](https://github.com/styled-components/stylelint-processor-styled-components) 安装 stylelint。 假设你已正确安装了这两个工具,请配置你的 .jsx 文件,以便在文件类型中包含 `jsx`。你可以为此使用 `autocmd`。 ``` augroup FiletypeGroup autocmd! au BufNewFile,BufRead *.jsx set filetype=javascript.jsx augroup END ``` 假设文件类型已正确设置,你可以在 jsx.vim ftplugin 文件中设置以下选项。 ``` " In ~/.vim/ftplugin/jsx.vim, or somewhere similar. let b:ale_linter_aliases = ['css', 'javascript'] let b:ale_linters = ['stylelint', 'eslint'] ``` 或者,如果你愿意,你可以从 vimrc 文件中配置检查器。 ``` " In ~/.vim/vimrc, or somewhere similar. let g:ale_linter_aliases = {'jsx': ['css', 'javascript']} let g:ale_linters = {'jsx': ['stylelint', 'eslint']} ``` ALE 将为 `jsx` 文件类型设置别名,使其使用 `css` 文件类型的检查器,并使用为 `jsx` 从 `g:ale_linters` 对象中选择的原始检查器数组。所有可用的检查器将用于 `javascript` 文件类型,并且不会对同一个文件运行两次相同的检查器。 #### 使用 ESLint 检查 Vue 要使用 ESLint 检查 Vue 文件,你的 ESLint 项目配置文件必须配置为使用 [Vue 插件](https://github.com/vuejs/eslint-plugin-vue)。 之后,你需要配置 ALE,使其在你的文件上运行 JavaScript ESLint 检查器。你需要的设置类似于上一节中使用 stylelint 和 ESLint 检查 JSX 代码所需的设置。 ``` " In ~/.vim/ftplugin/vue.vim, or somewhere similar. " Run both javascript and vue linters for vue files. let b:ale_linter_aliases = ['javascript', 'vue'] " Select the eslint and vls linters. let b:ale_linters = ['eslint', 'vls'] ``` 运行 `:ALEInfo` 以查看在告诉 ALE 在 Vue 文件上运行 JavaScript 检查器后有哪些可用检查器。并非所有检查器都支持检查 Vue 文件。 如果你不想在 ftplugin 文件中配置检查器,可以从 vimrc 文件中配置它们。 ``` " In ~/.vim/vimrc, or somewhere similar. let g:ale_linter_aliases = {'vue': ['vue', 'javascript']} let g:ale_linters = {'vue': ['eslint', 'vls']} ``` ### 如何配置我的 C 或 C++ 项目? C 和 C++ 项目的结构因项目而异,使用许多不同的构建工具,并且项目配置文件的格式也多种多样。ALE 可以轻松运行编译器,但 ALE 无法轻松检测要使用哪些编译器标志。 一些工具和构建配置可以生成 [compile_commands.json](https://clang.llvm.org/docs/JSONCompilationDatabase.html) 文件。`cppcheck`、`clangcheck`、`clangtidy` 和 `cquery` 检查器可以读取这些文件以自动确定要使用的适当编译器标志。 对于使用 `gcc` 和 `clang` 等编译器以及其他工具进行代码检查,你需要自己告诉 ALE 使用哪些编译器标志。你可以使用 `g:ale_pattern_options` 设置为不同项目使用不同的选项。请参阅该设置的文档以获取更多信息。 `b:ale_linters` 可用于选择你想运行的工具,例如,如果你想在一个项目中仅使用 `gcc`,在另一个项目中仅使用 `clang`。 ALE 将尝试解析 `compile_commands.json` 文件,以发现代码检查时使用的编译器标志。更多信息请参阅 `:help g:ale_c_parse_compile_commands`。请参阅 Clang 的 [compile_commands.json 文件](https://clang.llvm.org/docs/JSONCompilationDatabase.html)文档。 你强烈应考虑在你的构建中生成它们,这使用 CMake 很容易做到。 你也可以配置 ALE 自动运行 `make -n` 对 `Makefile` 执行试运行以发现编译器标志。这可以执行任意代码,因此该选项默认禁用。请参阅 `:help g:ale_c_parse_makefile`。 ### 如何通过 Docker 或虚拟机运行检查器或修复器? ALE 支持通过 Docker、虚拟机或与任何具有不同文件系统的远程机器组合运行检查器或修复器,前提是这些工具与 ALE 良好集成,并且 ALE 已正确配置以运行正确的命令并在不同文件系统之间映射文件名路径。有关如何配置 ALE 以支持此功能的完整文档,请参阅 `:help ale-lint-other-machines`。
标签:ALE插件, IDE增强, IPv6支持, LSP客户端, Neovim插件, SOC Prime, Vim插件, 代码修复, 代码格式化, 代码检查引擎, 代码自动修复, 代码质量保证, 实时Lint, 开发工具, 异步代码检查, 文本编辑器插件, 编程辅助工具, 自动代码格式化, 语法检查, 语言服务器协议, 错误检测, 静态分析工具