Chapter 01

RustからVimを呼び出して使用する

sinofseven
sinofseven
2023.03.10に更新

CLI Toolを作るにあたって、git commitのようにviを呼び出せるようにしたかった。

以下の内容を参考に実装してみた。

src/main.rs
use std::fs;

fn main() -> Result<(), String> {
    let base_text = "1\n22\n333\n444\n";
    let file_name = "text.txt";

    fs::write(file_name, base_text).map_err(|e| format!("failed to write: {}", e))?;

    let mut a = std::process::Command::new("vi")
        .arg(file_name)
        .spawn()
        .map_err(|e| format!("failed to spawn: {}", e))?;

    let b = a.wait().map_err(|e| format!("failed to wait: {}", e))?;

    println!("exit code: {:?}", b.code());

    let c = fs::read_to_string(file_name).map_err(|e| format!("failed to read: {}", e))?;

    println!("is changed: {}", base_text != &c);

    Ok(())
}