12

После выбора диапазона строк с помощью команды V я хотел бы удалить каждую строку файла, которая НЕ выбрана, поэтому есть ли способ инвертировать выделение - выбрать каждую строку, которая не выделена?

Например как

:g!/FOO/d

удаляет каждую строку, которая НЕ содержит FOO.

Если бы я имел в виду диапазон и хотел бы использовать его инверсию:

'a,'b

Мне нужно будет использовать два диапазона:

1,'a-1

а также

'b+1,$

Я подозреваю, что это не может быть сделано за один шаг - но это было бы хорошо!

4 ответа4

15
  1. выберите свой текст
  2. "*yggdG"*p что означает ...

    "*y    " yank it to the selection register
    ggdG   " delete everything
    "*p    " and paste the selection again 
    
7

Сначала создайте следующее отображение (например, привязанное к клавише <F4> )

map <F4> :<C-U>1,'<-1:delete<CR>:'>+1,$:delete<CR>

затем, после выбора диапазона в визуальном режиме, просто нажмите <F4> чтобы вызвать соответствующую команду. Команду легко объяснить по частям:

  • " : " Войдите в режим командной строки.
  • « <C-U> » Удалить все символы между позицией курсора и началом строки.
  • « 1,'<-1 »Определяет диапазон от первой строки файла до строки перед началом текущего выбора.
  • " :delete<CR> " Удалить (ранее указанный диапазон строк).
  • " :'>+1,$:delete<CR> " Удалить строки в диапазоне " '>+1,$ ", то есть от строки после конца выделения до конца файла.
6

Просто для потомков:

:v/\%V/d

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

1

поскольку «инвертирование» означает в основном создание «множественных выборок» (область до и после исходного выбора), я снова провел поиск vimscripts http://www.vim.org/scripts/script.php?script_id=953. попробуй это.

 There are a number of operations to very
 easily manipulate selections such as modifying 
 the regions (add/delete/inverte/clear), hiding, 
 refreshing, saving and restoring etc."

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .