В основном я хотел бы знать разницу между: :w
и :w!
или :wq
и :wq!
Помимо ситуаций, когда восклицательный знак заставляет что-либо, например, записывать, он превратит команду в команду переключения. Итак, если я это сделаю:
:set cursorline
, строка, на которой находится мой курсор, будет выделена. Я могу выключить его с помощью:
:set nocursorline
Или я мог бы сделать:
:set cursorline!
Эта команда переключает между двумя настройками, выключено и включено.
Я часто выключаю и включаю выделение строки курсора, и команда переключения позволяет мне делать это с помощью простого сопоставления функциональных клавиш. Без переключателя мне потребовались бы два сопоставления: одно для его включения, а второе - для его выключения. Или мне пришлось бы написать функцию, чтобы определить, была ли установка линии курсора включена или выключена, а затем включить противоположную настройку.
Насколько мне известно, это работает со всеми настройками командной строки, в которых есть параметры включения и выключения, такие как hlsearch, paste, cursorcolumn, число, поиск и т. Д.
Обратите внимание, что восклицательный знак будет переключать нет версии команды. Например, вы также можете переключить настройку строки курсора с помощью:
:set nocursorline!
The! квалификатор указывает Vim принудительно выполнить операцию. Например, если файл был доступен только для чтения, вы должны использовать: w! все равно написать. Если файл был изменен и вы хотите выйти без сохранения, вы должны использовать: q !. : wq! просто означает принудительную запись и выход в одной команде.
Восклицательный знак обычно означает принуждение к какому-либо действию. Однако существует множество других вариантов использования, например,
!
после некоторой команды выполняет эту команду непосредственно из редактора, например, !
например, :! ls /etc
:w !cmd
передает содержимое текущего буфера команде cmd
, например, :w !sudo tee %
(он же write with sudo trick). Это действительно зависит от рассматриваемой команды. Что касается тех, которые вы перечислили, он принудительно запускает команду, поскольку другие уже ответили вам.
Однако есть и другие команды, например : global
, : map
, : make
, : silent
, ..., где взрыв (!
) имеет другие эффекты. Прочтите их документацию:
:help help
(и мы можем придать взрыву любое значение, которое захотим в определяемых нами командах)