Подтвердить что ты не робот

Какое использование восклицательного знака ('!') В командной строке Vim после некоторых команд типа ": w!"?

В принципе, я хотел бы знать разницу между: :w и :w! или :wq и :wq!

4b9b3361

Ответ 1

Помимо ситуаций, когда восклицательный знак заставляет вещи, как и записи, превращать команду в команду переключения. Поэтому, если я это сделаю:

:set cursorline

будет выделена строка, на которой курсор находится. Я могу отключить его:

:set nocursorline

Или я мог бы сделать:

:set cursorline!

Эта команда переворачивается между двумя настройками, выключена и включена.

Я часто включаю и выключаю курсорную линию, и команда toggle позволяет мне делать это с помощью простого отображения функциональных клавиш. Без переключения мне понадобится либо два отображения: один, чтобы включить его, и секунду, чтобы отключить его. Или мне пришлось бы написать функцию, чтобы определить, включено или выключено значение курсовой линии, а затем включить противоположную настройку.

Это работает, насколько мне известно, все параметры командной строки, которые имеют параметры включения и выключения, такие как hlsearch, paste, cursorcolumn, number, insearch и т.д.

Обратите внимание также, что восклицательный знак переключит версию команды без нее. Например, вы также можете переключить линию курсора с помощью:

:set nocursorline!

Ответ 2

The! квалификатор говорит Vim, чтобы заставить операцию. Например, если файл был доступен только для чтения, вы должны использовать: w! писать все равно. Если файл был изменен и вы хотите выйти без сохранения, вы должны использовать: q!.: WQ! просто означает, что команда принудительно записывается и завершается одной командой.

Ответ 3

Восклицательный знак обычно означает принудительное действие. Тем не менее, есть много других применений, например,

  • ! затем какая-то команда выполняет эту команду непосредственно из редактора, например :! ls/etc :! ls/etc
  • :w !cmd передает содержимое текущего буфера в команду cmd, например :w !sudo tee % (также как запись с помощью трюка sudo).

Ответ 4

Это действительно зависит от рассматриваемой команды. Что касается тех, которые вы перечислили, он заставляет команду, так как другие уже ответили вам.

Однако существуют и другие команды, такие как :global, :map, :make, :silent,..., где bang (!) имеет другие эффекты. Прочтите их документацию:

:help help

(и мы можем дать удар любому значению, которое мы хотим в командах, которые мы определяем)