Last active
August 26, 2025 06:20
-
-
Save mkdir700/3c4482f03009e6c30b5ba29ffa82d2a5 to your computer and use it in GitHub Desktop.
在 zsh 里同时用上 Vim 和 Emacs 快捷键
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 加载 edit-command-line 小部件 | |
| autoload -Uz edit-command-line | |
| zle -N edit-command-line | |
| bindkey -v | |
| # 插入模式:竖条;普通模式:方块 | |
| function _vi_update_cursor() { | |
| case $KEYMAP in | |
| vicmd) # normal 模式 | |
| echo -ne '\e[2 q' # 稳定方块 | |
| ;; | |
| main|viins) # insert 模式 | |
| echo -ne '\e[5 q' # 闪烁竖条 | |
| ;; | |
| esac | |
| } | |
| zle -N zle-keymap-select _vi_update_cursor | |
| zle -N zle-line-init _vi_update_cursor | |
| precmd() { _vi_update_cursor } | |
| # 确保在 vi insert 模式下,Backspace 能删除前一个字符 | |
| bindkey -M viins '^?' backward-delete-char | |
| bindkey -M viins '^H' backward-delete-char | |
| # 滚动(适配 Vim 感) | |
| bindkey -M viins '^N' down-line-or-history # Ctrl-N 下一条历史 | |
| bindkey -M viins '^P' up-line-or-history # Ctrl-P 上一条历史 | |
| # 光标移动 | |
| bindkey -M viins '^B' backward-char # Ctrl-B ← 光标左移 | |
| bindkey -M viins '^F' forward-char # Ctrl-F → 光标右移 | |
| # 行编辑 | |
| bindkey -M viins '^U' kill-whole-line # Ctrl-U 删除整行 | |
| bindkey -M viins '^K' kill-line # Ctrl-K 删除到行尾 | |
| bindkey -M viins '^A' beginning-of-line # Ctrl-A 光标到行首 | |
| bindkey -M viins '^E' end-of-line # Ctrl-E 光标到行尾 | |
| bindkey -M viins '^W' backward-kill-word # Ctrl-W 删除前一个单词 | |
| # 删除(向前/向后) | |
| bindkey -M viins '^D' delete-char # Ctrl-D 删除光标处字符 / 空行时退出 | |
| bindkey -M viins '^H' backward-delete-char # Ctrl-H 退格(部分终端) | |
| # 撤销 / 重做 | |
| bindkey -M viins '^_' undo # Ctrl-_ 撤销(部分终端要用 Ctrl-Shift-- 才能发出 ^_) | |
| # 绑定 Ctrl+X Ctrl+E 在 vi 模式下也可用 | |
| bindkey -M viins '^X^E' edit-command-line | |
| bindkey -M vicmd '^X^E' edit-command-line | |
| alias ls='exa --icons --group-directories-first --sort=modified' | |
| alias ll='exa --icons --group-directories-first --sort=modified --long' | |
| alias l='exa --icons --group-directories-first --sort=modified --long --level=1' | |
| alias cls='clear' | |
| export EDITOR="nvim" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment