Да. Открытие специального файла fifo для записи не препятствует перемонтированию файловой системы только для чтения -.
# unshare -rm
# mount -ttmpfs tmp /mnt
# mknod /mnt/fifo p
# exec 3<>/mnt/fifo
# mount /mnt -oremount,ro
# exit
Отказ от ответственности :Я автор Powerlevel10k.
Если временная подсказка включена, Powerlevel10k должен обрезать подсказку, когда вы закончите редактирование команды во внешнем редакторе. Однако это не так. Я только что исправил это благодаря вашему отчету.
Теперь вернемся к вашему первоначальному вопросу.
What I'd like to have instead is that the the end result replaces the original line.
Для этого вам потребуется определить собственный виджет zle. Вот одна реализация:
function edit-command-line-inplace() {
if [[ $CONTEXT != start ]]; then
if (( ! ${+widgets[edit-command-line]} )); then
autoload -Uz edit-command-line
zle -N edit-command-line
fi
zle edit-command-line
return
fi
() {
emulate -L zsh -o nomultibyte
local editor=("${(@Q)${(z)${VISUAL:-${EDITOR:-vi}}}}")
case $editor in
(*vim*)
"${(@)editor}" -c "normal! $(($#LBUFFER + 1))go" -- $1
;;
(*emacs*)
local lines=("${(@f)LBUFFER}")
"${(@)editor}" +${#lines}:$((${#lines[-1]} + 1)) $1
;;
(*)
"${(@)editor}" $1
;;
esac
BUFFER=$(<$1)
CURSOR=$#BUFFER
} =(<<<"$BUFFER") </dev/tty
}
Вы можете связать его так же, как и сedit-command-line
:
zle -N edit-command-line-inplace
bindkey -M vicmd v edit-command-line-inplace
Обратите внимание, что edit-command-line-inplace
заменяется на edit-command-line
, если невозможно обновить командную строку на месте. Например, попробуйте ввести echo 'first line
, нажмите , введите , а затем вызовите edit-command-line-inplace
. Невозможно обновить первую строку команды, поэтому edit-command-line-inplace
будет вести себя так же, как edit-command-line
.
Редактировать :Первая версия edit-command-line-inplace
, которую я опубликовал, явно вызывала nvim
для редактирования командной строки. Я обновил код, чтобы учесть переменные окружения VISUAL
и EDITOR
.