ft_rust

ft_rust.txt Rust 的文件类型插件 译者: Willis

内 容 rust

1. 简介 rust-intro 2. 设置 rust-settings 3. 命令 rust-commands 4. 映射 rust-mappings

简 介 rust-intro

本插件提供 Rust 文件类型的语法和其他支持功能。完整功能需要 Vim 8 或更高版本。 有些命令在之前的版本不可用。

设 置 rust-settings

插件定义了若干改变插件行为的变量,可放在 vimrc 中定义。 部分变量可为每个缓冲区单独设置 (使用 :b 前缀),缓冲区局部变量优先于全局 g: 的对标变量。 g:rustc_path g:rustc_path 设置用于 :RustRun:RustExpand 命令的 rustc 路径。省略时会从 $PATH 中寻找: let g:rustc_path = $HOME."/bin/rustc" g:rustc_makeprg_no_percent g:rustc_makeprg_no_percent 设为 1 时,'makeprg' 缺省为 "rustc" 而不是 "rustc %": let g:rustc_makeprg_no_percent = 1 g:rust_conceal g:rust_conceal 置位时,打开基础 conceal 支持: let g:rust_conceal = 1 g:rust_conceal_mod_path g:rust_conceal_mod_path 置位时,隐藏 ( conceal ) 路径连接符 "::": let g:rust_conceal_mod_path = 1 g:rust_conceal_pub g:rust_conceal_pub 置位时,隐藏 ( conceal ) "pub" 符: let g:rust_conceal_pub = 1 g:rust_recommended_style g:rust_recommended_style 置位时,设置 vim 缩进和行宽以遵循 Rust 风格规范 (即,缩进为 4 个空格, 'textwidth' 设为 100)。此选项缺省打开。要关闭之: let g:rust_recommended_style = 0 g:rust_fold g:rust_fold 置位时,打开 folding : let g:rust_fold = 1 值 效果 0 无折叠 1 折叠花括号块。缺省打开全部折叠。 2 折叠花括号块。'foldlevel' 沿用其全局值 (缺省关闭全部折 叠)。 g:rust_bang_comment_leader g:rust_bang_comment_leader 设为 1 时,在使用 /*! 语法的多行文档注释时,给出中间部分的前导注释字符 串: let g:rust_bang_comment_leader = 1 g:rust_use_custom_ctags_defs g:rust_use_custom_ctags_defs 设为 1 时,应用自定的 ctags Rust 定义而不用 rust.vim 自带的: let g:rust_use_custom_ctags_defs = 1 注意:仅在已安装 Tagbar Vim 插件, 未检测到 Universal Ctags 时,才 会应用 rust.vim 中的内建定义。这是因为 Universal Ctags 已有内建能和 Tagbar 配合使用的 Rust 支持。 另外 注意 Tagbar 插件在生成可用于 Vim 在位于不同源文件的定义间导航的 tags 文件时,不会自动使用非 Universal Ctags 的 ctags 程序。如果要自 行生成 tags 文件,可先将 rust.vim/ctags/rust.ctags 复制到用户的 ~/.ctags 里再执行命令。 g:ftplugin_rust_source_path g:ftplugin_rust_source_path 设置附加到 'path' 前部的路径,用于查找 Rust 源文件: let g:ftplugin_rust_source_path = $HOME.'/dev/rust' g:rustfmt_command g:rustfmt_command 设置会在 $PATH 里查找的 'rustfmt' 可执行文件名。省略时默认为 'rustfmt': let g:rustfmt_command = 'rustfmt' g:rustfmt_autosave g:rustfmt_autosave 设为 1 时,缓冲区保存时会自动执行 :RustFmt 。省略时默认为 0: let g:rustfmt_autosave = 0 也可为每个缓冲区单独设置 b:rustfmt_autosave ,优先于全局设置。 g:rustfmt_autosave_if_config_present g:rustfmt_autosave_if_config_present 设为 1 时,如果待编辑文件的任何一级父目录里存在 rustfmt.toml 文件, 自动置位 b:rustfmt_autosave 。省略时默认为 0: let g:rustfmt_autosave_if_config_present = 0 如果希望仅当项目给出 rustfmt.toml 配置文件时,才会在保存时执行 rustfmt ,此选项有用。 也可为每个缓冲区单独设置 b:rustfmt_autosave_if_config_present ,优先 于全局设置。 g:rustfmt_fail_silently g:rustfmt_fail_silently 设为 1 时,'rustfmt' 不会用错误填充 location-list 。省略时默认为 0: let g:rustfmt_fail_silently = 0 g:rustfmt_options g:rustfmt_options 设置传递给 'rustfmt' 的选项字符串。--write-mode 已经设为 "overwrite"。 省略时默认为 '': let g:rustfmt_options = '' g:rustfmt_emit_files g:rustfmt_emit_files 省略时,rust.vim 会试图根据 rustfmt 报告的版本来检测应传递给该命令的合 适参数。设置时,会传递给 rustfmt "--emit=files" (值为 1 时) 或者 '--write-mode=overwrite' (值为 0 时)。 let g:rustfmt_emit_files = 0 g:rustfmt_detect_version g:rustfmt_detect_version 设为 1 时,会试图解析 "rustfmt" 的版本输出。为效能起见,缺省关闭 let g:rustfmt_detect_version = 1 g:rustfmt_find_toml g:rustfmt_find_toml 设为 1 时,会试图从当前路径向上寻找 rustfmt.toml 。为效能起见,缺省关 闭 let g:rustfmt_find_toml = 1 g:rust_playpen_url g:rust_playpen_url 覆盖用作 playpen (rust 语言快速实验场) 的 url: let g:rust_playpen_url = 'https://play.rust-lang.org/' g:rust_shortener_url g:rust_shortener_url 覆盖用作短 url 生成器的 url: let g:rust_shortener_url = 'https://is.gd/' g:rust_clip_command g:rust_clip_command 设置在 OS 里把 Rust Play url 复制到剪贴板的命令: let g:rust_clip_command = 'xclip -selection clipboard' g:cargo_makeprg_params g:cargo_makeprg_params 设置传给 cargo 的参数字符串。省略时默认为 "$*": let g:cargo_makeprg_params = 'build' g:cargo_shell_command_runner g:cargo_shell_command_runner 用于改变为 :Cargo:Cbuild:Crun 等 cargo 命令运行外壳命令的方 法。 缺省使用 :terminal ,在终端窗口里异步运行外壳命令。但如果希望改用 :! 来运行命令,可指定: let g:cargo_shell_command_runner = '!' Syntastic 集成 rust-syntastic

插件自动和 Syntastic 检查器集成。并提供两种检查器: "rustc" 和 "cargo"。后者会 调用 "Cargo" 以构建代码,而前者会把单个已编辑的 ".rs" 文件作为编译目标直接发送 给 Rust 编译器 rustc 。 由于主流 Rust 项目现在几乎都使用 Cargo 构建,因此缺省的检查器为 "cargo"。 let g:syntastic_rust_checkers = ['cargo'] 如有需要,可将 g:syntastic_rust_checkers 设为其他值。 g:rust_cargo_avoid_whole_workspace b:rust_cargo_avoid_whole_workspace g:rust_cargo_avoid_whole_workspace 在编辑 Cargo 工作空间组成部分的箱 (crate) 时,此选项设为 1 (缺省) 会直 接在箱目录而非工作空间目录里执行 'cargo'。设为 0 则反之 - 不过要谨慎使 用,在庞大的工作空间里,Cargo 命令因此会消耗更多时间,且 Syntastic 错 误列表也会包含工作空间所有箱里出现的错误。 let g:rust_cargo_avoid_whole_workspace = 0 g:rust_cargo_check_all_targets b:rust_cargo_check_all_targets g:rust_cargo_check_all_targets 设为 1 时,Syntastic 执行 cargo 时会传入 --all-targets 选项,从而 lint 包里的所有目标 (targets)。 缺省为 0。 g:rust_cargo_check_all_features b:rust_cargo_check_all_features g:rust_cargo_check_all_features 设为 1 时,Syntastic 执行 cargo 时会传入 --all-features 选项,从而 lint 包里的所有特性 (features)。 缺省为 0。 g:rust_cargo_check_examples b:rust_cargo_check_examples g:rust_cargo_check_examples 设为 1 时,Syntastic 执行 cargo 时会传入 --examples 选项,使得 lint 时不会排除示例。示例通常放在箱的 examples/ 目录里。 缺省为 0。 g:rust_cargo_check_tests b:rust_cargo_check_tests g:rust_cargo_check_tests 设为 1 时,Syntastic 执行 cargo 时会传入 --tests 选项,使得 lint 时 不会排除测试。测试通常放在箱的 tests/ 目录里。 缺省为 0。 g:rust_cargo_check_benches b:rust_cargo_check_benches g:rust_cargo_check_benches 设为 1 时,Syntastic 执行 cargo 时会传入 --benches 选项,基准测试通 常放在箱的 benches/ 目录里。 缺省为 0。 auto-pairs 集成 rust-auto-pairs

插件会自动配置 auto-pairs 插件,使之不自动重复单引号,因为单引号更常用于生命周 期标注,而非用于单字符常量。 g:rust_keep_autopairs_default g:rust_keep_autopairs_default 不为 Rust 文件类型修改 auto-pairs 缺省值。缺省为 0。

命 令 rust-commands

调用 Cargo

插件定义了在 Vim 里调用 Cargo 的简单快捷方式。 :Cargo <args> :Cargo 运行 "cargo",并传入给定的参数。 :Cbuild <args> :Cbuild ` "cargo build" 的快捷方式。 :Cclean <args> :Cclean "cargo clean" 的快捷方式。 :Cdoc <args> :Cdoc "cargo doc" 的快捷方式。 :Cinit <args> :Cinit "cargo init" 的快捷方式。 :Crun <args> :Crun "cargo run" 的快捷方式。 :Ctest <args> :Ctest "cargo test" 的快捷方式。 :Cupdate <args> :Cupdate "cargo update" 的快捷方式。 :Cbench <args> :Cbench "cargo bench" 的快捷方式。 :Csearch <args> :Csearch "cargo search" 的快捷方式。 :Cpublish <args> :Cpublish "cargo publish" 的快捷方式。 :Cinstall <args> :Cinstall "cargo install" 的快捷方式。 :Cruntarget <args> :Cruntarget 根据当前打开的缓冲区,执行 "cargo run --bin" 或 "cargo run --example" 的快捷方式。 排版

:RustFmt :RustFmt 在当前缓冲区上执行 g:rustfmt_command 。设置 g:rustfmt_options 时,会作为参数传递给该程序。 g:rustfmt_fail_silently 设为 0 (缺省) 时,会用 g:rustfmt_command 的错误填充 location-listg:rustfmt_fail_silently 设为 1 时,不会用错误填充 location-list 。 :RustFmtRange :RustFmtRange 在指定范围上执行 g:rustfmt_command 。另见 :RustFmt 。 Playpen 集成

:RustPlay :RustPlay 此命令仅当安装 web-api.vim 后才能工作 (可从这里找到 https://github.com/mattn/webapi-vim)。它会发送当前选择区,如果 没有选择过的话,则发送整个缓冲区到 Rust playpen,并发送包含缩 短过的 playpen URL 的消息。 g:rust_playpen_url 指定 playpen 的基准 URL,缺省是 "https://play.rust-lang.org/"。 g:rust_shortener_url 指定短 url 生成器的基准 url,缺省是 "https://is.gd/" g:rust_clip_command 指定当前系统中将 playpen url 复制到剪贴 板的命令。 单个 Rust 文件的运行

注意: 这些命令仅用于运行单个 Rust 文件。一般 Rust 开发流程通常无需如此。要在 Vim 里构建 Rust 箱 (crate),可用 Vim 的 make、Synastic 或利用其他插件的功能。 :RustRun [args] :RustRun :RustRun! [rustc-args] [--] [args] 编译并运行当前文件。如果有未保存的改动,先用 :update 保存。 如果当前文件为无名缓冲区,会先写入一个临时文件。编译后的二进制 代码总会放在一个临时目录里,但从当前目录处执行。 :RustRun 接受的参数会被传递给编译后的代码。 指定 ! 时,参数会传递给 rustc 而非编译后的代码。但可用 "--" 参 数分隔 rustc 的参数以及传递给编译后代码的参数。 g:rustc_path 给出时,会用作 rustc 的路径。默认为在 $PATH 中 找到的 "rustc"。 :RustExpand [args] :RustExpand :RustExpand! [TYPE] [args] 使用 --pretty 扩展当前文件,并在新分割窗口中显示结果。如果当前 文件有未保存的改动,先用 :update 保存。如果当前文件为无名缓 冲区,会先写入一个临时文件。 :RustExpand 接受的参数会被传递给 rustc。主要用来指定各种 --cfg 配置。 指定 ! 时,首个参数会被传给 rustc 用于指定 --pretty 的扩展类 型。缺省为 "expanded"。 g:rustc_path 给出时,会用作 rustc 的路径。默认为在 $PATH 中 找到的 "rustc"。 :RustEmitIr [args] :RustEmitIr 编译当前文件到 LLVM IR,并在新分割窗口中显示结果。如果当前文件 有未保存的改动,先用 :update 保存。如果当前文件为无名缓冲 区,会先写入一个临时文件。 :RustEmitIr 接受的参数会被传递给 rustc。 g:rustc_path 给出时,会用作 rustc 的路径。默认为在 $PATH 中 找到的 "rustc"。 :RustEmitAsm [args] :RustEmitAsm 编译当前文件到汇编程序,并在新分割窗口中显示结果。如果当前文件 有未保存的改动,先用 :update 保存。如果当前文件为无名缓冲 区,会先写入一个临时文件。 :RustEmitAsm 接受的参数会被传递给 rustc。 g:rustc_path 给出时,会用作 rustc 的路径。默认为在 $PATH 中 找到的 "rustc"。 运行测试

:[N]RustTest[!] [options] :RustTest 当前缓冲区在 cargo 项目中时,会用 "cargo test" 命令运行光标所 在的测试。如果该命令在光标下没找到任何测试函数,停止并报错。 给出 [N] 时,会调整新窗口大小为 N 行或列。 给出 ! 时,无视当前光标位置,运行所有测试。 [options] 给出时,会作为参数传递给 "cargo" 命令。 当前缓冲区在 cargo 项目之外时,作为后备,此命令会运行 "rustc --test" 命令而非 "cargo test"。无论有无 ! 都会运行所有 的测试,这是因为 rustc 无法指定特定的测试函数。此时 [options] 是传给 "rustc" 命令的参数。 接受可选修饰符 (见 <mods> ): :tab RustTest :belowright 16RustTest :leftabove vert 80RustTest rust.vim 调试

:RustInfo :RustInfo 释出 Vim Rust 插件的调试信息。 :RustInfoToClipboard :RustInfoClipboard 将 Vim Rust 插件的调试信息保存到缺省的无名寄存器。 :RustInfoToFile [filename] :RustInfoToFile 把 Vim Rust 插件的调试信息保存到给定文件,如果文件已存在,会覆 盖原有内容。

映 射 rust-mappings

插件定义了 [[]] 映射,用于支持悬挂缩进。

vim:tw=78:sw=4:noet:ts=8:ft=help:norl: