| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- # ===== History Navigation =====
- # Setup fuzzy history search with up/down keys
- # Up arrow/k - search history forward
- autoload -U up-line-or-beginning-search
- zle -N up-line-or-beginning-search
- # Down arrow/j - search history backward
- autoload -U down-line-or-beginning-search
- zle -N down-line-or-beginning-search
- # Bind keys in both vicmd and viins modes
- # vicmd = vi command mode, viins = vi insert mode
- bindkey -M vicmd "k" up-line-or-beginning-search
- bindkey -M vicmd "^k" up-line-or-beginning-search
- bindkey -M viins "^k" up-line-or-beginning-search
- bindkey -M viins "^[[A" up-line-or-beginning-search # Up arrow key
- bindkey -M vicmd "j" down-line-or-beginning-search
- bindkey -M vicmd "^j" down-line-or-beginning-search
- bindkey -M viins "^j" down-line-or-beginning-search
- bindkey -M viins "^[[B" down-line-or-beginning-search # Down arrow key
- # ===== System Clipboard Integration =====
- # Enhanced yank that copies to system clipboard
- function vi-yank-clipboard() {
- # First perform the normal vi-yank operation
- zle vi-yank
- # Only copy if there's content in the cut buffer
- if [[ -n "$CUTBUFFER" ]]; then
- # Detect the environment and use appropriate clipboard command
- if [[ "$XDG_SESSION_TYPE" == "wayland" ]] && command -v wl-copy >/dev/null; then
- echo -n "$CUTBUFFER" | wl-copy
- elif command -v xclip >/dev/null; then
- echo -n "$CUTBUFFER" | xclip -selection clipboard
- elif command -v pbcopy >/dev/null; then
- # For macOS
- echo -n "$CUTBUFFER" | pbcopy
- fi
- fi
- }
- # Register the function and bind it
- zle -N vi-yank-clipboard
- bindkey -M vicmd "y" vi-yank-clipboard
- # ===== Command Line Editing =====
- # Edit command in external editor
- # Load the function and register it
- autoload -U edit-command-line
- zle -N edit-command-line
- # Bind 'v' in command mode to open editor
- bindkey -M vicmd "v" edit-command-line
- # ===== Additional Useful Bindings =====
- # Ctrl+Space to accept autosuggestion
- bindkey '^ ' autosuggest-accept
- # Ctrl+e to edit command in editor from any mode
- bindkey '^e' edit-command-line
- # Ensure backspace and delete work as expected
- bindkey '^?' backward-delete-char
- bindkey "^[[3~" delete-char
- # Home/End keys
- bindkey "^[[H" beginning-of-line
- bindkey "^[[F" end-of-line
- bindkey "^[[1~" beginning-of-line
- bindkey "^[[4~" end-of-line
- # Function to open NixOS config directory
- function edit-nixos-config() {
- # Store current directory
- local original_dir="$PWD"
- # Build the command that will cd, run nvim, then cd back
- BUFFER="cd ~/.config/nixos && nvim . && cd '$original_dir'"
- zle accept-line
- }
- zle -N edit-nixos-config
- # Bind Ctrl+X then C in both insert and command modes
- bindkey -M viins '^xc' edit-nixos-config
- bindkey -M vicmd '^xc' edit-nixos-config
|