Add command to add word boundaries to search (#4322)

* Add command to add word boundaries to search

* Calculate string capacity before building
pull/4747/head
Armin Ronacher 2 years ago committed by GitHub
parent 77be98c783
commit 392a018aeb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -250,6 +250,7 @@ impl MappableCommand {
extend_search_next, "Add next search match to selection", extend_search_next, "Add next search match to selection",
extend_search_prev, "Add previous search match to selection", extend_search_prev, "Add previous search match to selection",
search_selection, "Use current selection as search pattern", search_selection, "Use current selection as search pattern",
make_search_word_bounded, "Modify current search to make it word bounded",
global_search, "Global search in workspace folder", global_search, "Global search in workspace folder",
extend_line, "Select current line, if already selected, extend to another line based on the anchor", extend_line, "Select current line, if already selected, extend to another line based on the anchor",
extend_line_below, "Select current line, if already selected, extend to next line", extend_line_below, "Select current line, if already selected, extend to next line",
@ -1809,6 +1810,35 @@ fn search_selection(cx: &mut Context) {
cx.editor.set_status(msg); cx.editor.set_status(msg);
} }
fn make_search_word_bounded(cx: &mut Context) {
let regex = match cx.editor.registers.last('/') {
Some(regex) => regex,
None => return,
};
let start_anchored = regex.starts_with("\\b");
let end_anchored = regex.ends_with("\\b");
if start_anchored && end_anchored {
return;
}
let mut new_regex = String::with_capacity(
regex.len() + if start_anchored { 0 } else { 2 } + if end_anchored { 0 } else { 2 },
);
if !start_anchored {
new_regex.push_str("\\b");
}
new_regex.push_str(regex);
if !end_anchored {
new_regex.push_str("\\b");
}
let msg = format!("register '{}' set to '{}'", '/', &new_regex);
cx.editor.registers.get_mut('/').push(new_regex);
cx.editor.set_status(msg);
}
fn global_search(cx: &mut Context) { fn global_search(cx: &mut Context) {
#[derive(Debug)] #[derive(Debug)]
struct FileResult { struct FileResult {

Loading…
Cancel
Save