Какая польза от восклицательного знака ('!') В командной строке Vim после некоторых команд, таких как ": w!"? - PullRequest
33 голосов
/ 22 июня 2010

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

Ответы [ 4 ]

39 голосов
/ 22 июня 2010

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

28 голосов
/ 22 июня 2010

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

Другое использование восклицательного знака: !, за которым следует какая-то команда, выполняет эту команду непосредственно из редактора.

:! ls /etc
26 голосов
/ 23 июня 2010

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

:set cursorline

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

:set nocursorline

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

:set cursorline!

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

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

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

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

:set nocursorline!
9 голосов
/ 22 июня 2010

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

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

:help help

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

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