13 ответов:
Я не гуру в Vim, но то, что я использую в этом случае-это "визуальный режим". В командном режиме введите
V(капитала). Затем переместите вверх / вниз, чтобы выделить блок, который вы хотите удалить (все обычные команды движения работают). Затем удалите его с помощьюxилиd.
перейдите в начальную строку и введите ma (метка "а"). Затем перейдите к последней строке и введите d'a (исключить, чтобы отметить "a").
это приведет к удалению всех строк от текущей до отмеченной (включительно). Он также совместим с
viа такжеvim, на случай, если ваше окружение не благословлено последним.
вы также можете использовать визуальный режим (некоторые команды также можно использовать с опцией удаления) vipvap выберите пункт v2ap для выбора двух абзацев dap работает, d2ap также. Вы можете удалить в пределах блоков
[]как da[Для справки: типы объектов. Из документации vim: раздел 4. http://vimdoc.sourceforge.net/htmldoc/visual.html
4. Operating on the Visual area *visual-operators* ... The objects that can be used are: aw a word (with white space) iw inner word aW a WORD (with white space) iW inner WORD as a sentence (with white space) is inner sentence ap a paragraph (with white space) ip inner paragraph ab a () block (with parenthesis) ib inner () block aB a {} block (with braces) iB inner {} block a< a <> block (with <>) i< inner <> block a[ a [] block (with []) i[ inner [] block
здесь есть много лучших ответов, но для полноты я упомяну метод, который я использовал, прежде чем читать некоторые из великих ответов, упомянутых выше.
Предположим, вы хотите удалить из 24-39 линии. Вы можете использовать команду ex
:24,39dвы также можете дергать линии с помощью
:24,39yи найти и заменить чуть более строк 24-39 с помощью
:24,39s/find/replace/g
Если вы включите номера линий через
set numberможно простоdNNGчто приведет к удалению строки NN из текущей позиции. Таким образом, вы можете перейти к началу строки, которую вы хотите удалить, и простоd50Gпредполагаю, что это последняя строка, которую вы хотите удалить.
Это вроде как зависит от того, что это большой блок есть. Может быть, вы просто хотите удалить абзац, и в этом случае a dip будет делать.
есть несколько возможностей, что лучше зависит от текста работы.
на ум приходят две возможности:
- переключиться в визуальный режим (
V,S-V, ...), выделите текст курсором движение и нажмитеd- исключить целый абзац со словами:
dap
Если на экране отображается весь блок, можно использовать параметр relativenumber. См.: справка relativenumber. Доступен в 7.3
вы можете поместить курсор в начало или конец блока и войти в визуальный режим (shift-v). Затем просто двигайтесь вверх или вниз, пока нужный блок не будет выделен. Наконец, скопируйте текст, нажав клавишу Y или вырезать текст, нажмите кнопку D.
наряду с другими движениями, которые уже упоминались здесь, есть также
/{pattern}<CR>движение, поэтому, если вы знаете, что хотите удалить строку, содержащую foo, вы можете сделатьdV/foo<CR>.Vздесь, чтобы заставить движение быть линейным, потому что по умолчанию/- это посимвольный.
подсчет строк слишком утомителен для меня, но подсчет "абзацев" не так уж и плох. '{'и'} ' переместите курсор в первую пустую строку до и после курсора соответственно. Операции перемещения курсора могут быть объединены с удалением, и несколько других ответов использовали аналогичный подход (dd для строки, dG для конца документа и т. д.)
Например:/* Lorem ipsum dolor sit amet, consectetur adipiscing elit. */ Lorem *ipsum(void) { return dolor(sit, amet); }если курсор начинается над блоком комментариев, 'd}' удаляет блок комментариев, а 'd2}' удаляет оба блока комментариев. блок комментариев и блок кода. Если курсор начинается под блоком кода, 'd {'удаляет код, а 'd2{' удаляет оба. Конечно, вы можете пропустить один блок, сначала переместив курсор: '{d{' или '}d}'.
Если вы согласуетесь с вашим пробелом, или вы можете считать абзацы с первого взгляда, это должно работать. В файле справки Vim есть больше трюков с курсором, если вам интересно.
можно также ввести очень большое число, а затем нажать
ddЕсли вы хотите удалить все строки под курсором.
удаление блока текста
если ваш курсор находится в начале блок:
V/^$<CR>d (where <CR> is the enter/return key)объяснение
обязательные
- введите "линейно-визуальный" режим:
V- выделить до следующей пустой строки:
/^$<CR>- удалить:
dболее надежный решение:
:set nowrapscan :nnoremap D V/^\s*$\|\%$<CR>dобъяснение
- отключить поиск wrap:
:set nowrapscan- переназначить
Dклавиша (для следующих команд)::nnoremap D- введите "линейно-визуальный" режим:
V- выделите до следующей пустой / пробельной строки или EOF:
/^\s*$\|\%$<CR>- удалить:
d
Comments