reedline/edit_mode/vi/
vi_keybindings.rs

1use crossterm::event::{KeyCode, KeyModifiers};
2
3use crate::{
4    edit_mode::{
5        keybindings::{
6            add_common_control_bindings, add_common_edit_bindings, add_common_navigation_bindings,
7            edit_bind,
8        },
9        Keybindings,
10    },
11    EditCommand,
12};
13
14/// Default Vi normal keybindings
15pub fn default_vi_normal_keybindings() -> Keybindings {
16    let mut kb = Keybindings::new();
17    use EditCommand as EC;
18    use KeyCode as KC;
19    use KeyModifiers as KM;
20
21    add_common_control_bindings(&mut kb);
22    add_common_navigation_bindings(&mut kb);
23    // Replicate vi's default behavior for Backspace and delete
24    kb.add_binding(KM::NONE, KC::Backspace, edit_bind(EC::MoveLeft));
25    kb.add_binding(KM::NONE, KC::Delete, edit_bind(EC::Delete));
26
27    kb
28}
29
30/// Default Vi insert keybindings
31pub fn default_vi_insert_keybindings() -> Keybindings {
32    let mut kb = Keybindings::new();
33
34    add_common_control_bindings(&mut kb);
35    add_common_navigation_bindings(&mut kb);
36    add_common_edit_bindings(&mut kb);
37
38    kb
39}