diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json index c824fc75890e935a428005606ca474ee2698f5e7..9e69240d27200c591e110fd5578a85b13fe96668 100644 --- a/assets/keymaps/vim.json +++ b/assets/keymaps/vim.json @@ -531,7 +531,7 @@ } }, { - "context": "BufferSearchBar > VimEnabled", + "context": "BufferSearchBar && !in_replace > VimEnabled", "bindings": { "enter": "vim::SearchSubmit", "escape": "buffer_search::Dismiss" diff --git a/crates/project/src/search.rs b/crates/project/src/search.rs index 663ad4612358d3437a59f0bee3a3469ae0ae9798..5586c1e867c2a27995df7a403986be5fb10165be 100644 --- a/crates/project/src/search.rs +++ b/crates/project/src/search.rs @@ -159,7 +159,7 @@ impl SearchQuery { ) } } - pub fn with_replacement(mut self, new_replacement: Option) -> Self { + pub fn with_replacement(mut self, new_replacement: String) -> Self { match self { Self::Text { ref mut replacement, @@ -169,7 +169,7 @@ impl SearchQuery { ref mut replacement, .. } => { - *replacement = new_replacement; + *replacement = Some(new_replacement); self } } diff --git a/crates/search/src/buffer_search.rs b/crates/search/src/buffer_search.rs index eb15146314a7bff10ff307b7c79ed561453d9abe..142b548a9341cf459e12eb3072ac57c75183e9ba 100644 --- a/crates/search/src/buffer_search.rs +++ b/crates/search/src/buffer_search.rs @@ -774,8 +774,7 @@ impl BufferSearchBar { Vec::new(), Vec::new(), ) { - Ok(query) => query - .with_replacement(Some(self.replacement(cx)).filter(|s| !s.is_empty())), + Ok(query) => query.with_replacement(self.replacement(cx)), Err(_) => { self.query_contains_error = true; cx.notify(); @@ -790,8 +789,7 @@ impl BufferSearchBar { Vec::new(), Vec::new(), ) { - Ok(query) => query - .with_replacement(Some(self.replacement(cx)).filter(|s| !s.is_empty())), + Ok(query) => query.with_replacement(self.replacement(cx)), Err(_) => { self.query_contains_error = true; cx.notify(); @@ -904,6 +902,9 @@ impl BufferSearchBar { if let Some(_) = &bar.active_searchable_item { should_propagate = false; bar.replace_is_active = !bar.replace_is_active; + if bar.dismissed { + bar.show(cx); + } cx.notify(); } }); @@ -921,14 +922,13 @@ impl BufferSearchBar { .get(&searchable_item.downgrade()) { if let Some(active_index) = self.active_match_index { - let query = query.as_ref().clone().with_replacement( - Some(self.replacement(cx)).filter(|rep| !rep.is_empty()), - ); + let query = query + .as_ref() + .clone() + .with_replacement(self.replacement(cx)); searchable_item.replace(&matches[active_index], &query, cx); self.select_next_match(&SelectNextMatch, cx); } - - self.focus_editor(&FocusEditor, cx); } } } @@ -942,14 +942,13 @@ impl BufferSearchBar { .searchable_items_with_matches .get(&searchable_item.downgrade()) { - let query = query.as_ref().clone().with_replacement( - Some(self.replacement(cx)).filter(|rep| !rep.is_empty()), - ); + let query = query + .as_ref() + .clone() + .with_replacement(self.replacement(cx)); for m in matches { searchable_item.replace(m, &query, cx); } - - self.focus_editor(&FocusEditor, cx); } } }