我在Zsh-commandline上忘记了数组语法:
$ hello=[1,2,3,4] %ERR:
我想通过替换解决问题。在Vim,我会做:.s@,@ @g
。
那么如何编辑当前行,或者通过在其上运行命令将其称为当前缓冲区?
答案 0 :(得分:4)
[jkramer/sgi5k:~]# list=(1,2,3,4,5,6,7,8,9,10)
[jkramer/sgi5k:~]# !:gs/,/ /
list=(1 2 3 4 5 6 7 8 9 10)
有关历史记录完成/更改的更多信息,请参阅zshexpn(1)。
答案 1 :(得分:2)
仅使用自定义zle小部件,例如:
function _-sedsubs()
{
emulate -LR zsh
local SEDARG="s"
zle -R "Substitution: $SEDARG"
local key=""
read -k key
local -r start=$key
while (( (#key)!=(##\n) &&
(#key)!=(##\r) )) ; do
if (( (#key)==(##^?) || (#key)==(##^h) )) ; then
SEDARG=${SEDARG[1,-2]}
else
SEDARG="${SEDARG}$key"
fi
zle -R "Substitution: $SEDARG"
read -k key || return 1
done
BUFFER="$(echo $BUFFER | sed -r -e "$SEDARG")"
}
zle -N sedsubstitute _-sedsubs
bindkey "\C-o:s" sedsubstitute