Как предотвратить выполнение команды, отредактированной с помощью fc

Я имею FCEDIT установлен в vim, Если я позвоню fc команда это откроет vim с временным файлом и содержимым этого файла будет последняя выполненная команда из истории.

Проблема в том, что даже если я выйду без сохранения, команда все равно будет выполнена. Например:

$ printf "\nHelloAskubuntu\n\n"

HelloAskubuntu

$ fc # opens vim, I do :q!
printf "\nHelloAskubuntu\n\n"

HelloAskubuntu

Как мне этого избежать?

2 ответа

Решение

fc не выполнит команду, если команда редактора не завершилась успешно. В Vim есть команда для форсирования этого: :cq:

                                                        :cq :cquit
:cq[uit][!]             Quit Vim with an error code, so that the compiler
                        will not compile the same file again.
                        WARNING: All changes in files are lost!  Also when the
                        [!] is not used.  It works like ":qall!" :qall,
                        except that Vim returns a non-zero exit code.

Итак, когда вы не хотите запускать команду, используйте :cq выйти вместо :q!, Возможно, Vim сможет сделать это, если вы не внесли каких-либо изменений, но это, вероятно, будет более раздражающим, чтобы надежно приступить к работе, чем просто использование :cq,

Это происходит потому, что содержимое уже хранится во временном файле /tmp/bash-fc-*, Закрытие прямо, fc все равно будет запускать эту оболочку.

Рабочий подход, который я мог бы протестировать в Ubuntu 16.04.

  1. Создать прокси-команду (новый редактор)

    sudo vim /usr/local/bin/vim2
    

    Сделайте так, чтобы открыть этот файл в vim затем опустошите его на диск. Таким образом, содержание только в vim если вы не сохраните его, fc ничего не побежит

    #!/bin/sh
    
    sh -c "sleep 1; echo -n ''>$1" &
    vim $1
    

    Исправить разрешение

    sudo chmod +x /usr/local/bin/vim2
    
  2. Задавать FCEDIT в vim2 или временно проверить export FCEDIT=vim2

Единственная надежда в том, что вы не быстрее меня, чтобы закрыть vim до 1 секунды прошло.

Другие вопросы по тегам