如何在 ZSH 的全屏编辑器中编辑命令行?

Mur*_*iar 67 editors zsh

在 bash 中,使用 vi 模式,如果我点击Esc, v,我当前的命令行会在由 指定的编辑器中打开$EDITOR,我可以在“保存”要返回到 shell 并执行的命令之前全屏编辑它。

如何在 zsh 中实现类似的行为?击中v,在命令模式导致钟的没有明显的效果,尽管EDITOR环境变量来设定。

eph*_*ent 50

edit-command-linezshcontrib

bindkey -M vicmd v edit-command-line
Run Code Online (Sandbox Code Playgroud)

  • (只是为了澄清):要启用`edit-command-line`“小部件”,您将需要类似`autoload edit-command-line; zle -N edit-command-line` 在您的 *zsh* init 文件之一(请参阅 [ZLE 函数部分](http://zsh.sourceforge.net/Doc/Release/User-Contributions.html#SEC283) [`zshcontrib` 文档](http://zsh.sourceforge.net/Doc/Release/User-Contributions.html))。 (17认同)
  • 重新映射 v 键意味着您不能再使用可视模式,所以我更喜欢使用 `bindkey -M vicmd' ' edit-command-line` 重新映射到空格键(在正常模式下没有任何用处) (5认同)
  • 一旦就位,如何激活它?emacs 风格的答案中的bindkey 对我来说很有意义。但我找不到有关“bindkey -M vicmd v”设置的参考。 (3认同)
  • @MatSchaffer 与 Bash 相同:如果您处于 vi 模式,则按 `<ESC>` 从插入模式进入命令模式,然后按 `v` 进入可视模式(`Meta-v` 相同),或者只是 ` v` 如果您已经处于命令模式。如果您使用 Emacs 模式,典型的绑定是“Cx Ce”。 (3认同)

Dan*_*dio 50

如果您更喜欢 Emacs 键绑定:

autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line
Run Code Online (Sandbox Code Playgroud)

  • `^x^e` 绑定似乎是 [current .oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh/blob/9650861e56a3404313adc35cbcb1f32a7015b99d/lib/key-bindings. zsh#L65),非常好。 (13认同)

Chr*_*urm 33

您可以使用fc来编辑历史记录中的最后一个命令。这与编辑同一命令不同,但快速按下 Enter 键会使当前命令成为历史记录中的最后一个命令。

  • 当您通过 ssh 连接到其他一台没有“编辑命令行”设置的计算机时,这非常有用,而人们在其个人环境中可能有这样的设置。 (3认同)

Mat*_*hes 23

这是我添加到我的完整配置以~/.zshrc从 bash 获得相同的行为:

export VISUAL=vim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line
Run Code Online (Sandbox Code Playgroud)