将命令放入历史记录而不执行它

将命令放入历史记录而不执行它

,如果我在行上有一个命令,然后我按下Alt- #(光标在该行的任意位置),它会#在该行的前面添加一个,将其注释掉,然后“执行”它(由于现在已被注释掉,因此不会执行任何操作),并将其放入历史记录中。当我输入部分或全部命令并意识到我需要先运行另一个命令,然后再返回该命令时,它非常有用。

我怎样才能在? 注释掉并不重要:我所关心的只是该命令现在不会发生,但以后可以从历史记录中检索。

答案1

三个选项:

  • zsh默认有键盘快捷键Alt+ ,用于推送当前行。Q

    使用方式如下:

    1. 类型命令

    2. Alt+ Q

    3. 执行其他命令

    4. 命令将会再次出现。

    从技术上讲,这不会将其放入历史记录中。此外,如果您需要在之前执行另一个命令命令,您必须再次按Alt+ Q

  • 另外默认情况下,键盘快捷键Ctrl+UCtrl+Y剪切和粘贴(粘贴)当前行。

    像这样使用它们:

    1. 类型命令

    2. Ctrl+ U

    3. 执行其他命令

    4. Ctrl+ Y

    5. 命令将会再次出现。

    这也可以在 bash 中工作,它使用自己的剪贴板,即剪贴板的内容由Ctrl+ ( Shift+ ) C/V选择/鼠标中键将保持不变。

  • 最后但同样重要的是,您可以通过执行以下命令永久启用命令行上的注释

    echo setopt interactivecomments >> ~/.zshrc
    

    Alt+#在这里不起作用,但Ctrl+ A/ Home, #,Enter可以达到相同的效果。

要查看所有可用的键盘快捷键,请执行

bindkey

答案2

选项四(作为问题标题的答案,而不是其解释;--):

  • print -S "this line goes to the history"

摘录自zshbuiltins(1):“print -S将结果放在历史列表中,而不是标准输出中。在这种情况下,只允许一个参数;它将被拆分成单词,就像它是一个完整的 shell 命令行一样。效果类似于在 HIST_LEX_WORDS 选项处于活动状态的情况下从历史文件中读取行。”

答案3

@mpy 答案的小部件,将其添加到您的 .zshrc 中

to-history() { print -S $BUFFER ; BUFFER= }
zle -N to-history
bindkey 'œ' to-history

注意:œ 是我在 Mac 上按 alt/option-q 得到的,请根据你的终端进行调整

答案4

如果你正在使用 vi 模式,则按ESC进入正常模式,然后按Shift+3( #)。这会将注释掉的命令放入历史记录中。

相关内容