vim: Add :sp[lit] <filename>
and :vs[plit] <filename>
support (#33686)
Closes #32627 Release Notes: - Adds `:sp[lit] <filename>` and `:vs[plit] <filename>` support
This commit is contained in:
parent
ecf4d5539e
commit
acff48fc0d
1 changed files with 53 additions and 3 deletions
|
@ -28,8 +28,8 @@ use std::{
|
||||||
use task::{HideStrategy, RevealStrategy, SpawnInTerminal, TaskId};
|
use task::{HideStrategy, RevealStrategy, SpawnInTerminal, TaskId};
|
||||||
use ui::ActiveTheme;
|
use ui::ActiveTheme;
|
||||||
use util::ResultExt;
|
use util::ResultExt;
|
||||||
use workspace::notifications::DetachAndPromptErr;
|
|
||||||
use workspace::{Item, SaveIntent, notifications::NotifyResultExt};
|
use workspace::{Item, SaveIntent, notifications::NotifyResultExt};
|
||||||
|
use workspace::{SplitDirection, notifications::DetachAndPromptErr};
|
||||||
use zed_actions::{OpenDocs, RevealTarget};
|
use zed_actions::{OpenDocs, RevealTarget};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -175,6 +175,13 @@ struct VimSave {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Deletes the specified marks from the editor.
|
/// Deletes the specified marks from the editor.
|
||||||
|
#[derive(Clone, PartialEq, Action)]
|
||||||
|
#[action(namespace = vim, no_json, no_register)]
|
||||||
|
struct VimSplit {
|
||||||
|
pub vertical: bool,
|
||||||
|
pub filename: String,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, PartialEq, Action)]
|
#[derive(Clone, PartialEq, Action)]
|
||||||
#[action(namespace = vim, no_json, no_register)]
|
#[action(namespace = vim, no_json, no_register)]
|
||||||
enum DeleteMarks {
|
enum DeleteMarks {
|
||||||
|
@ -323,6 +330,33 @@ pub fn register(editor: &mut Editor, cx: &mut Context<Vim>) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Vim::action(editor, cx, |vim, action: &VimSplit, window, cx| {
|
||||||
|
let Some(workspace) = vim.workspace(window) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
workspace.update(cx, |workspace, cx| {
|
||||||
|
let project = workspace.project().clone();
|
||||||
|
let Some(worktree) = project.read(cx).visible_worktrees(cx).next() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
let project_path = ProjectPath {
|
||||||
|
worktree_id: worktree.read(cx).id(),
|
||||||
|
path: Arc::from(Path::new(&action.filename)),
|
||||||
|
};
|
||||||
|
|
||||||
|
let direction = if action.vertical {
|
||||||
|
SplitDirection::vertical(cx)
|
||||||
|
} else {
|
||||||
|
SplitDirection::horizontal(cx)
|
||||||
|
};
|
||||||
|
|
||||||
|
workspace
|
||||||
|
.split_path_preview(project_path, false, Some(direction), window, cx)
|
||||||
|
.detach_and_log_err(cx);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
Vim::action(editor, cx, |vim, action: &DeleteMarks, window, cx| {
|
Vim::action(editor, cx, |vim, action: &DeleteMarks, window, cx| {
|
||||||
fn err(s: String, window: &mut Window, cx: &mut Context<Editor>) {
|
fn err(s: String, window: &mut Window, cx: &mut Context<Editor>) {
|
||||||
let _ = window.prompt(
|
let _ = window.prompt(
|
||||||
|
@ -998,8 +1032,24 @@ fn generate_commands(_: &App) -> Vec<VimCommand> {
|
||||||
save_intent: Some(SaveIntent::Overwrite),
|
save_intent: Some(SaveIntent::Overwrite),
|
||||||
}),
|
}),
|
||||||
VimCommand::new(("cq", "uit"), zed_actions::Quit),
|
VimCommand::new(("cq", "uit"), zed_actions::Quit),
|
||||||
VimCommand::new(("sp", "lit"), workspace::SplitHorizontal),
|
VimCommand::new(("sp", "lit"), workspace::SplitHorizontal).args(|_, args| {
|
||||||
VimCommand::new(("vs", "plit"), workspace::SplitVertical),
|
Some(
|
||||||
|
VimSplit {
|
||||||
|
vertical: false,
|
||||||
|
filename: args,
|
||||||
|
}
|
||||||
|
.boxed_clone(),
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
VimCommand::new(("vs", "plit"), workspace::SplitVertical).args(|_, args| {
|
||||||
|
Some(
|
||||||
|
VimSplit {
|
||||||
|
vertical: true,
|
||||||
|
filename: args,
|
||||||
|
}
|
||||||
|
.boxed_clone(),
|
||||||
|
)
|
||||||
|
}),
|
||||||
VimCommand::new(
|
VimCommand::new(
|
||||||
("bd", "elete"),
|
("bd", "elete"),
|
||||||
workspace::CloseActiveItem {
|
workspace::CloseActiveItem {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue