From 40744ce8356cb9307f8cb9b2adf2c57b80b1ef9f Mon Sep 17 00:00:00 2001 From: Ivan Tham Date: Sat, 5 Jun 2021 18:15:50 +0800 Subject: Add ctrl-w in insert mode It seemed to panic when I pressed too many times, but that is from lsp side. --- helix-term/src/commands.rs | 20 +++++++++++++++++--- helix-term/src/keymap.rs | 1 + 2 files changed, 18 insertions(+), 3 deletions(-) (limited to 'helix-term/src') diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index c88a5eee..f340da91 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -3,8 +3,8 @@ use helix_core::{ movement::{self, Direction}, object, pos_at_coords, regex::{self, Regex}, - register, search, selection, Change, ChangeSet, Position, Range, Rope, RopeSlice, Selection, - SmallVec, Tendril, Transaction, + register, search, selection, words, Change, ChangeSet, Position, Range, Rope, RopeSlice, + Selection, SmallVec, Tendril, Transaction, }; use helix_view::{ @@ -1782,7 +1782,6 @@ pub mod insert { pub fn delete_char_forward(cx: &mut Context) { let count = cx.count; - let doc = cx.doc(); let (view, doc) = cx.current(); let text = doc.text().slice(..); let transaction = @@ -1795,6 +1794,21 @@ pub mod insert { }); doc.apply(&transaction, view.id); } + + pub fn delete_word_backward(cx: &mut Context) { + let count = cx.count; + let (view, doc) = cx.current(); + let text = doc.text().slice(..); + let transaction = + Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| { + ( + words::nth_prev_word_boundary(text, range.head, count), + range.head, + None, + ) + }); + doc.apply(&transaction, view.id); + } } // Undo / Redo diff --git a/helix-term/src/keymap.rs b/helix-term/src/keymap.rs index e51dfbc5..6ef53915 100644 --- a/helix-term/src/keymap.rs +++ b/helix-term/src/keymap.rs @@ -360,6 +360,7 @@ pub fn default() -> Keymaps { } => commands::insert::insert_tab, ctrl!('x') => commands::completion, + ctrl!('w') => commands::insert::delete_word_backward, ), ) } -- cgit v1.2.3-70-g09d2