Отредактируйте команду Zsh с помощью внешнего редактора и замените исходную команду

Да. Открытие специального файла fifo для записи не препятствует перемонтированию файловой системы только для чтения -.

# unshare -rm
# mount -ttmpfs tmp /mnt
# mknod /mnt/fifo p
# exec 3<>/mnt/fifo
# mount /mnt -oremount,ro
# exit
3
27.08.2020, 22:29
1 ответ

Отказ от ответственности :Я автор 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.

3
18.03.2021, 23:09

Теги

Похожие вопросы