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!

zshただし、この非常に再発する状況は、そのように実行されることを考えると、の場合ほど簡単に対処することはできません#mysuperlongcommand(結果として:zsh: command not found: #mysuperlongcommand

4

5 に答える 5

210

zshを試し始めたばかりで、私もこの問題に遭遇しました。setopt interactivecommentsbashスタイルのコメントをアクティブにするために行うことができます。

Zシェルマニュアルによるkshと、これは(Kornシェル)とsh(Bourneシェル)のデフォルトの動作であり、(Bourne bash-againシェル)のデフォルトではありませんが、zsh(Zシェル)のデフォルトではありません。

次のリストでは、すべてのエミュレーションでデフォルトで設定されているオプションがマークされてい<D>ます。デフォルトでcsh、ksh、sh、またはzshエミュレーションでのみ設定されるものには、必要に応じて、、、のマークが付け<C>られます。<K><S><Z>

INTERACTIVE_COMMENTS(-k)<K> <S> インタラクティブシェルでもコメントを許可します。

于 2012-08-08T21:56:00.553 に答える
44

私が使う

bindkey "^Q" push-input

zshマニュアルから:

現在の複数行構成全体をバッファスタックにプッシュし、トップレベル(PS1)プロンプトに戻ります。現在のパーサー構造が1行しかない場合、これはプッシュラインとまったく同じです。次回エディターが起動するか、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)を設定すると、以前と同じようにインタラクティブシェルでコメントを使用できるようになります。

于 2012-07-27T15:08:00.447 に答える
21

私もこれを頻繁に行っています。私がやっていることは、longコマンドを切り取り、最初に実行する必要のあるコマンドを実行してから、longコマンドを貼り付けることです。これは簡単です。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にコメントが付けられます。

私はMacOSBig Surを使用していて、それを複数回使用しました。

編集: ":"プロシージャは、スペースを指定せずに機能します。「:command」は正しいですが、「:command」は正しくありません

于 2021-08-06T07:42:25.690 に答える
0

setopt interactivecomments@Lajnoldによって提案されたに加えて、特定のコメントが履歴に書き込まれないようにするために、次のようなものを追加することもできます( https://superuser.com/questions/352788/how-to-prevent-a-から) command-in-the-zshell-from-being-saved-into-history):

これは、ZSH組み込み関数zshaddhistory()をオーバーライドします。

  • 列1で始まり、その後に1つ以上のスペースが続かないコメントをログに記録します(つまり、戻ってきたい#somecommand)
  • 列1で始まり、その後に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 に答える