diff --git a/src/cli.rs b/src/cli.rs index 4aa9c34d0..e01afe89f 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -17,7 +17,7 @@ use crate::prelude::*; use log::{debug, trace}; use regex::Regex; use rustyline::error::ReadlineError; -use rustyline::{self, ColorMode, Config, Editor}; +use rustyline::{self, ColorMode, Config, Editor, config::Configurer, config::EditMode}; use std::env; use std::error::Error; use std::io::{BufRead, BufReader, Write}; @@ -256,6 +256,17 @@ pub async fn cli() -> Result<(), Box> { context.shell_manager.clone(), ))); + let edit_mode = crate::object::config::config(Span::unknown())? + .get("edit_mode") + .map(|s| match s.as_string().unwrap().as_ref() { + "vi" => EditMode::Vi, + "emacs" => EditMode::Emacs, + _ => EditMode::Emacs, + }) + .unwrap_or(EditMode::Emacs); + + rl.set_edit_mode(edit_mode); + let readline = rl.readline(&format!( "{}{}> ", cwd, diff --git a/src/commands/config.rs b/src/commands/config.rs index b1400207c..c41c1d374 100644 --- a/src/commands/config.rs +++ b/src/commands/config.rs @@ -111,6 +111,7 @@ pub fn config( if result.contains_key(&key) { result.remove(&key); + config::write_config(&result)?; } else { return Err(ShellError::string(&format!( "{} does not exist in config",