Как предотвратить сохранение файла в vim - PullRequest
0 голосов
/ 18 января 2019

Я настраиваю vim (vimdiff) в качестве инструмента тестирования для проверки определенных файлов и хотел бы полностью отключить сохранение файлов - однако я не смог остановить :w! .. Я попытался запустить vim / vimdiff с параметром -R, и я также попытался установить cpoptions, чтобы он содержал W, что означает:

                                                            cpo-W
            W       Don't overwrite a readonly file.  When omitted, ":w!"
                    overwrites a readonly file, if possible.

.. но vim, похоже, не заботится об этом:

echo yo > foo

vim -R foo

:set cpoptions=aABceFsW

:set cpoptions?
cpoptions=aABceFsW

:w
E45: 'readonly' option is set (add ! to override)

:w!
"foo" 1L, 3C written

.. ошибка, или я ее неправильно понял?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Намного лучше работать с правами доступа к файлам или использовать опцию -M, как указано в @ user7369280, но забавно то, что вы также можете запустить vi с некоторыми опциями, которые не позволят вам использовать классический w или wq команды, например:

vi my_file -c 'cabbrev w <esc>' -c 'cabbrev wq <esc>'

Он в основном отключает команды w и wq, переопределяя их командой escape (которая мало что делает)

0 голосов
/ 18 января 2019

Вы только что сказали Vim, что он должен работать в «режиме только для чтения». Сам файл не только для чтения. Если вы chmod -w foo, то Vim не разрешит записать файл в :w!, пока W присутствует в cpoptions.

Вы можете попробовать запустить Vim с -M:

vim -M foo

Это запрещает любые изменения в файле и предотвращает запись файла. Смотри :help -M.

Другое решение может быть:

vim -m foo

Откроется файл, и вы сможете отредактировать его (вы получите предупреждение W10: Warning: Changing a readonly file), но вы не сможете его написать. Параметр write сбрасывается (на nowrite) и предотвращает запись в любой файл. Так что это глобально.

Если вы окончательно решите, что вам все равно нужно это написать, вам нужно установить опцию с помощью команды :set write. Как уже говорилось, это глобально, так что вы можете написать любой файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...