编辑多行命令时,使用转义换行符,我无法向上移动行。
例如,假设我输入echo \
一行,然后按Enter,然后我想编辑echo \
命令的部分。按下Up不会移回第一个命令行。
这适用于包装的长命令,但不适用于转义换行符:
_physical_up_line() { zle backward-char -n $COLUMNS }
_physical_down_line() { zle forward-char -n $COLUMNS }
zle -N physical-up-line _physical_up_line
zle -N physical-down-line _physical_down_line
bindkey -M vicmd "R" physical-up-line
bindkey -M vicmd "N" physical-down-line
Run Code Online (Sandbox Code Playgroud)
当您按下Enter( accept-line
command) 时,当前行将被解析并安排执行。如果该行在语法上不完整(例如echo \
或for x in foo
),则不会执行它,但它已经存储。您可以看到 zsh 处于这种状态,因为它显示了PS2
提示而不是通常的PS1
.
据我所知,没有内置的方法来编辑这些存储的行。通过存储当前行而不执行它并调用先前的历史行进行编辑应该是可行的。
获取上一行的最简单方法是确保当前行未完成(例如\
在最后输入),接受(按Enter),然后取消(按Ctrl+ C)。然后,您可以通过按 将整个存储的命令作为单个历史行调用为单个多行缓冲区Up。