commit 6283e1510ea5fa8eb2fe0d510afee24fe9a31cac
parent b473792a33fe86991d6ada1f0686d25ef5aaf388
Author: Robert Russell <robert@rr3.xyz>
Date: Thu, 24 Apr 2025 00:25:02 -0700
Add zed config
Diffstat:
4 files changed, 850 insertions(+), 0 deletions(-)
diff --git a/.bashrc b/.bashrc
@@ -21,3 +21,5 @@ PROMPT_COMMAND+='PS1+="\n\[\e[32m\]▶\[\e[m\] ";'
PS2='\[\e[32m\]▷\[\e[m\] '
source ~/app/z/z.sh
+
+[ -f "/home/rob/.ghcup/env" ] && . "/home/rob/.ghcup/env" # ghcup-env
+\ No newline at end of file
diff --git a/.profile b/.profile
@@ -7,3 +7,6 @@ export PATSHOME="/opt/ats2/lib/ats2-postiats-0.4.2"
# opam configuration
test -r /home/rob/.opam/opam-init/init.sh && . /home/rob/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true
+
+
+[ -f "/home/rob/.ghcup/env" ] && . "/home/rob/.ghcup/env" # ghcup-env
+\ No newline at end of file
diff --git a/zed/keymap.json b/zed/keymap.json
@@ -0,0 +1,777 @@
+// TODO: git, pane splits?, search (next, etc.), vim, project_panel
+// For the most part, we use ALT as a modifier for application (Zed)-specific
+// commands. In a few cases, we use CTRL instead of ALT for consistency with
+// other applications (e.g., web browsers).
+[
+ // Zed application
+ {
+ // No "context" field means always active.
+ "bindings": {
+ // Buffer font size
+ "ctrl-alt-pageup": ["zed::IncreaseBufferFontSize", { "persist": false }],
+ "ctrl-alt-pagedown": ["zed::DecreaseBufferFontSize", { "persist": false }],
+ "ctrl-alt-home": ["zed::ResetBufferFontSize", { "persist": false }],
+
+ // UI font size
+ "ctrl-alt-shift-pageup": ["zed::IncreaseUiFontSize", { "persist": false }],
+ "ctrl-alt-shift-pagedown": ["zed::DecreaseUiFontSize", { "persist": false }],
+ "ctrl-alt-shift-home": ["zed::ResetUiFontSize", { "persist": false }],
+
+ // Keymap configuration
+ "f9": "zed::OpenKeymap",
+ "shift-f9": "zed::OpenDefaultKeymap",
+ "ctrl-f9": "vim::OpenDefaultKeymap",
+ "ctrl-shift-f9": "debug::OpenKeyContextView",
+
+ // Settings configuration
+ "f10": "zed::OpenSettings",
+ "shift-f10": "zed::OpenDefaultSettings",
+ "ctrl-f10": "zed::OpenProjectSettings",
+
+ // Fullscreen
+ "f11": "zed::ToggleFullScreen"
+ }
+ },
+
+ // Menus
+ {
+ "context": "Picker || menu",
+ "bindings": {
+ // Navigation
+ "up": "menu::SelectPrevious",
+ "down": "menu::SelectNext",
+ "home": "menu::SelectFirst",
+ "end": "menu::SelectLast",
+ "pageup": "menu::SelectFirst",
+ "pagedown": "menu::SelectLast",
+ "tab": "menu::SelectNext",
+ "shift-tab": "menu::SelectPrevious",
+
+ // Confirm/cancel
+ "enter": "menu::Confirm",
+ "escape": "menu::Cancel"
+ }
+ },
+
+ {
+ "context": "Workspace",
+ "bindings": {
+ "alt-space": "command_palette::Toggle",
+ "alt-`": "workspace::ToggleZoom",
+
+ // Open new things
+ "ctrl-t": "workspace::NewFile",
+ "ctrl-n": "workspace::NewWindow",
+ "alt-t": "workspace::NewCenterTerminal",
+ "alt-f": "workspace::NewSearch",
+
+ // Activate panes
+ "ctrl-alt-up": "workspace::ActivatePaneUp",
+ "ctrl-alt-down": "workspace::ActivatePaneDown",
+ "ctrl-alt-left": "workspace::ActivatePaneLeft",
+ "ctrl-alt-right": "workspace::ActivatePaneRight",
+
+ // Move panes
+ "ctrl-alt-shift-up": "workspace::SwapPaneUp",
+ "ctrl-alt-shift-down": "workspace::SwapPaneDown",
+ "ctrl-alt-shift-left": "workspace::SwapPaneLeft",
+ "ctrl-alt-shift-right": "workspace::SwapPaneRight",
+
+ // Open/focus side panes
+ "alt-e": "project_panel::ToggleFocus",
+ "alt-g": "git_panel::ToggleFocus",
+ "alt-o": "outline_panel::ToggleFocus",
+
+ // Close side panes
+ // Ideally, alt-shift-g would only close the git panel and alt-shift-o
+ // would only close the outline panel, but this is the best we can get
+ // right now.
+ "alt-shift-e": "workspace::ToggleLeftDock",
+ "alt-shift-g": "workspace::ToggleRightDock",
+ "alt-shift-o": "workspace::ToggleRightDock"
+ }
+ },
+
+ {
+ "context": "Pane",
+ "bindings": {
+ // Activate tabs
+ "alt-1": ["pane::ActivateItem", 0],
+ "alt-2": ["pane::ActivateItem", 1],
+ "alt-3": ["pane::ActivateItem", 2],
+ "alt-4": ["pane::ActivateItem", 3],
+ "alt-5": ["pane::ActivateItem", 4],
+ "alt-6": ["pane::ActivateItem", 5],
+ "alt-7": ["pane::ActivateItem", 6],
+ "alt-8": ["pane::ActivateItem", 7],
+ "alt-left": "pane::ActivatePreviousItem",
+ "alt-right": "pane::ActivateNextItem",
+
+ // Move tabs
+ "alt-down": "pane::SwapItemLeft",
+ "alt-up": "pane::SwapItemRight",
+
+ // Close and reopen tabs
+ "ctrl-w": "pane::CloseActiveItem",
+ "ctrl-shift-t": "pane::ReopenClosedItem",
+
+ // Search settings
+ "alt-r": "search::ToggleRegex",
+ "alt-c": "search::ToggleCaseSensitive"
+ }
+ },
+
+ // Editor (multi-line or single-line)
+ {
+ "context": "Editor",
+ "bindings": {
+ // Navigation
+ "up": "editor::MoveUp",
+ "down": "editor::MoveDown",
+ "left": "editor::MoveLeft",
+ "right": "editor::MoveRight",
+ "home": ["editor::MoveToBeginningOfLine", { "stop_at_soft_wraps": true, "stop_at_indent": true }],
+ "end": ["editor::MoveToEndOfLine", { "stop_at_soft_wraps": true }],
+ "pageup": "editor::MovePageUp",
+ "pagedown": "editor::MovePageDown",
+ "ctrl-up": "editor::LineUp",
+ "ctrl-down": "editor::LineDown",
+
+ // Selections
+ "shift-up": "editor::SelectUp",
+ "shift-down": "editor::SelectDown",
+ "shift-left": "editor::SelectLeft",
+ "shift-right": "editor::SelectRight",
+ "shift-home": ["editor::SelectToBeginningOfLine", { "stop_at_soft_wraps": true, "stop_at_indent": true }],
+ "shift-end": ["editor::SelectToEndOfLine", { "stop_at_soft_wraps": true }],
+ "shift-pageup": "editor::SelectPageUp",
+ "shift-pagedown": "editor::SelectPageDown",
+ "ctrl-a": "editor::SelectAll",
+
+ "tab": "editor::Tab",
+ "shift-tab": "editor::Backtab",
+ "backspace": "editor::Backspace",
+ "delete": "editor::Delete",
+
+ "escape": "editor::Cancel",
+ "f2": "editor::Rename",
+
+ "ctrl-x": "editor::Cut",
+ "ctrl-c": "editor::Copy",
+ "ctrl-v": "editor::Paste",
+
+ "ctrl-z": "editor::Undo",
+ "ctrl-shift-z": "editor::Redo"
+ }
+ },
+
+ // Editor (multi-line)
+ {
+ "context": "Editor && mode == full",
+ "bindings": {
+ // Newlines
+ "enter": "editor::Newline",
+ "shift-enter": "editor::Newline",
+ "ctrl-enter": "editor::NewlineBelow",
+ "ctrl-shift-enter": "editor::NewlineAbove",
+
+ "ctrl-f": "buffer_search::Deploy"
+ }
+ },
+
+ {
+ "context": "Editor && renaming",
+ "bindings": {
+ "enter": "editor::ConfirmRename"
+ }
+ },
+
+ {
+ "context": "Editor && showing_completions",
+ "bindings": {
+ "enter": "editor::ConfirmCompletion"
+ }
+ },
+
+ {
+ "context": "Editor && (showing_code_actions || showing_completions)",
+ "bindings": {
+ "up": "editor::ContextMenuPrevious",
+ "down": "editor::ContextMenuNext",
+ "pageup": "editor::ContextMenuFirst",
+ "pagedown": "editor::ContextMenuLast"
+ }
+ },
+
+ {
+ // Currently, "VimControl" is an alias for "vim_mode == normal ||
+ // vim_mode == visual || vim_mode == operator", but this could change.
+ "context": "VimControl && !menu",
+ "bindings": {
+ "up": ["vim::Up", { "display_lines": true }],
+ "shift-up": "editor::AddSelectionAbove",
+ "ctrl-up": "vim::LineUp",
+ "ctrl-shift-up": "editor::MoveLineUp",
+
+ "down": ["vim::Down", { "display_lines": true }],
+ "shift-down": "editor::AddSelectionBelow",
+ "ctrl-down": "vim::LineDown",
+ "ctrl-shift-down": "editor::MoveLineDown",
+
+ "left": "vim::Left",
+ "shift-left": null, // TODO
+ "ctrl-left": "vim::PreviousWordStart",
+ "ctrl-shift-left": "editor::SelectToPreviousWordStart",
+
+ "right": "vim::Right",
+ "shift-right": null, // TODO
+ "ctrl-right": "vim::NextWordStart",
+ "ctrl-shift-right": "editor::SelectToNextWordEnd",
+
+ "home": ["vim::FirstNonWhitespace", { "display_lines": true }],
+ "shift-home": null,
+ "ctrl-home": ["vim::StartOfLine", { "display_lines": false }],
+ "ctrl-shift-home": null,
+
+ "end": ["vim::EndOfLine", { "display_lines": true }],
+ "shift-end": null,
+ "ctrl-end": ["vim::EndOfLine", { "display_lines": false }],
+ "ctrl-shift-end": null,
+
+ "pageup": "vim::PageUp",
+ "shift-pageup": "vim::MoveToPrevious",
+ "ctrl-pageup": "vim::ScrollUp",
+ "ctrl-shift-pageup": "vim::StartOfDocument",
+
+ "pagedown": "vim::PageDown",
+ "shift-pagedown": "vim::MoveToNext",
+ "ctrl-pagedown": "vim::ScrollDown",
+ "ctrl-shift-pagedown": "vim::EndOfDocument",
+
+ "enter": "editor::NewlineBelow",
+ "shift-enter": "editor::NewlineAbove",
+ "ctrl-enter": null,
+ "ctrl-shift-enter": null,
+
+ "escape": "vim::SwitchToNormalMode",
+ "shift-escape": null,
+ "ctrl-escape": null,
+ "ctrl-shift-escape": null,
+
+ "insert": null,
+ "shift-insert": null,
+ "ctrl-insert": null,
+ "ctrl-shift-insert": null,
+
+ "delete": "vim::DeleteRight",
+ "shift-delete": null,
+ "ctrl-delete": null,
+ "ctrl-shift-delete": null,
+
+ "space": "vim::WrappingRight",
+ "shift-space": null,
+ "ctrl-space": null,
+ "shift-ctrl-space": null,
+
+ "backspace": "vim::WrappingLeft",
+ "shift-backspace": null,
+ "ctrl-backspace": null,
+ "shift-ctrl-backspace": null,
+
+ "tab": null,
+ "shift-tab": null,
+ "ctrl-tab": null,
+ "ctrl-shift-tab": null,
+
+ "0": ["vim::Number", 0],
+ ")": null,
+ "ctrl-0": null,
+ "ctrl-)": null,
+
+ "1": ["vim::Number", 1],
+ "!": null,
+ "ctrl-1": null,
+ "ctrl-!": null,
+
+ "2": ["vim::Number", 2],
+ "@": "vim::PushReplayRegister",
+ "ctrl-2": null,
+ "ctrl-@": null,
+
+ "3": ["vim::Number", 3],
+ "#": null,
+ "ctrl-3": null,
+ "ctrl-#": null,
+
+ "4": ["vim::Number", 4],
+ "$": null,
+ "ctrl-4": null,
+ "ctrl-$": null,
+
+ "5": ["vim::Number", 5],
+ "%": null,
+ "ctrl-5": null,
+ "ctrl-%": null,
+
+ "6": ["vim::Number", 6],
+ "^": null,
+ "ctrl-6": null,
+ "ctrl-^": null,
+
+ "7": ["vim::Number", 7],
+ "&": null,
+ "ctrl-7": null,
+ "ctrl-&": null,
+
+ "8": ["vim::Number", 8],
+ "*": null,
+ "ctrl-8": null,
+ "ctrl-*": null,
+
+ "9": ["vim::Number", 9],
+ "(": null,
+ "ctrl-9": null,
+ "ctrl-(": null,
+
+ "a": ["vim::PushObject", { "around": true }],
+ "A": null,
+ "ctrl-a": null,
+ "ctrl-A": null,
+
+ "b": null,
+ "B": null,
+ "ctrl-b": null,
+ "ctrl-B": null,
+
+ "c": null,
+ "C": null,
+ "ctrl-c": null,
+ "ctrl-C": null,
+
+ "d": null,
+ "D": null,
+ "ctrl-d": null,
+ "ctrl-D": null,
+
+ "e": "vim::NextWordEnd",
+ "E": "vim::PreviousWordEnd",
+ "ctrl-e": "vim::NextSubwordEnd",
+ "ctrl-E": "vim::PreviousSubwordEnd",
+
+ "f": ["vim::PushFindForward", { "before": false }],
+ "F": ["vim::PushFindBackward", { "after": false }],
+ "ctrl-f": "vim::RepeatFind",
+ "ctrl-F": "vim::RepeatFindReversed",
+
+ "g": ["vim::PushFindForward", { "before": true }],
+ "G": ["vim::PushFindBackward", { "after": true }],
+ "ctrl-g": "vim::RepeatFind",
+ "ctrl-G": "vim::RepeatFindReversed",
+
+ "h": null,
+ "H": null,
+ "ctrl-h": null,
+ "ctrl-H": null,
+
+ "i": ["vim::PushObject", { "around": false }],
+ "I": null,
+ "ctrl-i": null,
+ "ctrl-I": null,
+
+ "j": "vim::JoinLines",
+ "J": "vim::JoinLinesNoWhitespace",
+ "ctrl-j": null,
+ "ctrl-J": null,
+
+ "k": null,
+ "K": null,
+ "ctrl-k": null,
+ "ctrl-K": null,
+
+ "l": null,
+ "L": null,
+ "ctrl-l": null,
+ "ctrl-L": null,
+
+ "m": null,
+ "M": null,
+ "ctrl-m": null,
+ "ctrl-M": null,
+
+ "n": "vim::MoveToNextMatch",
+ "N": "vim::MoveToPreviousMatch",
+ "ctrl-n": null,
+ "ctrl-N": null,
+
+ "o": null,
+ "O": null,
+ "ctrl-o": null,
+ "ctrl-O": null,
+
+ "p": null,
+ "P": null,
+ "ctrl-p": null,
+ "ctrl-P": null,
+
+ "q": "vim::ToggleRecord",
+ "Q": "vim::ReplayLastRecording",
+ "ctrl-q": null,
+ "ctrl-Q": null,
+
+ "r": null,
+ "R": null,
+ "ctrl-r": null,
+ "ctrl-R": null,
+
+ "s": null,
+ "S": null,
+ "ctrl-s": null,
+ "ctrl-S": null,
+
+ "t": null,
+ "T": null,
+ "ctrl-t": null,
+ "ctrl-T": null,
+
+ "u": null,
+ "U": null,
+ "ctrl-u": null,
+ "ctrl-U": null,
+
+ "v": "vim::ToggleVisual",
+ "V": "vim::ToggleVisualLine",
+ "ctrl-v": "vim::RestoreVisualSelection",
+ "ctrl-V": null,
+
+ "w": "vim::NextWordStart",
+ "W": "vim::PreviousWordStart",
+ "ctrl-w": "vim::NextSubwordStart",
+ "ctrl-W": "vim::PreviousSubwordStart",
+
+ "x": null,
+ "X": null,
+ "ctrl-x": null,
+ "ctrl-X": null,
+
+ "y": null,
+ "Y": null,
+ "ctrl-y": null,
+ "ctrl-Y": null,
+
+ "z": null,
+ "Z": null,
+ "ctrl-z": null,
+ "ctrl-Z": null,
+
+ "-": null,
+ "_": null,
+ "ctrl--": null,
+ "ctrl-_": null,
+
+ "=": null,
+ "+": null,
+ "ctrl-=": null,
+ "ctrl-+": null,
+
+ "[": "editor::SelectLargerSyntaxNode",
+ "{": null,
+ "ctrl-[": null,
+ "ctrl-{": null,
+
+ "]": "editor::SelectSmallerSyntaxNode",
+ "}": null,
+ "ctrl-]": null,
+ "ctrl-}": null,
+
+ "\\": "vim::ToggleComments",
+ "|": "vim::GoToColumn",
+ "ctrl-\\": null,
+ "ctrl-|": null,
+
+ ";": null,
+ ":": null,
+ "ctrl-;": null,
+ "ctrl-:": null,
+
+ "'": null,
+ "\"": null,
+ "ctrl-'": null,
+ "ctrl-\"": null,
+
+ ",": null,
+ "<": null,
+ "ctrl-,": null,
+ "ctrl-<": "vim::Outdent", // For workspace::SendKeystrokes
+
+ ".": null,
+ ">": null,
+ "ctrl-.": null,
+ "ctrl->": "vim::Indent", // For workspace::SendKeystrokes
+
+ "/": "vim::Search",
+ "?": "outline::Toggle",
+ "ctrl-/": null,
+ "ctrl-?": "project_symbols::Toggle",
+
+ "`": null,
+ "~": null,
+ "ctrl-`": null,
+ "ctrl-~": null
+
+ //"ctrl-pageup": ["editor::SelectPrevious", { "replace_newest": false }],
+ //"ctrl-pagedown": ["editor::SelectNext", { "replace_newest": false }],
+ //"ctrl-shift-pageup": ["editor::SelectPrevious", { "replace_newest": true }],
+ //"ctrl-shift-pagedown": ["editor::SelectNext", { "replace_newest": true }],
+
+ // "": "vim::PushLowercase",
+ // "": "vim::PushUppercase",
+ // "": "vim::PushOppositeCase",
+ // "": "vim::ConvertToLowerCase",
+ // "": "vim::ConvertToUpperCase",
+ // "": "vim::ChangeCase",
+ // "": "vim::Enter",
+ // "": "vim::Quotes",
+ // "": "vim::Literal",
+ // "": "vim::Argument",
+ // "": "vim::Exchange",
+ // "": "vim::Increment",
+ // "": "vim::Decrement",
+ // "": "vim::Substitute",
+ // "": "editor::SelectAllMatches",
+ // TODO: replace mode
+ }
+ },
+
+ {
+ "context": "vim_mode == normal",
+ "bindings": {
+ // TODO: organize
+ ":": "command_palette::Toggle",
+ ".": "vim::Repeat",
+ "escape": "editor::Cancel",
+ "+": "vim::Increment",
+ "-": "vim::Decrement",
+
+ "tab": "vim::Indent",
+ "shift-tab": "vim::Outdent",
+ "ctrl-tab": null,
+ "ctrl-shift-tab": null,
+
+ "a": "vim::InsertAfter",
+ "A": "vim::InsertEndOfLine",
+ "ctrl-a": null,
+ "ctrl-A": null,
+
+ "c": "vim::PushChange",
+ "C": "vim::ChangeToEndOfLine",
+ "ctrl-c": null,
+ "ctrl-C": null,
+
+ "d": "vim::PushDelete",
+ "D": "vim::DeleteToEndOfLine",
+ "ctrl-d": null,
+ "ctrl-D": null,
+
+ "i": "vim::InsertBefore",
+ "I": "vim::InsertFirstNonWhitespace",
+ "ctrl-i": null,
+ "ctrl-I": null,
+
+ "o": "vim::InsertLineBelow",
+ "O": "vim::InsertLineAbove",
+ "ctrl-o": null,
+ "ctrl-O": null,
+
+ "p": ["vim::Paste", { "preserve_clipboard": true, "before": false }],
+ "P": ["vim::Paste", { "preserve_clipboard": true, "before": true }],
+ "ctrl-p": null,
+ "ctrl-P": null,
+
+ "r": null,
+ "R": null,
+ "ctrl-r": "vim::Redo",
+ "ctrl-R": null,
+
+ "s": "vim::Substitute",
+ "S": "vim::SubstituteLine",
+ "ctrl-s": null,
+ "ctrl-S": null,
+
+ "u": "vim::Undo",
+ "U": "vim::Redo",
+ "ctrl-u": null,
+ "ctrl-U": null,
+
+ "x": "vim::DeleteRight",
+ "X": "editor::DeleteLine",
+ "ctrl-x": null,
+ "ctrl-X": null,
+
+ "y": "vim::PushYank",
+ "Y": "vim::YankLine",
+ "ctrl-y": null,
+ "ctrl-Y": null
+ }
+ },
+
+ {
+ "context": "vim_mode == visual",
+ "bindings": {
+ // TODO: organize
+ ":": "vim::VisualCommand",
+ "escape": "vim::SwitchToNormalMode",
+ "+": "vim::Increment",
+ "-": "vim::Decrement",
+
+ "delete": "vim::VisualDelete",
+ "shift-delete": null,
+ "ctrl-delete": null,
+ "ctrl-shift-delete": null,
+
+ "tab": ["workspace::SendKeystrokes", "ctrl-> ctrl-v"],
+ "shift-tab": ["workspace::SendKeystrokes", "ctrl-< ctrl-v"],
+ "ctrl-tab": null,
+ "ctrl-shift-tab": null,
+
+ "c": "vim::Substitute",
+ "C": "vim::SubstituteLine",
+ "ctrl-c": null,
+ "ctrl-C": null,
+
+ "d": "vim::VisualDelete",
+ "D": "vim::VisualDeleteLine",
+ "ctrl-d": null,
+ "ctrl-D": null,
+
+ "p": ["vim::Paste", { "preserve_clipboard": true }],
+ "P": ["vim::Paste", { "preserve_clipboard": true }],
+ "ctrl-p": null,
+ "ctrl-P": null,
+
+ "s": "vim::Substitute",
+ "S": "vim::SubstituteLine",
+ "ctrl-s": null,
+ "ctrl-S": null,
+
+ "x": "vim::VisualDelete",
+ "X": "vim::VisualDeleteLine",
+ "ctrl-x": null,
+ "ctrl-X": null,
+
+ "y": "vim::VisualYank",
+ "Y": "vim::VisualYankLine",
+ "ctrl-y": null,
+ "ctrl-Y": null
+ }
+ },
+
+ {
+ "context": "vim_mode == insert",
+ "bindings": {
+ "escape": "vim::NormalBefore",
+ "ctrl-c": "editor::Paste",
+ "ctrl-space": "editor::ShowCompletions"
+ }
+ },
+
+ // Make escape leave insert mode even if completions are showing.
+ {
+ "context": "Editor && vim_mode == insert && showing_completions",
+ "bindings": {
+ "escape": "vim::NormalBefore"
+ }
+ },
+
+ {
+ "context": "vim_mode == operator",
+ "bindings": {
+ "escape": "vim::ClearOperators"
+ }
+ },
+
+ {
+ "context": "vim_operator == a || vim_operator == i",
+ "bindings": {
+ "w": "vim::Word",
+ "'": "vim::Quotes",
+ "\"": "vim::DoubleQuotes",
+ "`": "vim::BackQuotes",
+
+ "(": "vim::Parentheses",
+ ")": "vim::Parentheses",
+
+ "[": "vim::SquareBrackets",
+ "]": "vim::SquareBrackets",
+
+ "{": "vim::CurlyBrackets",
+ "}": "vim::CurlyBrackets",
+
+ "<": "vim::AngleBrackets",
+ ">": "vim::AngleBrackets"
+ }
+ },
+
+ {
+ "context": "vim_operator == c",
+ "bindings": {
+ "c": "vim::CurrentLine"
+ }
+ },
+
+ {
+ "context": "vim_operator == d",
+ "bindings": {
+ "d": "vim::CurrentLine"
+ }
+ },
+
+ {
+ "context": "vim_operator == y",
+ "bindings": {
+ "y": "vim::CurrentLine"
+ }
+ },
+
+ {
+ "context": "BufferSearchBar",
+ "bindings": {
+ "enter": "vim::SearchSubmit",
+ "escape": "buffer_search::Dismiss"
+ }
+ },
+
+ //"": "vim::Word",
+ //"": "vim::Subword",
+ //"": "vim::OtherEnd",
+ //"": "vim::StartOfLine",
+ //"": "vim::EndOfLine",
+ //"": "vim::CurrentLine",
+ //"": "vim::Quotes",
+ //"": "vim::DoubleQuotes",
+ //"": "vim::BackQuotes",
+ //"": "vim::AnyQuotes",
+ //"": "vim::Parentheses",
+ //"": "vim::SquareBrackets",
+ //"": "vim::CurlyBrackets",
+ //"": "vim::AngleBrackets",
+ // TODO: Establish "logical" editing language. E.g., instead of `D` to delete
+ // to end of line (which is a sort of special case of `d`), use `d l` instead,
+ // where `l` is the EndOfLine object (as below).
+
+ {
+ "context": "Terminal",
+ "bindings": {
+ "ctrl-shift-c": "terminal::Copy",
+ "ctrl-shift-v": "terminal::Paste",
+
+ "ctrl-shift-up": "terminal::ScrollLineUp",
+ "ctrl-shift-down": "terminal::ScrollLineDown",
+
+ "ctrl-shift-pageup": "terminal::ScrollPageUp",
+ "ctrl-shift-pagedown": "terminal::ScrollPageDown",
+
+ "ctrl-shift-home": "terminal::ScrollToTop",
+ "ctrl-shift-end": "terminal::ScrollToBottom"
+ }
+ }
+]
diff --git a/zed/settings.json b/zed/settings.json
@@ -0,0 +1,66 @@
+{
+ // Keybindings
+ "base_keymap": "None",
+ "vim_mode": true,
+
+ // Editor
+ "use_autoclose": false,
+ "cursor_blink": false,
+ "vertical_scroll_margin": 3,
+ "search": { "regex": true },
+ "gutter": { "folds": false },
+ "wrap_guides": [80, 120, 160],
+ "relative_line_numbers": true,
+ "preferred_line_length": 160, // This only affects soft wrap.
+
+ // UI
+ "tabs": { "show_close_button": "hidden" }, // I don't want to accidentally close tabs.
+ "git_panel": { "dock": "right" },
+ "outline_panel": { "dock": "right" },
+
+ // Style
+ "ui_font_size": 16,
+ "buffer_font_size": 16,
+ "buffer_font_family": "JuliaMono",
+ "theme": {
+ "mode": "system",
+ "light": "KTRZ Monokai",
+ "dark": "KTRZ Monokai"
+ },
+ "experimental.theme_overrides": {
+ "syntax": {
+ "comment": { "color": "#808080", "font_style": "italic" },
+ "constructor": { "color": "#e0690d" },
+ "function": { "color": "#d7d7d7" },
+ "punctuation.bracket": { "color": "#a7a7a7" },
+ "punctuation.delimiter": { "color": "#a7a7a7" },
+ "variable": { "color": "#d7d7d7" }
+ }
+ },
+
+ // LSP
+ "lsp": {
+ "hls": {
+ "initialization_options": {
+ "haskell": { "formattingProvider": "fourmolu" }
+ }
+ }
+ },
+
+ // Disable some crap
+ "assistant": {
+ "version": "1", // I don't know what this is. The settings linter says it's necessary.
+ "button": false
+ },
+ "features": { "edit_prediction_provider": "none" },
+ "collaboration_panel": { "button": false },
+ "tab_bar": {
+ "show_nav_history_buttons": false,
+ "show_tab_bar_buttons": false
+ },
+ "terminal": { "button": false },
+ "telemetry": {
+ "diagnostics": false,
+ "metrics": false
+ }
+}