Использование vim для принудительной записи файла, который был изменен в файловой системе

Использование vim для принудительной записи файла, который был изменен в файловой системе

После интерактивного перебазирования с помощью 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»?

Связанный контент