Files
sousa-gecko/docs/contributing/editors/vim.md
T

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'