[!注意]
- 开箱即用。无需调用
setup
!- 不依赖
lspconfig
。- 设计上采用延迟初始化。
如果你刚开始学习Rust,Neovim的内置LSP客户端API
(参见:h lsp
)或
nvim-lspconfig.rust_analyzer
可能就足够了。
它提供了最基本的LSP支持。
这个插件是为那些想要额外的非标准功能
特定于rust-analyzer的用户设计的。
neovim >= 0.10
rust-analyzer
dot
来自graphviz
,
用于绘制crate图。cargo
,
Cargo项目需要。lldb
或codelldb
)
和nvim-dap
,
用于调试。:Rustc unpretty
命令需要)。
可以使用nvim-treesitter安装,
它还提供高亮等功能。rocks.nvim
:Rocks install rustaceanvim
lazy.nvim
{ 'mrcjkb/rustaceanvim', version = '^5', -- 推荐 lazy = false, -- 此插件已经是惰性加载的 }
[!提示]
建议固定到标记的发布版本,以避免破坏性变更。
要手动生成文档,使用:helptags ALL
。
对于启用了flakes的Nix用户,本项目以包和overlay的形式提供输出。
它也可在nixpkgs
中获得。
查看下面的配置信息以开始使用。
这个插件自动配置rust-analyzer
内置LSP客户端,并与其他Rust工具集成。
更多信息请参见使用 / 功能部分。
[!警告]
不要调用
nvim-lspconfig.rust_analyzer
的setup或手动设置rust-analyzer
的LSP客户端, 因为这样做可能会导致冲突。
这是一个开箱即用的文件 类型插件,
所以不需要调用setup
函数或配置任何东西就能让这个插件工作。
你很可能想要添加一些键映射。
大多数键映射只在rust文件中有用,
所以我建议你在~/.config/nvim/after/ftplugin/rust.lua
1中定义它们
示例:
local bufnr = vim.api.nvim_get_current_buf() vim.keymap.set( "n", "<leader>a", function() vim.cmd.RustLsp('codeAction') -- 支持rust-analyzer的分组 -- 或者如果你不想要分组,可以使用vim.lsp.buf.codeAction() end, { silent = true, buffer = bufnr } )
<!-- markdownlint-disable --> <!-- markdownlint-restore -->[!TIP]
- 关于更多与LSP相关的键映射,请参阅
nvim-lspconfig
的建议。- 如果你想与
nvim-lspconfig
共享键映射, 你也可以使用vim.g.rustaceanvim.server.on_attach
函数, 或者使用LspAttach
自动命令。- 查看高级配置部分 或
:h rustaceanvim.config
以获取更多配置选项。
[!IMPORTANT]
- 请不要在
after/ftplugin/rust.lua
中设置vim.g.rustaceanvim
, 因为该文件会在插件初始化后才被加载。
debuggables
打开一个提示框,让你选择可用的目标。
debug
在当前光标位置搜索目标。
:RustLsp[!] debuggables {args[]}? :RustLsp[!] debug {args[]}?
vim.cmd.RustLsp('debug') vim.cmd.RustLsp('debuggables') -- 或者,运行上一个可调试项: vim.cmd.RustLsp { 'debuggables', bang = true } -- 或者,覆盖可执行文件的参数: vim.cmd.RustLsp {'debuggables', 'arg1', 'arg2' }
使用感叹号!
调用命令将重新运行最后一个可调试项。
需要:
默认情况下,当LSP客户端连接时,此插件会静默尝试自动加载nvim-dap
配置。加载后,你可以使用require('dap').continue()
或:DapContinue
调用它们。
可以通过设置vim.g.rustaceanvim.dap.autoload_configurations = false
来禁用此功能。
:RustLsp debuggables
只会加载由rust-analyzer
创建的调试配置。require('dap').continue()
将加载所有Rust调试配置,
包括在.vscode/launch.json
中指定的配置
(参见:h dap-launch.json
)。runnables
打开一个提示框,让你选择可用的目标。run
在当前光标位置搜索目标。:RustLsp[!] runnables {args[]}? :RustLsp[!] run {args[]}?
vim.cmd.RustLsp('run') vim.cmd.RustLsp('runnables') -- 或者,运行上一个可运行项: vim.cmd.RustLsp { 'runnables', bang = true } -- 或者,覆盖可执行文件的参数: vim.cmd.RustLsp {'runnables', 'arg1', 'arg2' }
使用感叹号!
调用命令将重新运行最后一个可运行项。
如果你使用的是Neovim >= 0.10,你可以将vim.g.rustaceanvim.tools.test_executor
选项设置为'background'
,这样插件将在后台运行测试,
解析结果,并尽可能将失败的测试显示为诊断信息。
在Neovim 0.9中也可以实现这一点,但测试不会在后台运行, 而是会阻塞UI。
:RustLsp[!] testables {args[]}?
vim.cmd.RustLsp('testables') -- 或者,运行上一个可测试项: vim.cmd.RustLsp { 'testables', bang = true } -- 或者,覆盖可执行文件的参数: vim.cmd.RustLsp {'testables', 'arg1', 'arg2' }
使用感叹号!
调用命令将重新运行最后一个可测试项。
此插件提供了一个neotest适配器, 你可以按以下方式将其添加到neotest中:
require('neotest').setup { -- ..., adapters = { -- ..., require('rustaceanvim.neotest') }, }
注意:如果你使用rustaceanvim的neotest适配器, 请不要添加neotest-rust。
以下是rustaceanvim的适配器和neotest-rust的比较:
rustaceanvim | neotest-rust | |
---|---|---|
测试发现 | rust-analyzer (LSP) | tree-sitter |
命令构建 | rust-analyzer (LSP) | tree-sitter |
DAP策略 | 自动DAP检测(重用debuggables );可通过vim.g.rustaceanvim.dap 覆盖 | 默认为codelldb ;需手动配置 |
测试运行器 | cargo 或cargo-nextest (如果检测到) | cargo-nextest |
如果您将rustaceanvim配置为使用neotest,对于测试类型的"testables"和"runnables",tools.test_executor 将默认使用neotest。 |
:RustLsp expandMacro
vim.cmd.RustLsp('expandMacro')
:RustLsp rebuildProcMacros
</details> <details> <summary> <b>上下移动项目</b> </summary>vim.cmd.RustLsp('rebuildProcMacros')
:RustLsp moveItem {up|down}
</details> <details> <summary> <b>分组代码操作</b> </summary>vim.cmd.RustLsp { 'moveItem', 'up' } vim.cmd.RustLsp { 'moveItem', 'down' }
有时,rust-analyzer会按类别对代码操作进行分组,
这不被Neovim内置的vim.lsp.buf.codeAction
支持。
此插件提供了一个带有UI的命令,可以执行:
:RustLsp codeAction
vim.cmd.RustLsp('codeAction')
如果您将选项vim.g.rustaceanvim.tools.code_actions.ui_select_fallback
设置为true
(默认为false
),当没有分组代码操作时,
它将回退到使用vim.ui.select
。
注意:要激活悬停操作,需要运行命令两次。
这会将您移动到窗口中,然后按回车键选择您想要的选项。
或者,您可以在配置中将auto_focus
设置为true
,
这样您将自动进入悬停操作窗口。
:RustLsp hover actions
vim.cmd.RustLsp { 'hover', 'actions' }
默认情况下,此插件用悬停操作替换了Neovim的内置悬停处理程序,
因此您也可以使用vim.lsp.buf.hover()
。
:RustLsp hover range
</details> <details> <summary> <b>解释错误</b> </summary>vim.cmd.RustLsp { 'hover', 'range' }
在错误诊断上显示一个悬停窗口,其中包含来自rust错误代码索引 的解释(如果诊断有错误代码)。
:RustLsp explainError {cycle?|current?}
vim.cmd.RustLsp('explainError') -- 默认为'cycle' vim.cmd.RustLsp({ 'explainError', 'cycle' }) vim.cmd.RustLsp({ 'explainError', 'current' })
如果使用cycle
或无参数调用:
类似于vim.diagnostic.goto_next
,
explainError
将从光标位置开始循环诊断,
直到找到带有错误代码的诊断。
如果使用current
调用:
仅在当前光标行搜索诊断。
显示一个悬停窗口,其中包含渲染的诊断,如cargo build
期间显示的那样。
对于解决借用和泛型相关的bug很有用,
因为它将重要部分(有时跨文件)整合在一起。
:RustLsp renderDiagnostic {cycle?|current?}
vim.cmd.RustLsp('renderDiagnostic') -- 默认为'cycle' vim.cmd.RustLsp({ 'renderDiagnostic', 'cycle' }) vim.cmd.RustLsp({ 'renderDiagnostic', 'current' })
如果使用cycle
或无参数调用:
类 似于vim.diagnostic.goto_next
,
renderDiagnostic
将从光标位置开始循环诊断,
直到找到带有渲染数据的诊断。
如果使用current
调用:
仅在当前光标行搜索诊断。
:RustLsp openCargo
</details> <details> <summary> <b>打开docs.rs文档</b> </summary>vim.cmd.RustLsp('openCargo')
打开光标下符号的docs.rs文档。
:RustLsp openDocs
</details> <details> <summary> <b>父模块</b> </summary>vim.cmd.RustLsp('openDocs')
:RustLsp parentModule
</details> <details> <summary> <b>过滤工作区符号搜索</b> </summary>vim.cmd.RustLsp('parentModule')
rust-analyzer支持过滤工作区符号搜索。
:RustLsp[!] workspaceSymbol {onlyTypes?|allSymbols?} {query?}
vim.cmd.RustLsp('workspaceSymbol') -- 或 vim.cmd.RustLsp { 'workspaceSymbol', '<onlyTypes|allSymbols>' --[[ 可选 ]], '<query>' --[[ 可选 ]], bang = true --[[ 可选 ]] }
!
调用命令将在搜索中包含依赖项。workspace.symbol.search
服务器选项来影响 vim.lsp.buf.workspace_symbol()
的行为。将选定的行智能地合并成一行,自动修复空白、尾随逗号和括号。 在普通模式下适用于单行,在可视模式下适用于多行。
:RustLsp joinLines
vim.cmd.RustLsp('joinLines')
:RustLsp ssr {query}
vim.cmd.RustLsp { 'ssr', '<query>' --[[ 可选 ]] }
:RustLsp crateGraph {backend {output}}
vim.cmd.RustLsp { 'crateGraph', '[backend]', '[output]' }
需要:
</details> <details> <summary> <b>查看语法树</b> </summary>:RustLsp syntaxTree
vim.cmd.RustLsp('syntaxTree')
在后台线程中运行 cargo check
或其他兼容命令(如 clippy
),
并根据命令输出提供 LSP 诊断信息。
在大型项目中很有用,因为每次保存时运行 cargo check
可能会很耗时。
:RustLsp flyCheck {run?|clear?|cancel?}
vim.cmd.RustLsp('flyCheck') -- 默认为 'run' vim.cmd.RustLsp { 'flyCheck', 'run' } vim.cmd.RustLsp { 'flyCheck', 'clear' } vim.cmd.RustLsp { 'flyCheck', 'cancel' }
</details> <details> <summary> <b>查看 HIR / MIR</b> </summary>[!注意]
这只有在设置选项
['rust-analzyer'].checkOnSave = false
时才有用。
打开一个缓冲区,显示光标所在函数的 HIR 或 MIR 的文本表示。 对调试或处理 rust-analyzer 本身很有用。
:RustLsp view {hir|mir}
</details> <details> <summary> <b>Rustc 未美化</b> </summary>vim.cmd.RustLsp { 'view', 'hir' } vim.cmd.RustLsp { 'view', 'mir' }
打开一个缓冲区,显示光标附近函数的 MIR 或其他内容的文本表示。 实现类似 Rust Playground 的体验。
注意:目前需要 Rust 的 tree-sitter 解析器和 nightly 编译器工具链。
:Rustc unpretty {hir|mir|...}
vim.cmd.Rustc { 'unpretty', 'hir' } vim.cmd.Rustc { 'unpretty', 'mir' } -- ...
需要:
:Rustc unpretty
命令需要)。
可以使用 nvim-treesitter 安装。要修改默认配置,设置 vim.g.rustaceanvim
。
:h rustaceanvim
获取所有可用配置选项的详细文档。
如果文档尚未安装,您可能需要运行 :helptags ALL
。RustaceanDefaultConfig
)。rust-analyzer
文档。您只需指定想要更改的键, 因为未提供的键会应用默认值。
配置示例:
vim.g.rustaceanvim = { -- 插件配置 tools = { }, -- LSP 配置 server = { on_attach = function(client, bufnr) -- 您也可以在这里放置键映射 end, default_settings = { -- rust-analyzer 语言服务器配置 ['rust-analyzer'] = { }, }, }, -- DAP 配置 dap = { }, }
[!提示]
vim.g.rustaceanvim
也可以是返回表的函数。
codelldb
进行调试对于 Rust,CodeLLDB VSCode 扩展中的 codelldb
提供了比 lldb
更好的体验。
如果您使用的发行版允许安装 codelldb
可执行文件,
这个插件会自动检测并配置自己使用它作为调试适配器。
一些例子:
vscode-extensions.vadimcn.vscode-lldb.adapter
codelldb
包。codelldb-bin
(AUR)mason.nvim
:
:MasonInstall codelldb
如果你的发行版没有 codelldb
包,你可以按以下方式进行配置:$HOME/.vscode/extensions/
目录下。vim.g.rustaceanvim = function() -- 更新此路径 local extension_path = vim.env.HOME .. '/.vscode/extensions/vadimcn.vscode-lldb-1.10.0/' local codelldb_path = extension_path .. 'adapter/codelldb' local liblldb_path = extension_path .. 'lldb/lib/liblldb' local this_os = vim.uv.os_uname().sysname; -- Windows 上的路径不同 if this_os:find "Windows" then codelldb_path = extension_path .. "adapter\\codelldb.exe" liblldb_path = extension_path .. "lldb\\bin\\liblldb.dll" else -- Linux 上 liblldb 扩展名为 .so,MacOS 上为 .dylib liblldb_path = liblldb_path .. (this_os == "Linux" and ".so" or ".dylib") end local cfg = require('rustaceanvim.config') return { dap = { adapter = cfg.get_codelldb_adapter(codelldb_path, liblldb_path), }, } end
rust-analyzer
设置默认情况下,这个插件会在项目根目录中查找 rust-analyzer.json
2 文件,并尝试加载它。如果文件不存在或无法解码,将使用 server.default_settings
。
你可以通过 server.settings
配置来改变这个行为:
vim.g.rustaceanvim = { -- ... server = { ---@param project_root string 项目根目录的路径 settings = function(project_root) local ra = require('rustaceanvim.config.server') return ra.load_rust_analyzer_settings(project_root, { settings_file_pattern = 'rust-analyzer.json' }) end, }, }
运行 :checkhealth rustaceanvim
进行健康检查。
rust-analyzer
日志文件运行 :RustLsp logFile
打开 rust-analyzer
日志文件。
要在临时目录中使用最小配置对此插件进行故障排除,你可以尝试 minimal.lua。
nvim -u minimal.lua
[!注意]
如果你使用 Nix,可以运行
nix run "github:mrcjkb/rustaceanvim#nvim-minimal-stable"
或nix run "github:mrcjkb/rustaceanvim#nvim-minimal-nightly"
。
如果你无法使用最小配置复现问题,可能是由其他插件或插件管理器 的设置引起的。在这种情况下,向 minimal.lua
添加额外的插件和配置,直到你能复现问题。
对于与 rust-analyzer 相关的问题(如 LSP 功能不工作),另请参阅 rust-analyzer 故障排除指南。
由于 Neovim >= 0.10 原生支持内嵌提示,我已从此插件中移除了相关代码。参见 :h lsp-inlay_hint
。
自 #ff097f2091e7a970e5b12960683b4dade5563040 以来,Neovim 基于语言服务器发送的 triggerCharacters
内置了补全功能。Omni 补全也可用于更传统的 vim
式补全体验。
对于更可扩展和复杂的自动补全设置,你需要使用如 nvim-cmp
这样的插件和像 cmp-nvim-lsp
这样的 LSP 补全源。如果你安装了 cmp-nvim-lsp
,这个插件将自动注册必要的客户端功能。
rustaceanvim 不实现(自动)补全。(自动)补全问题要么来自其他插件,要么来自 rust-analyzer。
有关 mason.nvim 和 nvim-lspconfig 问题的故障排除详情,或配置 rustaceanvim 使用由 mason.nvim 管理的 rust-analyzer 安装,请参见 :h rustaceanvim.mason
。
rouge8/neotest-rust
使用 cargo-nextest
的 neotest
Rust 适配器。Saecki/crates.nvim
vxpm/ferris.nvim
面向喜欢手动配置 LSP 客户端的人。具有一些尚未在本插件中实现的功能。adaszko/tree_climber_rust.nvim
为 Rust 量身定制的基于 tree-sitter 的增量选择。rust-tools.nvim
的灵感来自 akinsho/flutter-tools.nvim
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过 命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号