commands: add * as selection search.

This commit is contained in:
Blaž Hrastnik 2021-02-22 15:14:02 +09:00
parent 61ce2c9cfe
commit 33c67f1388
3 changed files with 12 additions and 2 deletions

View file

@ -120,7 +120,7 @@ impl Range {
// groupAt
#[inline]
pub fn fragment<'a>(&'a self, text: RopeSlice<'a>) -> Cow<'a, str> {
pub fn fragment<'a, 'b: 'a>(&'a self, text: RopeSlice<'b>) -> Cow<'b, str> {
Cow::from(text.slice(self.from()..self.to() + 1))
}
}

View file

@ -1,7 +1,7 @@
use helix_core::{
comment, graphemes,
indent::TAB_WIDTH,
regex::Regex,
regex::{self, Regex},
register, selection,
state::{Direction, Granularity, State},
ChangeSet, Range, Selection, Tendril, Transaction,
@ -412,6 +412,15 @@ pub fn search_next(cx: &mut Context) {
}
}
pub fn search_selection(cx: &mut Context) {
let doc = cx.doc();
let contents = doc.text().slice(..);
let query = doc.selection().primary().fragment(contents);
let regex = regex::escape(&query);
register::set('\\', vec![regex]);
search_next(cx);
}
// TODO: N -> search_prev
// need to loop around buffer also and show a message
// same for no matches

View file

@ -170,6 +170,7 @@ pub fn default() -> Keymaps {
vec![key!('x')] => commands::select_line,
vec![key!('/')] => commands::search,
vec![key!('n')] => commands::search_next,
vec![key!('*')] => commands::search_selection,
vec![key!('u')] => commands::undo,
vec![shift!('U')] => commands::redo,
vec![key!('y')] => commands::yank,