vim: f
and t
multiline option (#8448)
I'm not sure how compliant you're aiming to be with vim, but the `f` behavior is more useful when it can search on multiple lines instead of a single one, so I'd like to propose this change. This change is quite frequent in vim/neovim as a plugin (e.g. [clever-f](https://github.com/VSCodeVim/Vim), [improved-ft](https://github.com/backdround/improved-ft.nvim), etc), and in other vim emulations (e.g. [vscode-vim](https://github.com/VSCodeVim/Vim)).
This commit is contained in:
parent
bd8896a3dc
commit
9a7a267203
6 changed files with 186 additions and 37 deletions
|
@ -379,10 +379,12 @@ pub(crate) fn normal_replace(text: Arc<str>, cx: &mut WindowContext) {
|
|||
mod test {
|
||||
use gpui::TestAppContext;
|
||||
use indoc::indoc;
|
||||
use settings::SettingsStore;
|
||||
|
||||
use crate::{
|
||||
state::Mode::{self},
|
||||
test::NeovimBackedTestContext,
|
||||
test::{NeovimBackedTestContext, VimTestContext},
|
||||
VimSettings,
|
||||
};
|
||||
|
||||
#[gpui::test]
|
||||
|
@ -903,6 +905,90 @@ mod test {
|
|||
}
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
async fn test_f_and_t_multiline(cx: &mut gpui::TestAppContext) {
|
||||
let mut cx = VimTestContext::new(cx, true).await;
|
||||
cx.update_global(|store: &mut SettingsStore, cx| {
|
||||
store.update_user_settings::<VimSettings>(cx, |s| {
|
||||
s.use_multiline_find = Some(true);
|
||||
});
|
||||
});
|
||||
|
||||
cx.assert_binding(
|
||||
["f", "l"],
|
||||
indoc! {"
|
||||
ˇfunction print() {
|
||||
console.log('ok')
|
||||
}
|
||||
"},
|
||||
Mode::Normal,
|
||||
indoc! {"
|
||||
function print() {
|
||||
consoˇle.log('ok')
|
||||
}
|
||||
"},
|
||||
Mode::Normal,
|
||||
);
|
||||
|
||||
cx.assert_binding(
|
||||
["t", "l"],
|
||||
indoc! {"
|
||||
ˇfunction print() {
|
||||
console.log('ok')
|
||||
}
|
||||
"},
|
||||
Mode::Normal,
|
||||
indoc! {"
|
||||
function print() {
|
||||
consˇole.log('ok')
|
||||
}
|
||||
"},
|
||||
Mode::Normal,
|
||||
);
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
async fn test_capital_f_and_capital_t_multiline(cx: &mut gpui::TestAppContext) {
|
||||
let mut cx = VimTestContext::new(cx, true).await;
|
||||
cx.update_global(|store: &mut SettingsStore, cx| {
|
||||
store.update_user_settings::<VimSettings>(cx, |s| {
|
||||
s.use_multiline_find = Some(true);
|
||||
});
|
||||
});
|
||||
|
||||
cx.assert_binding(
|
||||
["shift-f", "p"],
|
||||
indoc! {"
|
||||
function print() {
|
||||
console.ˇlog('ok')
|
||||
}
|
||||
"},
|
||||
Mode::Normal,
|
||||
indoc! {"
|
||||
function ˇprint() {
|
||||
console.log('ok')
|
||||
}
|
||||
"},
|
||||
Mode::Normal,
|
||||
);
|
||||
|
||||
cx.assert_binding(
|
||||
["shift-t", "p"],
|
||||
indoc! {"
|
||||
function print() {
|
||||
console.ˇlog('ok')
|
||||
}
|
||||
"},
|
||||
Mode::Normal,
|
||||
indoc! {"
|
||||
function pˇrint() {
|
||||
console.log('ok')
|
||||
}
|
||||
"},
|
||||
Mode::Normal,
|
||||
);
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
async fn test_percent(cx: &mut TestAppContext) {
|
||||
let mut cx = NeovimBackedTestContext::new(cx).await.binding(["%"]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue