young_souvlaki Asked: 2022-01-05 09:30:28 +0800 CST2022-01-05 09:30:28 +0800 CST 2022-01-05 09:30:28 +0800 CST 如何在带有 Vim 绑定的 zsh 中使用 `Alt + .` 772 我正在使用 zsh 和bindkeys -v. Alt + .没有按预期工作。它似乎在下一行重复当前在标准输入中键入但未输入的内容。 这篇文章似乎暗示它确实像在 bash 中一样工作,即获取最后输入的命令的最后一个参数。 需要什么才能使这项工作按预期进行? zsh vi-mode 2 个回答 Voted Best Answer Gilles 'SO- stop being evil' 2022-01-05T11:04:36+08:002022-01-05T11:04:36+08:00 在终端上,Alt+char通常与 相同Esc char。(可以对某些终端进行不同的配置。) 在 vi 插入模式下,Esc切换到命令模式。在 vi 命令模式下,Esc什么都不做。在 vi 命令模式下,.重复上一个命令。 小部件在 emacs 模式下默认insert-last-word绑定到Alt+.和Alt+ _,但在 vi 模式下它没有默认绑定。如果你想在 vi 模式下使用它,你需要给它一个绑定,例如 bindkey -M vicmd _ insert-last-word 请注意,这是一个插入命令:它在光标之前插入文本,这不能在行尾完成。对于经常在行尾使用的命令,这相当不方便。您可能更喜欢定义append-last-word。 function append-last-word { ((++CURSOR)); zle insert-last-word; } zle -N append-last-word bindkey -M vicmd _ append-last-word Steven Lu 2022-03-27T22:54:57+08:002022-03-27T22:54:57+08:00 请看这个答案。https://stackoverflow.com/a/34293570/340947与其他答案相反,它的vicmd映射在我的(非全面)测试中存在严重问题!这种viins映射似乎是诀窍。 引用如下(对于~/.zshrc): bindkey -M viins '\e.' insert-last-word 同样对于 bash,在~/.inputrc: set keymap vi-insert "\e.":yank-last-arg 好的,这涵盖了最常见的用例,即 Alt+。在这些 shell 中处于插入模式,但有时我们在正常模式下导航并希望从那里插入最后一个 arg。那是@gilles的另一个答案出现的时候。请注意,只有基本的答案才能将光标保持在正确的位置。是的,它插入光标之前,似乎没有办法解决这个问题。
在终端上,Alt+char通常与 相同Esc char。(可以对某些终端进行不同的配置。)
在 vi 插入模式下,Esc切换到命令模式。在 vi 命令模式下,Esc什么都不做。在 vi 命令模式下,.重复上一个命令。
小部件在 emacs 模式下默认
insert-last-word
绑定到Alt+.和Alt+ _,但在 vi 模式下它没有默认绑定。如果你想在 vi 模式下使用它,你需要给它一个绑定,例如请注意,这是一个插入命令:它在光标之前插入文本,这不能在行尾完成。对于经常在行尾使用的命令,这相当不方便。您可能更喜欢定义
append-last-word
。请看这个答案。https://stackoverflow.com/a/34293570/340947与其他答案相反,它的
vicmd
映射在我的(非全面)测试中存在严重问题!这种viins
映射似乎是诀窍。引用如下(对于
~/.zshrc
):同样对于 bash,在
~/.inputrc
:好的,这涵盖了最常见的用例,即 Alt+。在这些 shell 中处于插入模式,但有时我们在正常模式下导航并希望从那里插入最后一个 arg。那是@gilles的另一个答案出现的时候。请注意,只有基本的答案才能将光标保持在正确的位置。是的,它插入光标之前,似乎没有办法解决这个问题。