vim: Empty pane improvements (#13624)

Release Notes:

- vim: Fixed `:` in empty diagnostics view
- vim: Fixed `g/` outside of an editor
This commit is contained in:
Conrad Irwin 2024-06-27 21:54:03 -06:00 committed by GitHub
parent 97159bd88d
commit 363ac6bc96
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 256 additions and 64 deletions

View File

@ -47,19 +47,16 @@
"{": "vim::StartOfParagraph", "{": "vim::StartOfParagraph",
"}": "vim::EndOfParagraph", "}": "vim::EndOfParagraph",
"|": "vim::GoToColumn", "|": "vim::GoToColumn",
// Word motions // Word motions
"w": "vim::NextWordStart", "w": "vim::NextWordStart",
"e": "vim::NextWordEnd", "e": "vim::NextWordEnd",
"b": "vim::PreviousWordStart", "b": "vim::PreviousWordStart",
"g e": "vim::PreviousWordEnd", "g e": "vim::PreviousWordEnd",
// Subword motions // Subword motions
// "w": "vim::NextSubwordStart", // "w": "vim::NextSubwordStart",
// "b": "vim::PreviousSubwordStart", // "b": "vim::PreviousSubwordStart",
// "e": "vim::NextSubwordEnd", // "e": "vim::NextSubwordEnd",
// "g e": "vim::PreviousSubwordEnd", // "g e": "vim::PreviousSubwordEnd",
"shift-w": [ "shift-w": [
"vim::NextWordStart", "vim::NextWordStart",
{ {
@ -78,8 +75,12 @@
"ignorePunctuation": true "ignorePunctuation": true
} }
], ],
"g shift-e": ["vim::PreviousWordEnd", { "ignorePunctuation": true }], "g shift-e": [
"vim::PreviousWordEnd",
{
"ignorePunctuation": true
}
],
"/": "vim::Search", "/": "vim::Search",
"g /": "pane::DeploySearch", "g /": "pane::DeploySearch",
"?": [ "?": [
@ -125,16 +126,39 @@
} }
} }
], ],
"m": ["vim::PushOperator", "Mark"], "m": [
"'": ["vim::PushOperator", { "Jump": { "line": true } }], "vim::PushOperator",
"`": ["vim::PushOperator", { "Jump": { "line": false } }], "Mark"
],
"'": [
"vim::PushOperator",
{
"Jump": {
"line": true
}
}
],
"`": [
"vim::PushOperator",
{
"Jump": {
"line": false
}
}
],
";": "vim::RepeatFind", ";": "vim::RepeatFind",
",": "vim::RepeatFindReversed", ",": "vim::RepeatFindReversed",
"ctrl-o": "pane::GoBack", "ctrl-o": "pane::GoBack",
"ctrl-i": "pane::GoForward", "ctrl-i": "pane::GoForward",
"ctrl-]": "editor::GoToDefinition", "ctrl-]": "editor::GoToDefinition",
"escape": ["vim::SwitchMode", "Normal"], "escape": [
"ctrl-[": ["vim::SwitchMode", "Normal"], "vim::SwitchMode",
"Normal"
],
"ctrl-[": [
"vim::SwitchMode",
"Normal"
],
"v": "vim::ToggleVisual", "v": "vim::ToggleVisual",
"shift-v": "vim::ToggleVisualLine", "shift-v": "vim::ToggleVisualLine",
"ctrl-v": "vim::ToggleVisualBlock", "ctrl-v": "vim::ToggleVisualBlock",
@ -260,7 +284,10 @@
// z commands // z commands
"z t": "editor::ScrollCursorTop", "z t": "editor::ScrollCursorTop",
"z z": "editor::ScrollCursorCenter", "z z": "editor::ScrollCursorCenter",
"z .": ["workspace::SendKeystrokes", "z z ^"], "z .": [
"workspace::SendKeystrokes",
"z z ^"
],
"z b": "editor::ScrollCursorBottom", "z b": "editor::ScrollCursorBottom",
"z c": "editor::Fold", "z c": "editor::Fold",
"z o": "editor::UnfoldLines", "z o": "editor::UnfoldLines",
@ -278,36 +305,123 @@
} }
], ],
// Count support // Count support
"1": ["vim::Number", 1], "1": [
"2": ["vim::Number", 2], "vim::Number",
"3": ["vim::Number", 3], 1
"4": ["vim::Number", 4], ],
"5": ["vim::Number", 5], "2": [
"6": ["vim::Number", 6], "vim::Number",
"7": ["vim::Number", 7], 2
"8": ["vim::Number", 8], ],
"9": ["vim::Number", 9], "3": [
"vim::Number",
3
],
"4": [
"vim::Number",
4
],
"5": [
"vim::Number",
5
],
"6": [
"vim::Number",
6
],
"7": [
"vim::Number",
7
],
"8": [
"vim::Number",
8
],
"9": [
"vim::Number",
9
],
// window related commands (ctrl-w X) // window related commands (ctrl-w X)
"ctrl-w left": ["workspace::ActivatePaneInDirection", "Left"], "ctrl-w left": [
"ctrl-w right": ["workspace::ActivatePaneInDirection", "Right"], "workspace::ActivatePaneInDirection",
"ctrl-w up": ["workspace::ActivatePaneInDirection", "Up"], "Left"
"ctrl-w down": ["workspace::ActivatePaneInDirection", "Down"], ],
"ctrl-w h": ["workspace::ActivatePaneInDirection", "Left"], "ctrl-w right": [
"ctrl-w l": ["workspace::ActivatePaneInDirection", "Right"], "workspace::ActivatePaneInDirection",
"ctrl-w k": ["workspace::ActivatePaneInDirection", "Up"], "Right"
"ctrl-w j": ["workspace::ActivatePaneInDirection", "Down"], ],
"ctrl-w ctrl-h": ["workspace::ActivatePaneInDirection", "Left"], "ctrl-w up": [
"ctrl-w ctrl-l": ["workspace::ActivatePaneInDirection", "Right"], "workspace::ActivatePaneInDirection",
"ctrl-w ctrl-k": ["workspace::ActivatePaneInDirection", "Up"], "Up"
"ctrl-w ctrl-j": ["workspace::ActivatePaneInDirection", "Down"], ],
"ctrl-w shift-left": ["workspace::SwapPaneInDirection", "Left"], "ctrl-w down": [
"ctrl-w shift-right": ["workspace::SwapPaneInDirection", "Right"], "workspace::ActivatePaneInDirection",
"ctrl-w shift-up": ["workspace::SwapPaneInDirection", "Up"], "Down"
"ctrl-w shift-down": ["workspace::SwapPaneInDirection", "Down"], ],
"ctrl-w shift-h": ["workspace::SwapPaneInDirection", "Left"], "ctrl-w h": [
"ctrl-w shift-l": ["workspace::SwapPaneInDirection", "Right"], "workspace::ActivatePaneInDirection",
"ctrl-w shift-k": ["workspace::SwapPaneInDirection", "Up"], "Left"
"ctrl-w shift-j": ["workspace::SwapPaneInDirection", "Down"], ],
"ctrl-w l": [
"workspace::ActivatePaneInDirection",
"Right"
],
"ctrl-w k": [
"workspace::ActivatePaneInDirection",
"Up"
],
"ctrl-w j": [
"workspace::ActivatePaneInDirection",
"Down"
],
"ctrl-w ctrl-h": [
"workspace::ActivatePaneInDirection",
"Left"
],
"ctrl-w ctrl-l": [
"workspace::ActivatePaneInDirection",
"Right"
],
"ctrl-w ctrl-k": [
"workspace::ActivatePaneInDirection",
"Up"
],
"ctrl-w ctrl-j": [
"workspace::ActivatePaneInDirection",
"Down"
],
"ctrl-w shift-left": [
"workspace::SwapPaneInDirection",
"Left"
],
"ctrl-w shift-right": [
"workspace::SwapPaneInDirection",
"Right"
],
"ctrl-w shift-up": [
"workspace::SwapPaneInDirection",
"Up"
],
"ctrl-w shift-down": [
"workspace::SwapPaneInDirection",
"Down"
],
"ctrl-w shift-h": [
"workspace::SwapPaneInDirection",
"Left"
],
"ctrl-w shift-l": [
"workspace::SwapPaneInDirection",
"Right"
],
"ctrl-w shift-k": [
"workspace::SwapPaneInDirection",
"Up"
],
"ctrl-w shift-j": [
"workspace::SwapPaneInDirection",
"Down"
],
"ctrl-w g t": "pane::ActivateNextItem", "ctrl-w g t": "pane::ActivateNextItem",
"ctrl-w ctrl-g t": "pane::ActivateNextItem", "ctrl-w ctrl-g t": "pane::ActivateNextItem",
"ctrl-w g shift-t": "pane::ActivatePrevItem", "ctrl-w g shift-t": "pane::ActivatePrevItem",
@ -329,9 +443,14 @@
"ctrl-w ctrl-q": "pane::CloseAllItems", "ctrl-w ctrl-q": "pane::CloseAllItems",
"ctrl-w o": "workspace::CloseInactiveTabsAndPanes", "ctrl-w o": "workspace::CloseInactiveTabsAndPanes",
"ctrl-w ctrl-o": "workspace::CloseInactiveTabsAndPanes", "ctrl-w ctrl-o": "workspace::CloseInactiveTabsAndPanes",
"ctrl-w n": ["workspace::NewFileInDirection", "Up"], "ctrl-w n": [
"ctrl-w ctrl-n": ["workspace::NewFileInDirection", "Up"], "workspace::NewFileInDirection",
"Up"
],
"ctrl-w ctrl-n": [
"workspace::NewFileInDirection",
"Up"
],
"ctrl-w d": "editor::GoToDefinitionSplit", "ctrl-w d": "editor::GoToDefinitionSplit",
"ctrl-w g d": "editor::GoToDefinitionSplit", "ctrl-w g d": "editor::GoToDefinitionSplit",
"ctrl-w shift-d": "editor::GoToTypeDefinitionSplit", "ctrl-w shift-d": "editor::GoToTypeDefinitionSplit",
@ -353,12 +472,21 @@
"context": "Editor && vim_mode == normal && vim_operator == none && !VimWaiting", "context": "Editor && vim_mode == normal && vim_operator == none && !VimWaiting",
"bindings": { "bindings": {
".": "vim::Repeat", ".": "vim::Repeat",
"c": ["vim::PushOperator", "Change"], "c": [
"vim::PushOperator",
"Change"
],
"shift-c": "vim::ChangeToEndOfLine", "shift-c": "vim::ChangeToEndOfLine",
"d": ["vim::PushOperator", "Delete"], "d": [
"vim::PushOperator",
"Delete"
],
"shift-d": "vim::DeleteToEndOfLine", "shift-d": "vim::DeleteToEndOfLine",
"shift-j": "vim::JoinLines", "shift-j": "vim::JoinLines",
"y": ["vim::PushOperator", "Yank"], "y": [
"vim::PushOperator",
"Yank"
],
"shift-y": "vim::YankLine", "shift-y": "vim::YankLine",
"i": "vim::InsertBefore", "i": "vim::InsertBefore",
"shift-i": "vim::InsertFirstNonWhitespace", "shift-i": "vim::InsertFirstNonWhitespace",
@ -380,15 +508,36 @@
], ],
"u": "editor::Undo", "u": "editor::Undo",
"ctrl-r": "editor::Redo", "ctrl-r": "editor::Redo",
"r": ["vim::PushOperator", "Replace"], "r": [
"vim::PushOperator",
"Replace"
],
"s": "vim::Substitute", "s": "vim::Substitute",
"shift-s": "vim::SubstituteLine", "shift-s": "vim::SubstituteLine",
">": ["vim::PushOperator", "Indent"], ">": [
"<": ["vim::PushOperator", "Outdent"], "vim::PushOperator",
"g u": ["vim::PushOperator", "Lowercase"], "Indent"
"g shift-u": ["vim::PushOperator", "Uppercase"], ],
"g ~": ["vim::PushOperator", "OppositeCase"], "<": [
"\"": ["vim::PushOperator", "Register"], "vim::PushOperator",
"Outdent"
],
"g u": [
"vim::PushOperator",
"Lowercase"
],
"g shift-u": [
"vim::PushOperator",
"Uppercase"
],
"g ~": [
"vim::PushOperator",
"OppositeCase"
],
"\"": [
"vim::PushOperator",
"Register"
],
"ctrl-pagedown": "pane::ActivateNextItem", "ctrl-pagedown": "pane::ActivateNextItem",
"ctrl-pageup": "pane::ActivatePrevItem", "ctrl-pageup": "pane::ActivatePrevItem",
// tree-sitter related commands // tree-sitter related commands
@ -403,7 +552,10 @@
{ {
"context": "Editor && vim_mode == visual && vim_operator == none && !VimWaiting", "context": "Editor && vim_mode == visual && vim_operator == none && !VimWaiting",
"bindings": { "bindings": {
"\"": ["vim::PushOperator", "Register"], "\"": [
"vim::PushOperator",
"Register"
],
// tree-sitter related commands // tree-sitter related commands
"[ x": "editor::SelectLargerSyntaxNode", "[ x": "editor::SelectLargerSyntaxNode",
"] x": "editor::SelectSmallerSyntaxNode" "] x": "editor::SelectSmallerSyntaxNode"
@ -412,7 +564,10 @@
{ {
"context": "Editor && VimCount && vim_mode != insert", "context": "Editor && VimCount && vim_mode != insert",
"bindings": { "bindings": {
"0": ["vim::Number", 0] "0": [
"vim::Number",
0
]
} }
}, },
{ {
@ -463,7 +618,10 @@
{ {
"context": "Editor && vim_mode == normal && vim_operator == d", "context": "Editor && vim_mode == normal && vim_operator == d",
"bindings": { "bindings": {
"s": ["vim::PushOperator", "DeleteSurrounds"] "s": [
"vim::PushOperator",
"DeleteSurrounds"
]
} }
}, },
{ {
@ -585,10 +743,22 @@
"shift-i": "vim::InsertBefore", "shift-i": "vim::InsertBefore",
"shift-a": "vim::InsertAfter", "shift-a": "vim::InsertAfter",
"shift-j": "vim::JoinLines", "shift-j": "vim::JoinLines",
"r": ["vim::PushOperator", "Replace"], "r": [
"ctrl-c": ["vim::SwitchMode", "Normal"], "vim::PushOperator",
"escape": ["vim::SwitchMode", "Normal"], "Replace"
"ctrl-[": ["vim::SwitchMode", "Normal"], ],
"ctrl-c": [
"vim::SwitchMode",
"Normal"
],
"escape": [
"vim::SwitchMode",
"Normal"
],
"ctrl-[": [
"vim::SwitchMode",
"Normal"
],
">": "vim::Indent", ">": "vim::Indent",
"<": "vim::Outdent", "<": "vim::Outdent",
"i": [ "i": [
@ -636,7 +806,10 @@
"ctrl-u": "editor::DeleteToBeginningOfLine", "ctrl-u": "editor::DeleteToBeginningOfLine",
"ctrl-t": "vim::Indent", "ctrl-t": "vim::Indent",
"ctrl-d": "vim::Outdent", "ctrl-d": "vim::Outdent",
"ctrl-r": ["vim::PushOperator", "Register"] "ctrl-r": [
"vim::PushOperator",
"Register"
]
} }
}, },
{ {
@ -655,8 +828,14 @@
"bindings": { "bindings": {
"tab": "vim::Tab", "tab": "vim::Tab",
"enter": "vim::Enter", "enter": "vim::Enter",
"escape": ["vim::SwitchMode", "Normal"], "escape": [
"ctrl-[": ["vim::SwitchMode", "Normal"] "vim::SwitchMode",
"Normal"
],
"ctrl-[": [
"vim::SwitchMode",
"Normal"
]
} }
}, },
{ {
@ -676,7 +855,8 @@
{ {
"context": "EmptyPane || SharedScreen", "context": "EmptyPane || SharedScreen",
"bindings": { "bindings": {
":": "command_palette::Toggle" ":": "command_palette::Toggle",
"g /": "pane::DeploySearch"
} }
}, },
{ {

View File

@ -102,6 +102,9 @@ impl Render for ProjectDiagnosticsEditor {
div() div()
.track_focus(&self.focus_handle) .track_focus(&self.focus_handle)
.when(self.path_states.is_empty(), |el| {
el.key_context("EmptyPane")
})
.size_full() .size_full()
.on_action(cx.listener(Self::toggle_warnings)) .on_action(cx.listener(Self::toggle_warnings))
.child(child) .child(child)

View File

@ -114,6 +114,15 @@ For vim-specific shortcuts, you may find the following template a good place to
// e.g. // e.g.
// "j j": "vim::NormalBefore" // remap jj in insert mode to escape. // "j j": "vim::NormalBefore" // remap jj in insert mode to escape.
} }
},
{
"context": "EmptyPane || SharedScreen",
"bindings": {
// put key-bindings here (in addition to above) if you want them to
// work when no editor exists
// e.g.
// "space f": "file_finder::Toggle"
}
} }
] ]
``` ```