Как предотвратить выполнение команды, отредактированной с помощью 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 секунды прошло.