Как предотвратить выполнение команды, отредактированной с помощью 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.
Создать прокси-команду (новый редактор)
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Задавать
FCEDITвvim2или временно проверитьexport FCEDIT=vim2
Единственная надежда в том, что вы не быстрее меня, чтобы закрыть vim до 1 секунды прошло.