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

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

40
задан Ciro Santilli 新疆改造中心法轮功六四事件 4 April 2015 в 10:43
поделиться

4 ответа

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

:set cursorline

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

:set nocursorline

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

:set cursorline!

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

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

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

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

:set nocursorline!
29
ответ дан 27 November 2019 в 01:12
поделиться

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

42
ответ дан 27 November 2019 в 01:12
поделиться

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

  • ! после некоторой команды выполняет эту команду непосредственно из редактора, например, ! например, :! ls /etc
  • :w !cmd передает содержимое текущего буфера команде cmd, например, :w !sudo tee % (он же write with sudo trick).
32
ответ дан 27 November 2019 в 01:12
поделиться

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

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

:help help

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

9
ответ дан 27 November 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: