Я забыл синтаксис массива в командной строке Zsh:
$ hello=[1,2,3,4] %ERR:
Я хочу исправить проблему путем подстановки. В Vim я бы сделал :.s@,@ @g. Так как же я могу отредактировать текущую строку или позволить ей назвать текущий буфер, выполнив команду для нее?
:.s@,@ @g
[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) для получения дополнительной информации о завершении / чередовании истории.
Только с использованием пользовательского виджета 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