Vim / Neovim

自动补全

对于 C++,任何可以使用 LSP 的工具,例如 coc.nvimnvim-lspconfig 等,只要您生成了一个 编译数据库 并指向它,就可以正常工作。

此外,YouCompleteMe 在您运行 ./mach build./mach configure 后无需 C++ 编译数据库即可工作。此配置位于仓库根目录下的 .ycm_extra_conf 中。

Rust 自动补全应该可以使用 Rust 的 LSP rust-analyzer

确保 LSP 以一种将树的根目录检测为工作区的方式配置,而不是您正在编辑的 crate。例如,nvim-lspconfig 的默认设置是搜索最接近的 Cargo.toml 文件,这不是您想要的。您可能需要类似以下内容:

root_dir = lspconfig.util.root_pattern(".git", ".hg")

您还需要设置一些选项才能获得完整的诊断信息

"rust-analyzer.server.extraEnv": {
  "CARGO_TARGET_DIR": "/path/to/objdir"
},
"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" ],

使这些功能开箱即用的最简单方法是使用 neoconf,它自动支持导入 VSCode 配置文件。然后,./mach ide vscode --no-interactive 将为您生成正确的配置。

ESLint

将 ESLint 与 VIM 集成的最简单方法是使用 Syntastic 插件

为了使 VIM 将 jsm 文件检测为 JS,您可能需要在您的 .vimrc 中添加类似以下内容

autocmd BufRead,BufNewFile *.jsm set filetype=javascript

mach eslint --setup 会将特定版本的 ESLint 和一些 ESLint 插件安装到仓库的 node_modules 中。

您需要在您的 .vimrc 中添加类似以下内容,以便在保存时自动运行检查器

autocmd FileType javascript,html,xhtml let b:syntastic_checkers = ['javascript/eslint']

您需要在 PATH 中包含 eslint,您可以使用 npm install -g eslint 获取。您至少需要 6.0.0 版本。

您也可以使用类似 eslint_d 的工具,它也应该可以自动执行此操作

let g:syntastic_javascript_eslint_exec = 'eslint_d'