Switch to better zsh vi mode

This commit is contained in:
2026-03-13 05:44:44 +01:00
parent d471a8436a
commit 19933bf58d
4 changed files with 24 additions and 22 deletions

View File

@@ -1,2 +1,3 @@
ohmyzsh
custom
fzf-git.sh

View File

@@ -21,7 +21,7 @@ plugins=(
zsh-autosuggestions
# Disabled because the highlighting conflicts with autosuggestions
# history-substring-search
vi-mode
zsh-vi-mode
colored-man-pages
command-not-found
zsh-autopair
@@ -37,8 +37,23 @@ HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_TIMEOUT=3
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
VI_MODE_RESET_PROMPT_ON_MODE_CHANGE=true
VI_MODE_SET_CURSOR=true
# Default to insert mode
ZVM_LINE_INIT_MODE=i
# Enable system clipboard
ZVM_SYSTEM_CLIPBOARD_ENABLED=true
# Make p and P use the system clipboard, instead of CUTBUFFER,
# without this you need gp and gP
function zvm_after_lazy_keybindings() {
bindkey -M vicmd 'p' zvm_paste_clipboard_after
bindkey -M vicmd 'P' zvm_paste_clipboard_before
bindkey -M visual 'p' zvm_visual_paste_clipboard
bindkey -M visual 'P' zvm_visual_paste_clipboard
}
# Fix autopair and zsh-vi-mode compatibility
AUTOPAIR_INHIBIT_INIT=1
zvm_after_init_commands+=('autopair-init')
# Might cause issues?
KEYTIMEOUT=1
@@ -113,6 +128,7 @@ if (( $+commands[fd] )); then
fi
if (( $+commands[fzf] )); then
source <(fzf --zsh)
zvm_after_init_commands+=('source <(fzf --zsh)')
if (( $+commands[paru] )); then
function pi {
@@ -121,25 +137,6 @@ if (( $+commands[fzf] )); then
fi
fi
export _ZO_FZF_OPTS="--tmux"
if (( $+commands[zoxide] )); then
eval "$(zoxide init zsh --cmd cd)"
fi
# Generate missing text objects
autoload -Uz select-bracketed select-quoted
zle -N select-quoted
zle -N select-bracketed
for km in viopp visual; do
bindkey -M $km -- '-' vi-up-line-or-history
for c in {a,i}${(s..)^:-\'\"\`\|,./:;=+@}; do
bindkey -M $km $c select-quoted
done
for c in {a,i}${(s..)^:-'()[]{}<>bB'}; do
bindkey -M $km $c select-bracketed
done
done
ZSH_TMUX_AUTOSTART=true
if (( $+commands[tmux] )); then
if [[ -z "$TMUX" && "$ZSH_TMUX_AUTOSTART" == "true" && -z "$INSIDE_EMACS" && -z "$EMACS" && -z "$VIM" && -z "$INTELLIJ_ENVIRONMENT_READER" && -z "$ZED_TERM" ]]; then