diff --git a/assets/keymaps/vim.json b/assets/keymaps/vim.json index 97b439904a..cd43178522 100644 --- a/assets/keymaps/vim.json +++ b/assets/keymaps/vim.json @@ -47,19 +47,16 @@ "{": "vim::StartOfParagraph", "}": "vim::EndOfParagraph", "|": "vim::GoToColumn", - // Word motions "w": "vim::NextWordStart", "e": "vim::NextWordEnd", "b": "vim::PreviousWordStart", "g e": "vim::PreviousWordEnd", - // Subword motions // "w": "vim::NextSubwordStart", // "b": "vim::PreviousSubwordStart", // "e": "vim::NextSubwordEnd", // "g e": "vim::PreviousSubwordEnd", - "shift-w": [ "vim::NextWordStart", { @@ -78,8 +75,12 @@ "ignorePunctuation": true } ], - "g shift-e": ["vim::PreviousWordEnd", { "ignorePunctuation": true }], - + "g shift-e": [ + "vim::PreviousWordEnd", + { + "ignorePunctuation": true + } + ], "/": "vim::Search", "g /": "pane::DeploySearch", "?": [ @@ -125,16 +126,39 @@ } } ], - "m": ["vim::PushOperator", "Mark"], - "'": ["vim::PushOperator", { "Jump": { "line": true } }], - "`": ["vim::PushOperator", { "Jump": { "line": false } }], + "m": [ + "vim::PushOperator", + "Mark" + ], + "'": [ + "vim::PushOperator", + { + "Jump": { + "line": true + } + } + ], + "`": [ + "vim::PushOperator", + { + "Jump": { + "line": false + } + } + ], ";": "vim::RepeatFind", ",": "vim::RepeatFindReversed", "ctrl-o": "pane::GoBack", "ctrl-i": "pane::GoForward", "ctrl-]": "editor::GoToDefinition", - "escape": ["vim::SwitchMode", "Normal"], - "ctrl-[": ["vim::SwitchMode", "Normal"], + "escape": [ + "vim::SwitchMode", + "Normal" + ], + "ctrl-[": [ + "vim::SwitchMode", + "Normal" + ], "v": "vim::ToggleVisual", "shift-v": "vim::ToggleVisualLine", "ctrl-v": "vim::ToggleVisualBlock", @@ -260,7 +284,10 @@ // z commands "z t": "editor::ScrollCursorTop", "z z": "editor::ScrollCursorCenter", - "z .": ["workspace::SendKeystrokes", "z z ^"], + "z .": [ + "workspace::SendKeystrokes", + "z z ^" + ], "z b": "editor::ScrollCursorBottom", "z c": "editor::Fold", "z o": "editor::UnfoldLines", @@ -278,36 +305,123 @@ } ], // Count support - "1": ["vim::Number", 1], - "2": ["vim::Number", 2], - "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], + "1": [ + "vim::Number", + 1 + ], + "2": [ + "vim::Number", + 2 + ], + "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) - "ctrl-w left": ["workspace::ActivatePaneInDirection", "Left"], - "ctrl-w right": ["workspace::ActivatePaneInDirection", "Right"], - "ctrl-w up": ["workspace::ActivatePaneInDirection", "Up"], - "ctrl-w down": ["workspace::ActivatePaneInDirection", "Down"], - "ctrl-w h": ["workspace::ActivatePaneInDirection", "Left"], - "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 left": [ + "workspace::ActivatePaneInDirection", + "Left" + ], + "ctrl-w right": [ + "workspace::ActivatePaneInDirection", + "Right" + ], + "ctrl-w up": [ + "workspace::ActivatePaneInDirection", + "Up" + ], + "ctrl-w down": [ + "workspace::ActivatePaneInDirection", + "Down" + ], + "ctrl-w h": [ + "workspace::ActivatePaneInDirection", + "Left" + ], + "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 ctrl-g t": "pane::ActivateNextItem", "ctrl-w g shift-t": "pane::ActivatePrevItem", @@ -329,9 +443,14 @@ "ctrl-w ctrl-q": "pane::CloseAllItems", "ctrl-w o": "workspace::CloseInactiveTabsAndPanes", "ctrl-w ctrl-o": "workspace::CloseInactiveTabsAndPanes", - "ctrl-w n": ["workspace::NewFileInDirection", "Up"], - "ctrl-w ctrl-n": ["workspace::NewFileInDirection", "Up"], - + "ctrl-w n": [ + "workspace::NewFileInDirection", + "Up" + ], + "ctrl-w ctrl-n": [ + "workspace::NewFileInDirection", + "Up" + ], "ctrl-w d": "editor::GoToDefinitionSplit", "ctrl-w g d": "editor::GoToDefinitionSplit", "ctrl-w shift-d": "editor::GoToTypeDefinitionSplit", @@ -353,12 +472,21 @@ "context": "Editor && vim_mode == normal && vim_operator == none && !VimWaiting", "bindings": { ".": "vim::Repeat", - "c": ["vim::PushOperator", "Change"], + "c": [ + "vim::PushOperator", + "Change" + ], "shift-c": "vim::ChangeToEndOfLine", - "d": ["vim::PushOperator", "Delete"], + "d": [ + "vim::PushOperator", + "Delete" + ], "shift-d": "vim::DeleteToEndOfLine", "shift-j": "vim::JoinLines", - "y": ["vim::PushOperator", "Yank"], + "y": [ + "vim::PushOperator", + "Yank" + ], "shift-y": "vim::YankLine", "i": "vim::InsertBefore", "shift-i": "vim::InsertFirstNonWhitespace", @@ -380,15 +508,36 @@ ], "u": "editor::Undo", "ctrl-r": "editor::Redo", - "r": ["vim::PushOperator", "Replace"], + "r": [ + "vim::PushOperator", + "Replace" + ], "s": "vim::Substitute", "shift-s": "vim::SubstituteLine", - ">": ["vim::PushOperator", "Indent"], - "<": ["vim::PushOperator", "Outdent"], - "g u": ["vim::PushOperator", "Lowercase"], - "g shift-u": ["vim::PushOperator", "Uppercase"], - "g ~": ["vim::PushOperator", "OppositeCase"], - "\"": ["vim::PushOperator", "Register"], + ">": [ + "vim::PushOperator", + "Indent" + ], + "<": [ + "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-pageup": "pane::ActivatePrevItem", // tree-sitter related commands @@ -403,7 +552,10 @@ { "context": "Editor && vim_mode == visual && vim_operator == none && !VimWaiting", "bindings": { - "\"": ["vim::PushOperator", "Register"], + "\"": [ + "vim::PushOperator", + "Register" + ], // tree-sitter related commands "[ x": "editor::SelectLargerSyntaxNode", "] x": "editor::SelectSmallerSyntaxNode" @@ -412,7 +564,10 @@ { "context": "Editor && VimCount && vim_mode != insert", "bindings": { - "0": ["vim::Number", 0] + "0": [ + "vim::Number", + 0 + ] } }, { @@ -463,7 +618,10 @@ { "context": "Editor && vim_mode == normal && vim_operator == d", "bindings": { - "s": ["vim::PushOperator", "DeleteSurrounds"] + "s": [ + "vim::PushOperator", + "DeleteSurrounds" + ] } }, { @@ -585,10 +743,22 @@ "shift-i": "vim::InsertBefore", "shift-a": "vim::InsertAfter", "shift-j": "vim::JoinLines", - "r": ["vim::PushOperator", "Replace"], - "ctrl-c": ["vim::SwitchMode", "Normal"], - "escape": ["vim::SwitchMode", "Normal"], - "ctrl-[": ["vim::SwitchMode", "Normal"], + "r": [ + "vim::PushOperator", + "Replace" + ], + "ctrl-c": [ + "vim::SwitchMode", + "Normal" + ], + "escape": [ + "vim::SwitchMode", + "Normal" + ], + "ctrl-[": [ + "vim::SwitchMode", + "Normal" + ], ">": "vim::Indent", "<": "vim::Outdent", "i": [ @@ -636,7 +806,10 @@ "ctrl-u": "editor::DeleteToBeginningOfLine", "ctrl-t": "vim::Indent", "ctrl-d": "vim::Outdent", - "ctrl-r": ["vim::PushOperator", "Register"] + "ctrl-r": [ + "vim::PushOperator", + "Register" + ] } }, { @@ -655,8 +828,14 @@ "bindings": { "tab": "vim::Tab", "enter": "vim::Enter", - "escape": ["vim::SwitchMode", "Normal"], - "ctrl-[": ["vim::SwitchMode", "Normal"] + "escape": [ + "vim::SwitchMode", + "Normal" + ], + "ctrl-[": [ + "vim::SwitchMode", + "Normal" + ] } }, { @@ -676,7 +855,8 @@ { "context": "EmptyPane || SharedScreen", "bindings": { - ":": "command_palette::Toggle" + ":": "command_palette::Toggle", + "g /": "pane::DeploySearch" } }, { diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index fa6d64937b..419e3d3fdc 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -102,6 +102,9 @@ impl Render for ProjectDiagnosticsEditor { div() .track_focus(&self.focus_handle) + .when(self.path_states.is_empty(), |el| { + el.key_context("EmptyPane") + }) .size_full() .on_action(cx.listener(Self::toggle_warnings)) .child(child) diff --git a/docs/src/vim.md b/docs/src/vim.md index 6f907e904e..4718129ef7 100644 --- a/docs/src/vim.md +++ b/docs/src/vim.md @@ -114,6 +114,15 @@ For vim-specific shortcuts, you may find the following template a good place to // e.g. // "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" + } } ] ```