После интерактивного перебазирования с помощью git я часто обнаруживаю, что файл, открытый в vim, был изменен в файловой системе. Когда я пытаюсь записать файл с помощью :w
или :w!
, я получаю приглашение WARNING: The file has been changed since reading it!!!
/ Do you really want to write to it (y/n)?
.
Я считаю это предупреждение достаточно разумным; было бы сомнительным поведением молча перезаписывать файл в файловой системе, который был изменен по произвольной причине. Однако в таких случаях, когда я знаю, почему файл был затронут, я часто обнаруживаю, что хочу принудительно записать его, вместо того чтобы проверять, есть ли подсказка или нет. У меня были ситуации, когда я не замечал подсказку и немедленно закрывал вкладку, что приводило к несогласованным сборкам и, иногда, к потере данных.
Как избавиться от запроса на подтверждение, навсегда или (предпочтительнее) с помощью расширенной команды, аналогичной w!
?
Когда я ищу этот запрос в Google, я получаю кучу результатов по запросу «принудительная запись файла, доступного только для чтения» w!
, но не могу найти ничего, связанного с принудительной записью измененного файла.
решение1
Следующая команда работает для текущего буфера (я не знаю решения для нескольких буферов):
:w !sudo tee %
Символ %
обозначает текущее имя файла. sudo
Команда позволяет перезаписывать файлы, открытые только для чтения.
Чтобы определить :w!!
команду, которая выполняет вышеуказанное, добавьте это к .vimrc
:
cmap w!! w !sudo tee > /dev/null %
Часть > /dev/null
исключает стандартный вывод, tee
который здесь не используется.
Для получения более подробной информации см. пост Как работает трюк vim «писать с помощью sudo»?