#editor #command #user #visual #configured #path #environment

editor-command

在用户配置的编辑器中打开文件

1 个不稳定版本

0.1.0 2024年8月16日

#4#configured

Download history 184/week @ 2024-08-11 48/week @ 2024-08-18

232 每月下载量

MIT 许可证

16KB
199 行代码(不含注释)

editor-command

Test CI crates.io docs.rs

VISUALEDITOR 环境变量中加载用户首选的文件编辑命令。

use editor_command::EditorCommand;
use std::process::Command;

std::env::set_var("VISUAL", "vim");
let mut command: Command = EditorCommand::edit_file("file.txt").unwrap();
command.spawn();

lib.rs:

获取一个可执行 [Command],用于在用户配置的编辑器中打开特定文件。

特性

  • VISUALEDITOR 环境变量中加载编辑命令
  • 指定高优先级覆盖命令和低优先级默认命令
  • 传递一个或多个要由编辑器打开的路径
  • 灵活的构建器模式

示例

最简单的用法如下

use editor_command::EditorBuilder;
use std::process::Command;

std::env::set_var("VISUAL", "vim");
let command: Command = EditorBuilder::edit_file("file.txt").unwrap();
assert_eq!(command.get_program(), "vim");

这是一个使用构建器模式为 [EditorBuilder] 提供覆盖和回退命令的示例

use editor_command::EditorBuilder;
use std::process::Command;

// In your app, this could be an optional field from a config object
let override_command = Some("code --wait");
let command: Command = EditorBuilder::new()
    // In this case, the override is always populated so it will always win.
    // In reality it would be an optional user-provided field.
    .source(override_command)
    .environment()
    // If both VISUAL and EDITOR are undefined, we'll fall back to this
    .source(Some("vi"))
    .build()
    .unwrap();
assert_eq!(format!("{command:?}"), "\"code\" \"--wait\"");

这种模式对于有方法配置特定应用编辑器的应用程序很有用。例如,git 有 core.editor 配置字段

语法

命令的语法旨在类似于常见壳的命令语法。第一个单词是程序名称,后续令牌(由空格分隔)是该程序的参数。可以使用单引号和双引号将多个令牌连接成一个参数。

命令解析由 crate [shellish_parse](默认 [ParseOptions])处理。有关语法的详细信息,请参阅那些文档。

生命周期

[EditorBuilder] 接受一个生命周期参数,该参数绑定到它包含的字符串数据(包括命令字符串和路径)。这是为了防止在从 &str 构建命令/路径时进行不必要的克隆。如果您需要 [EditorBuilder] 实例为 'static,例如,以便可以从函数中返回,您可以简单地使用 EditorBuilder<'static>。内部,所有字符串都存储为 [Cow],因此将在必要时进行克隆。

use editor_command::EditorBuilder;

/// This is a contrived example of returning a command with owned data
fn get_editor_builder<'a>(command: &'a str) -> EditorBuilder<'static> {
    // The lifetime bounds enforce the .to_owned() call
    EditorBuilder::new().source(Some(command.to_owned()))
}

let command = get_editor_builder("vim").build().unwrap();
assert_eq!(command.get_program(), "vim");

资源

有关 VISUALEDITOR 环境变量的更多信息,请参阅此线程

依赖项

~36KB