27

有时我在以下位置使用多行命令zsh

❯ echo \
> a \
> multiline \
> command

从历史搜索中提取命令后编辑命令时,我可以更改各行的内容。但是,我不知道如何插入另一行:

# I want to insert another line after "multiline"...
❯ echo \
> a \
> multiline \  # but hitting <return> here just runs the command, even though there's a backslash at the end of the line
> command

如何在从历史记录中提取的多行命令中间插入换行符?

4

7 回答 7

40

您可以使用ESC- Return

FWIW,我在 Debian Jessie,zsh 5.0.7 上对其进行了测试,它在那里工作。

于 2016-05-08T04:28:01.593 回答
34

您可以使用self-insert-unmeta绑定Alt+Return在不接受命令的情况下插入文字换行符:

bindkey '^[^M' self-insert-unmeta

使用您的示例:在光标位置()点击Alt+Return#

% echo \
a \
multiline \#
command

会给你这个:

% echo \
a \
multiline \
#
command

这不仅适用于编辑历史,也适用于输入命令。因此,您可以像时尚一样在脚本中准备多个命令,并使用单个Return.

例如,在本例中按Alt+Return而不是:#

% echo command 1#
echo command 2#
echo command 3

将执行与命令相同的操作echo command 1; echo command 2; echo command 3并产生以下输出:

command 1
command 2
command 3
于 2014-10-20T08:33:19.137 回答
5

(来自https://unix.stackexchange.com/questions/6620/how-to-edit-command-line-in-full-screen-editor-in-zsh的答案摘要)

zsh附带一个功能,可用于在您喜欢的编辑器中打开当前命令行。将以下行添加到您的.zshrc:

autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line

第一行加载函数。第二行zle从同名函数为 Z shell 行编辑器 ( ) 创建一个新小部件。第三行将小部件绑定到Control- X Control- E。如果您使用vi绑定而不是emacs键绑定,请使用类似

bindkey -M vicmd v edit-command-line

而是(将小部件绑定到v模式vicmd)。

于 2014-10-17T00:30:04.727 回答
4

如果使用bindkey -vmode,你也可以使用mode中的默认o/O命令vicmd来添加一个换行符并在其中进入insertmode,分别在当前行的上方或下方。

于 2016-04-27T12:05:58.220 回答
2

请注意,如果您想在多行命令中进行评论,您可以使用:

❯ echo `#first comment` \
 a `#second comment` \
 multiline \
 command
于 2018-01-17T22:01:47.833 回答
0

听起来像是使用 shell 脚本文件的合适地方,而不是?

#!/bin/zsh
my
commands
here
I can even add a new line at a later time.
于 2014-10-16T16:30:53.693 回答
0

CTRL + Enter(返回)为外行用户。

于 2022-02-02T17:07:06.067 回答