有时我在zsh
以下方面使用多行命令:
? echo \
> a \
> multiline \
> command
Run Code Online (Sandbox Code Playgroud)
从历史搜索中拉出命令后编辑命令时,我可以更改各行的内容.但是,我无法弄清楚如何插入另一行:
# 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
Run Code Online (Sandbox Code Playgroud)
如何在从历史记录中拉出的多行命令的中间插入换行符?
Ada*_*hon 20
您可以使用self-insert-unmeta
绑定Alt+ Return来插入文字换行符而不接受命令:
bindkey '^[^M' self-insert-unmeta
Run Code Online (Sandbox Code Playgroud)
使用你的例子:在光标位置按下Alt+ Return(#
)
% echo \
a \
multiline \#
command
Run Code Online (Sandbox Code Playgroud)
会得到你这个:
% echo \
a \
multiline \
#
command
Run Code Online (Sandbox Code Playgroud)
这不仅适用于编辑历史记录,也适用于键入命令时.因此,您可以像时尚一样在脚本中准备几个命令,并使用单个接受它们Return.
例如,在此示例中按Alt+ Return而不是#
:
% echo command 1#
echo command 2#
echo command 3
Run Code Online (Sandbox Code Playgroud)
将执行与命令相同的操作echo command 1; echo command 2; echo command 3
并生成此输出:
command 1
command 2
command 3
Run Code Online (Sandbox Code Playgroud)
(来自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
Run Code Online (Sandbox Code Playgroud)
第一行加载函数.第二行zle
从同名函数为Z shell行编辑器()创建一个新的小部件.第三行将小部件绑定到Control- X Control- E.如果您使用vi
绑定而不是emacs
键绑定,请使用类似的东西
bindkey -M vicmd v edit-command-line
Run Code Online (Sandbox Code Playgroud)
代替(其结合了小部件v在vicmd
模式).