// the find
dense-analysis/ale
Check syntax in Vim/Neovim asynchronously and fix files, with Language Server Protocol (LSP) support
ALE is a linting and LSP client plugin for Vim and Neovim that runs checkers asynchronously so your editing isn't blocked while tools run. It predates Neovim's built-in LSP by years and accumulated support for an enormous number of languages and tools as a result. Still actively maintained and the go-to choice for Vim 8 users or anyone who wants a single plugin handling both linting and fixing.
Breadth of tool support is genuinely hard to match — hundreds of linters and fixers across virtually every language you'd encounter. Zero mandatory dependencies: pure Vimscript, no Node or Python daemon required. The `g:ale_linters_explicit` mode means you can lock down exactly what runs and pay nothing for what you don't use. Integrates cleanly with Neovim's native LSP and diagnostics APIs (0.7+/0.8+) rather than fighting them, so it degrades gracefully as Neovim matures.
For Neovim users on 0.8+ with nvim-lspconfig already configured, ALE's LSP layer is largely redundant — you're loading two LSP clients for the same servers. The Vimscript codebase means contributing or debugging internals is painful compared to Lua plugins; the community has largely moved on to native LSP + nvim-lint + conform.nvim for new Neovim setups. Configuration is split awkwardly between global `g:` vars and buffer-local `b:` vars with no structured schema, so large vimrcs managing many filetypes get messy fast. Adding a new linter requires writing a Vimscript file following conventions that aren't formally documented anywhere obvious.