143

我最近在 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!

但是,这种经常发生的情况并不像使用 .git 那样容易解决zsh,因为#mysuperlongcommand将按原样运行(并导致:zsh: command not found: #mysuperlongcommand.

4

5 回答 5

210

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

Z Shell 手册指出,虽然这是ksh(Korn shell) 和(Bourne shell)的默认行为sh,而且我猜测bash(Bourne-again shell) 也是如此,但它不是zsh(Z shell) 的默认行为:

在以下列表中,所有仿真中默认设置的选项都标记为<D>;仅在 csh、ksh、sh 或 zsh 仿真中默认设置的那些标记为<C>, <K>, <S>,<Z>视情况而定。

INTERACTIVE_COMMENTS (-k)<K> <S> 即使在交互式 shell 中也允许评论。

于 2012-08-08T21:56:00.553 回答
44

我用

bindkey "^Q" push-input

从 zsh 手册:

将整个当前多行构造推入缓冲区堆栈并返回到顶层 (PS1) 提示符。如果当前解析器结构只有一行,这与 push-line 完全一样。下次编辑器启动或使用 get-line 弹出时,结构将从缓冲区堆栈顶部弹出并加载到编辑缓冲区中。

所以它看起来像这样:

> long command
Ctrl+Q => long command disappears to the stack
> forgotten command
long command reappears from stack
> long command

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

于 2012-07-27T15:08:00.447 回答
21

我发现自己也经常这样做。我所做的是剪切长命令,执行需要先执行的命令,然后将长命令粘贴回去。这很简单:CTRL+U将当前命令剪切到缓冲区中,CTRL+Y粘贴它。在 zsh 和 bash 中工作。

于 2012-07-26T15:02:39.517 回答
3
: sh generate_sample.sh arg1

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

sh generate_sample.sh : arg1

现在 arg1 被注释掉了。

我在 Mac OS Big Sur 上并多次使用它。

编辑:“:”程序不给空格。":command" 是正确的,但 ":command" 不是

于 2021-08-06T07:42:25.690 回答
0

除了setopt interactivecomments@Lajnold 建议的之外,您可能还想添加类似以下内容以防止某些评论被写入历史记录(来自https://superuser.com/questions/352788/how-to-prevent-a-命令in-the-zshell-from-being-saved-into-history):

这将覆盖 ZSH 内置函数 zshaddhistory():

  • 将记录从第 1 列开始的注释,后面没有一个或多个空格(即我想返回的#somecommand)
  • 不会记录从第 1 列开始后跟一个或多个空格的评论
  • 不会记录缩进的注释,由第 1 列的空格填充
  • 不会在第 1 列中记录带有空格的命令(运行您不想记录的命令的便捷快捷方式
setopt interactivecomments

function zshaddhistory() {
  emulate -L zsh
  if ! [[ "$1" =~ "(^#\s+|^\s+#|^ )" ]] ; then
      print -sr -- "${1%%$'\n'}"
      fc -p
  else
      return 1
  fi
}

作为参考,这是默认的 zshaddhistory() http://zsh.sourceforge.net/Doc/Release/Functions.html

zshaddhistory() {
  print -sr -- ${1%%$'\n'}
  fc -p .zsh_local_history
}
于 2020-01-08T15:54:13.420 回答