命令行Zsh中的注释

Rol*_*olf 103 command-line zsh

我最近在Ubuntu上从Bash切换到了Zsh,我很高兴.但是,有一些我真的很想念,我没有找到如何实现同样的事情.

在Bash中,每当我输入一个长命令并注意到我之前必须运行其他东西时,我只需要将其注释掉,如下所示:

me@home> #mysuperlongcommand with some arguments
me@home> thecommandIhavetorunfirst #and then: then up up
me@home> #mysuperlongcommand with some arguments #I just need to uncomment it!
Run Code Online (Sandbox Code Playgroud)

然而,这种相当复杂的情况并不像以前那样容易解决zsh,因为这样做#mysuperlongcommand会导致:并导致:zsh: command not found: #mysuperlongcommand.

小智 156

刚刚开始尝试zsh,我也遇到了这个问题.您可以setopt interactivecomments激活bash样式的注释.

  • 有没有理由这不是默认行为? (10认同)
  • 你也可以做`set -k`,如果只是一次性的话.但是我在zshrc中使用了这个答案的`setopt`行 (2认同)
  • @naught101 很多最好的 zsh 都是默认关闭的。不知道为什么 (2认同)

Mic*_*ski 38

我用

bindkey "^Q" push-input
Run Code Online (Sandbox Code Playgroud)

从zsh手册:

将整个当前多行结构推送到缓冲区堆栈并返回顶级(PS1)提示符.如果当前的解析器构造只是一行,这就像推线.下次编辑器启动或弹出get-line时,该构造将弹出缓冲区堆栈的顶部并加载到编辑缓冲区中.

所以它看起来像这样:

> long command
Ctrl+Q => long command disappears to the stack
> forgotten command
long command reappears from stack
> long command
Run Code Online (Sandbox Code Playgroud)

此外,如果设置INTERACTIVE_COMMENTS选项(setopt INTERACTIVE_COMMENTS),您将能够像以前一样在交互式shell中使用注释.

  • @Mihnea如果命令消失,似乎推送输入正在工作.它应该在您运行下一个命令时返回,或者只需按Enter键.不是吗? (2认同)

Fre*_*and 18

我发现自己经常这样做.我所做的是剪切long命令,执行需要先执行的命令,然后将long命令粘贴回来.这很简单:CTRL + U将当前命令切换到缓冲区,CTRL + Y粘贴它.适用于zsh和bash.

  • 这不应该是公认的答案.下面说使用"setopt interactivecomments"的解决方案应该是.这样做的原因是,如果您只是剪切当前命令,那么它不在您的zsh历史记录中,并且您在输入新命令时也无法轻松使用剪切和粘贴,而不会覆盖您尝试的命令保存. (4认同)

Jun*_*ite 11

将该行添加setopt INTERACTIVE_COMMENTS到您的~/.zshrc文件中,保存它,然后重新启动 shell。

这是为了澄清@Lajnold 的回答和@Hamish Downer 的评论。我花了一点时间才弄清楚如何使这种改变永久化。您可能想在导出变量之前添加该行,因此可以将其添加到文件的顶部。setopt PROMPT_SUBST我的文件中已经有~/.zshrc,所以我只是将其添加到该行之后。这将确保每次启动 zsh 终端时都会加载设置。


Pri*_*tel 6

: sh generate_sample.sh arg1
Run Code Online (Sandbox Code Playgroud)

添加“:”不会执行 zsh 中的命令。

sh generate_sample.sh : arg1
Run Code Online (Sandbox Code Playgroud)

现在 arg1 已被注释。

我使用的是 Mac OS Big Sur,并使用过多次。

编辑:“:”过程适用于不给出空格。“:command”是正确的,但“:command”不正确