制作自定义快捷键来编辑当前行

Make custom shortcut keys to edit current line

bindkey 内置的 zsh 似乎是一个好的开始。但我不知道如何编写绑定到键的函数,比如 Ctr+/,以查找模式并将当前行删除到末尾。模式可以是默认模式,也可以是用户调用函数时提供的字符串。

示例用例:

当我键入此命令并附加注释时:

echo Hello World # Try echo

在那之后,我回滚历史记录并想重新使用命令,我想快速删除从 # 到末尾并从那里开始输入新命令。

另一个用途:

当我向上滚动行时,我想调用该函数,我们将其命名为deleteFrom,它会提示输入,默认为#。我可以输入 World。然后删除从 "World" 到末尾的行,将光标放在那里,这样我就可以开始输入了。

为此,您需要 extend Zle(Z-shell 行编辑器)通过添加您自己的小部件来浏览历史记录,然后编辑拾取的行(如果我理解正确的话)。

这是绑定到 'C' 的超级简单小部件,它将删除当前命令行中# 之后的任何字符(这也适用于从历史记录中获取的行):

my-zle-widget () {
  BUFFER="${BUFFER%%#*}"
  zle .end-of-line
}

zle -N my-zle-widget

bindkey C my-zle-widget

您不需要从头开始实施所有内容,并且可以调用现有的 zle 小部件来完成已经实施的部分工作(请参阅我的示例中的 zle .end-of-line)。您可以使用 zsh repo 中的代码作为参考(请注意,这些是自动加载的,不需要包装在函数中——它们只是函数体)。