San*_*yen 3 terminal vim zsh key-binding tmux
我使用 alacritty,目前,我有这些键绑定
key_bindings:
# (macOS only)
- { key: N, mods: Command, action: SpawnNewInstance }
- { key: F, mods: Command, command:
{ program: "osascript",
args: ["/Users/sand/.dotfiles/alacritty-fullscreen.applescript"] } }
# ...
- { key: Delete, chars: "\x1b[3~" }
Run Code Online (Sandbox Code Playgroud)
我也使用 tmux
# Needed for CTRL-Left/Right to work.
setw -g xterm-keys on
# Use vi key bindings in copy mode.
setw -g mode-keys vi
# Search mode vi
set-window-option -g mode-keys vi
Run Code Online (Sandbox Code Playgroud)
我想要为 zsh 绑定 vi,但我最怀念的是 option+delete 会在 INSERT 模式下向后删除 1 个单词,就像我在 zsh emacs 模式下一样。我知道我可以用来<C-W>删除单词,但我真的习惯了 Option-Delete。它也与我在浏览器文本框中使用的内容一致,谷歌文档...删除 1 个单词,所以我想保留它。我怎样才能做到这一点?
我还注意到,如果我在 zsh vi 模式下输入一些文本,点击ESC进入正常模式,然后使用 返回插入模式i,我将无法再使用删除键删除以前输入的文本。我只能输入新字符,或返回正常模式cc,然后dd删除文本。任何想法?
小智 6
要绑定 Alt-Backspace(Alt 在 Mac 上是选项,不是吗?)来向后删除单词,请尝试:
bindkey '^[^?' backward-kill-word
Run Code Online (Sandbox Code Playgroud)
backward-kill-word(在 emacs 模式下绑定到 Alt-Backspace)向后删除直到最后一个单词,并且vi-backward-kill-word(在 vi 模式下绑定到<C-w>)向后删除直到最后一个单词,但不超过上次进入插入模式的点。(来源:man zshzle。)这是唯一的区别,但是它们有不同的 值$WORDCHARS,这是一个环境变量,您可以在 .zshrc 中设置以指定哪些字符被视为单词的一部分。因此,如果您将自己设置为 vi 模式,然后重新绑定<C-w>并退格以使用常规版本backward-kill-word,而backward-delete-char不是 vi 版本,就像 .zshrc 中的那样:
bindkey '^W' backward-kill-word
bindkey '^?' backward-delete-char
Run Code Online (Sandbox Code Playgroud)
...然后现在您可以使用这些键绑定删除内容,甚至超出上次进入插入模式的位置。问题是现在更多的字符被视为单词的一部分,例如/,因此<C-w>删除整个文件路径,这非常烦人。(这就是我发现这个问题的方式。)那是因为/是 的一部分$WORDCHARS,所以要修复它,只需删除$WORDCHARS.zshrc 中不需要的任何字符,如下所示:
WORDCHARS=${WORDCHARS/\/}
Run Code Online (Sandbox Code Playgroud)
(这会删除/,\/因为它被转义了。)我个人也删除了该-字符。也许还有更多需要删除。最后,为了以防万一,这就是$WORDCHARS我的系统上的默认值,无需删除任何内容:
*?_-/.[]~=&;!#$%^(){}<>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5392 次 |
| 最近记录: |