有时我在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
如何在从历史记录中拉出的多行命令的中间插入换行符?
答案 0 :(得分:17)
您可以使用self-insert-unmeta
绑定 Alt + 返回以插入文字换行符而不接受命令:
bindkey '^[^M' self-insert-unmeta
使用你的例子:点击 Alt + 返回在光标位置(#
)
% echo \
a \
multiline \#
command
会告诉你:
% echo \
a \
multiline \
#
command
这不仅适用于编辑历史记录,也适用于键入命令时。因此,您可以像时尚一样在脚本中准备几个命令,并使用单个 Return 接受它们。
例如,在此示例中按 Alt + 返回而不是#
:
% echo command 1#
echo command 2#
echo command 3
将执行与命令echo command 1; echo command 2; echo command 3
相同的操作并生成此输出:
command 1
command 2
command 3
答案 1 :(得分:15)
您可以使用 ESC - 返回。
FWIW,我在Debian Jessie,zsh 5.0.7上进行了测试,它在那里工作。
答案 2 :(得分:6)
(来自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
第一行加载函数。第二行从同名函数为Z shell行编辑器(zle
)创建一个新窗口小部件。第三行将小部件绑定到 Control - X Control - E 。如果您使用vi
绑定而不是emacs
键绑定,请使用类似
bindkey -M vicmd v edit-command-line
代替(在vicmd
模式下将小部件绑定到 v )。
答案 3 :(得分:4)
如果使用bindkey -v
模式,您还可以使用vicmd
模式下的默认 o / O 命令添加换行符并输入其中insert
模式,分别高于或低于当前行。
答案 4 :(得分:0)
听起来像是使用shell脚本文件的合适位置而不是吗?
#!/bin/zsh
my
commands
here
I can even add a new line at a later time.
答案 5 :(得分:0)
请注意,如果您想在多行命令中发表评论,可以使用:
❯ echo `#first comment` \
> a `#second comment` \
> multiline \
> command