2.6 KiB
Vim / Neovim
AutoCompletion
For C++, anything that can use an LSP like {code}coc.nvim,
{code}nvim-lspconfig, or what not, should work as long as you generate a
{ref}compilation database <compiledb-back-end-compileflags> and point to it.
Additionally, YouCompleteMe
works without the need of a C++ compilation database as long as you have run
{code}./mach build or {code}./mach configure. Configuration for this lives
in {searchfox}.ycm_extra_conf <.ycm_extra_conf> at the root of the repo.
Rust auto-completion should work both with Rust's LSP {code}rust-analyzer.
Make sure that the LSP is configured in a way that it detects the root of the
tree as a workspace, not the crate you happen to be editing. For example, the
default of {code}nvim-lspconfig is to search for the closest
{code}Cargo.toml file, which is not what you want. You'd want something like:
root_dir = lspconfig.util.root_pattern(".git")
You also need to set some options to get full diagnostics:
"rust-analyzer.cargo.extraEnv": {
"CARGO_TARGET_DIR": "/path/to/objdir"
},
"rust-analyzer.vfs.extraIncludes": ["/path/to/objdir", "/optional/path/to/windows_rs_dir"],
"rust-analyzer.check.overrideCommand": [ "/path/to/mach", "--log-no-times", "cargo", "check", "--all-crates", "--message-format-json" ],
"rust-analyzer.cargo.buildScripts.overrideCommand": [ "/path/to/mach", "--log-no-times", "cargo", "check", "--all-crates", "--message-format-json" ],
The easiest way to make these work out of the box is using
codesettings.nvim, which
automatically supports importing VSCode configuration files.
{code}./mach ide vscode --no-interactive will then generate the right
configuration for you.
ESLint
The easiest way to integrate ESLint with VIM is using the Syntastic plugin.
{code}mach eslint --setup installs a specific ESLint version and some ESLint
plugins into the repositories' {code}node_modules.
You need something like this in your {code}.vimrc to run the checker
automatically on save:
autocmd FileType javascript,html,xhtml let b:syntastic_checkers = ['javascript/eslint']
You need to have {code}eslint in your {code}PATH, which you can get with
{code}npm install -g eslint. You need at least version 6.0.0.
You can also use something like eslint_d which should also do that automatically:
let g:syntastic_javascript_eslint_exec = 'eslint_d'