Skip to content

Instantly share code, notes, and snippets.

@jiahut
Created March 11, 2024 03:48
Show Gist options
  • Select an option

  • Save jiahut/bb0813d38a7f0415e84852b4623ea660 to your computer and use it in GitHub Desktop.

Select an option

Save jiahut/bb0813d38a7f0415e84852b4623ea660 to your computer and use it in GitHub Desktop.

Revisions

  1. jiahut created this gist Mar 11, 2024.
    156 changes: 156 additions & 0 deletions config.toml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,156 @@
    [editor]
    auto-info = false
    [keys.normal]

    # Quick iteration on config changes
    # C-o = ":config-open"
    # C-r = ":config-reload"

    ";" = "repeat_last_motion"

    # "," = "repeat_last_motion_reverse"
    # Some nice Helix stuff
    # C-h = "select_prev_sibling"
    C-l = "align_view_center"
    # C-k = "expand_selection"
    # C-l = "select_next_sibling"
    C-a = "goto_line_start"
    C-e = "goto_line_end"
    0 = "goto_line_start"
    "$" = "goto_line_end"
    G = "goto_file_end"
    "^" = "goto_first_nonwhitespace"
    "%" = "match_brackets"

    # Personal preference
    o = ["open_below", "normal_mode"]
    O = ["open_above", "normal_mode"]

    # Muscle memory
    "{" = ["goto_prev_paragraph", "collapse_selection"]
    "}" = ["goto_next_paragraph", "collapse_selection"]

    V = ["select_mode", "extend_to_line_bounds"]
    C = ["extend_to_line_end", "yank_main_selection_to_clipboard", "delete_selection", "insert_mode"]
    D = ["extend_to_line_end", "yank_main_selection_to_clipboard", "delete_selection"]

    S = "surround_add" # Would be nice to be able to do something after this but it isn't chainable

    # Clipboards over registers ye ye
    x = "delete_selection"
    p = ["paste_clipboard_after", "collapse_selection"]
    P = ["paste_clipboard_before", "collapse_selection"]
    # Would be nice to add ya and yi, but the surround commands can't be chained
    Y = ["extend_to_line_end", "yank_main_selection_to_clipboard", "collapse_selection"]

    # Uncanny valley stuff, this makes w and b behave as they do Vim
    w = ["move_next_word_start", "move_char_right", "collapse_selection"]
    W = ["move_next_long_word_start", "move_char_right", "collapse_selection"]
    e = ["move_next_word_end", "collapse_selection"]
    E = ["move_next_long_word_end", "collapse_selection"]
    b = ["move_prev_word_start", "collapse_selection"]
    B = ["move_prev_long_word_start", "collapse_selection"]

    # If you want to keep the selection-while-moving behaviour of Helix, this two lines will help a lot,
    # especially if you find having text remain selected while you have switched to insert or append mode
    #
    # There is no real difference if you have overridden the commands bound to 'w', 'e' and 'b' like above
    # But if you really want to get familiar with the Helix way of selecting-while-moving, comment the
    # bindings for 'w', 'e', and 'b' out and leave the bindings for 'i' and 'a' active below. A world of difference!
    i = ["insert_mode", "collapse_selection"]
    a = ["append_mode", "collapse_selection"]

    # Undoing the 'd' + motion commands restores the selection which is annoying
    u = ["undo", "collapse_selection"]

    # Escape the madness! No more fighting with the cursor! Or with multiple cursors!
    esc = ["collapse_selection", "keep_primary_selection"]

    # Search for word under cursor
    "*" = ["move_char_right", "move_prev_word_start", "move_next_word_end", "search_selection", "search_next"]
    "#" = ["move_char_right", "move_prev_word_start", "move_next_word_end", "search_selection", "search_prev"]

    # Make j and k behave as they do Vim when soft-wrap is enabled
    j = "move_line_down"
    k = "move_line_up"
    [keys.normal.c]
    i = {w= ["move_prev_word_start","select_mode", "move_next_word_end", "delete_selection", "insert_mode"]}
    a = {w= ["move_prev_long_word_start","select_mode", "move_next_long_word_end", "delete_selection", "insert_mode"]}

    [keys.normal.C-x]
    C-s = ":write"
    # Extend and select commands that expect a manual input can't be chained
    # I've kept d[X] commands here because it's better to at least have the stuff you want to delete
    # selected so that it's just a keystroke away to delete
    [keys.normal.d]
    d = ["extend_to_line_bounds", "yank_main_selection_to_clipboard", "delete_selection"]
    t = ["extend_till_char"]
    s = ["surround_delete"]
    # i = ["select_textobject_inner"]
    i = {w= ["move_prev_word_start","select_mode", "move_next_word_end", "delete_selection", "normal_mode"]}
    a = {w= ["move_prev_long_word_start","select_mode", "move_next_long_word_end", "delete_selection", "normal_mode"]}
    # a = ["select_textobject_around"]
    j = ["select_mode", "extend_to_line_bounds", "extend_line_below", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"]
    down = ["select_mode", "extend_to_line_bounds", "extend_line_below", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"]
    k = ["select_mode", "extend_to_line_bounds", "extend_line_above", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"]
    up = ["select_mode", "extend_to_line_bounds", "extend_line_above", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"]
    G = ["select_mode", "extend_to_line_bounds", "goto_last_line", "extend_to_line_bounds", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"]
    w = ["move_next_word_start", "yank_main_selection_to_clipboard", "delete_selection"]
    W = ["move_next_long_word_start", "yank_main_selection_to_clipboard", "delete_selection"]
    g = { g = ["select_mode", "extend_to_line_bounds", "goto_file_start", "extend_to_line_bounds", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"] }

    [keys.normal.y]
    y = ["extend_to_line_bounds", "yank_main_selection_to_clipboard", "normal_mode", "collapse_selection"]
    j = ["select_mode", "extend_to_line_bounds", "extend_line_below", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"]
    down = ["select_mode", "extend_to_line_bounds", "extend_line_below", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"]
    k = ["select_mode", "extend_to_line_bounds", "extend_line_above", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"]
    up = ["select_mode", "extend_to_line_bounds", "extend_line_above", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"]
    G = ["select_mode", "extend_to_line_bounds", "goto_last_line", "extend_to_line_bounds", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"]
    w = ["move_next_word_start", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"]
    W = ["move_next_long_word_start", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"]
    g = { g = ["select_mode", "extend_to_line_bounds", "goto_file_start", "extend_to_line_bounds", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"] }

    [keys.insert]
    # Escape the madness! No more fighting with the cursor! Or with multiple cursors!
    esc = ["collapse_selection", "normal_mode"]

    [keys.select]
    V = "shrink_selection"
    v = "expand_selection"
    # Muscle memory
    "{" = ["extend_to_line_bounds", "goto_prev_paragraph"]
    "}" = ["extend_to_line_bounds", "goto_next_paragraph"]
    0 = "goto_line_start"
    "$" = "goto_line_end"
    "^" = "goto_first_nonwhitespace"
    G = "goto_file_end"
    D = ["extend_to_line_bounds", "delete_selection", "normal_mode"]
    C = ["goto_line_start", "extend_to_line_bounds", "change_selection"]
    "%" = "match_brackets"
    S = "surround_add" # Basically 99% of what I use vim-surround for
    u = ["switch_to_lowercase", "collapse_selection", "normal_mode"]
    U = ["switch_to_uppercase", "collapse_selection", "normal_mode"]

    # Visual-mode specific muscle memory
    i = "select_textobject_inner"
    a = "select_textobject_around"

    # Some extra binds to allow us to insert/append in select mode because it's nice with multiple cursors
    tab = ["insert_mode", "collapse_selection"] # tab is read by most terminal editors as "C-i"
    C-a = ["append_mode", "collapse_selection"]

    # Make selecting lines in visual mode behave sensibly
    k = ["extend_line_up", "extend_to_line_bounds"]
    j = ["extend_line_down", "extend_to_line_bounds"]

    # Clipboards over registers ye ye
    d = ["yank_main_selection_to_clipboard", "delete_selection"]
    x = ["yank_main_selection_to_clipboard", "delete_selection"]
    y = ["yank_main_selection_to_clipboard", "normal_mode", "flip_selections", "collapse_selection"]
    Y = ["extend_to_line_bounds", "yank_main_selection_to_clipboard", "goto_line_start", "collapse_selection", "normal_mode"]
    p = "replace_selections_with_clipboard" # No life without this
    P = "paste_clipboard_before"

    # Escape the madness! No more fighting with the cursor! Or with multiple cursors!
    esc = ["collapse_selection", "keep_primary_selection", "normal_mode"]