如何在 ZSH 中单行重新运行内联循环(类似 bash 的行为)

Aar*_*lli 6 bash loops zsh inline-editing

我想知道是否有办法让 zsh 中的内联循环表现得像 bash 中一样。

我最近开始使用 zsh,到目前为止我很喜欢它。在 zsh 中有一件事我希望表现得像 bash 中的内联循环。

我经常像这样运行快速循环for in a b c-> 按 Enter -> do-> 按 Enter 等等......

当我回忆起 zsh 中要更改的命令/循环时,行被包裹在多行中,但在 bash 中它只是一行。

ZSH 初始运行:

user@localhost > for i in {a..c}
for> do
for> echo ${i}
for> done
a
b
c
Run Code Online (Sandbox Code Playgroud)

ZSH 重复<向上箭头>:

user@localhost > for i in {a..c}
do
echo ${i}
done
Run Code Online (Sandbox Code Playgroud)

BASH 初始运行:

[user@localhost ~]$ for i in {a..c}
> do
> echo ${i}
> done
a
b
c
Run Code Online (Sandbox Code Playgroud)

BASH 重复<向上箭头>:

[user@localhost ~]$ for i in {a..c}; do echo ${i}; done
Run Code Online (Sandbox Code Playgroud)

Ale*_*ura 8

Zsh 指南中 Fancier Editing 下提到了一个可爱的选项:它就是singlelinezle选项;设置此选项会导致“...编辑仅限于一行”,从而实现您在问题中提到的所需行为。

# without `singlelinezle` set
user% for a in a b c; do echo $a; done
# output:
# a
# b
# c
# <up-arrow>
user% for a in a b c; do echo $a; done

user% for a in a b c; do
for> echo $a; 
for> done
# output: 
# a 
# b
# c
# <up-arrow>
user% for a in a b c; do
echo $a
done

setopt singlelinezle
# with `singlelinezle` set
user% for a in a b c; do echo $a; done
# output:
# a 
# b
# c
# <up-arrow>
user% for a in a b c; do echo $a; done


user% for a in a b c; do
for> echo $a
for> done
# output:
# a
# b
# c
# <up-arrow>
user% for a in a b c; do\necho $a\ndone

unsetopt singlelinezle
Run Code Online (Sandbox Code Playgroud)