Как удалить текст из всех строк между двумя столбцами?

Я хотел бы удалить содержимое для всех строк между двумя столбцами. Как мне это сделать?

например, я хочу этого:

abcdefg
hijklmn
opqrstu

чтобы стать этим, если я удаляю текст между столбцами с 3 по 5:

abfg
himn
optu

5 ответов


поместите курсор в d, затем нажмите Ctrl-V, l, G и d.

  • Ctrl-v переходит в режим визуального блока;
  • l расширяет визуальный выбор на один символ вправо;
  • G расширяет выделение до последнего линия;
  • d удаляет выбор.

для спонтанного редактирования я бы использовал блочный визуальный режим с помощью CTRL-V (часто сопоставляется с CTRL-Q в Windows), затем d, чтобы удалить его.

Если вы делаете это часто, для большого диапазона / всего буфера или неоднократно, я бы использовал подстановку, которая начинает соответствовать в виртуальном столбце и расширяется (вверх) до конечного столбца, например, для вашего примера:

%s/\%3v.*\%<7v//

Ваш вопрос очень похож на этот.

удалить столбцы с 3 по 5 для все строки в файле:

:%normal 3|d6|

для удаления определенного интервала строк (от 80 до 90) используйте следующее:

:80,90normal 3|d6|

если вы не знакомы с нормальной командой или с / "движением", есть краткое объяснение:

  1. на выполните следующие команды в нормальный режима;
  2. | "motion" перемещает курсор в указанный столбец, поэтому 3| перемещает курсор в 3-й столбец;
  3. затем я удаляю все (d) до 5-го столбца (6|).

вы можете использовать поиск и замену:

:%s/..\zs...\ze

или в более общей форме:

:%s/.\{2}\zs.\{3}\ze

где первое число (2) - это индекс столбца (на основе нуля), а второе число (3) - это количество символов столбца.

пояснение:

:%s/ поиск и замена во всем буфере.

.\{2}\zs найти два символа и установить начало матча здесь.

.\{3}\ze найти три символа и установите конец матча здесь.

опустить строку замены, так как вы хотите удалить матч.

HTH


Я бы сделал следующим образом:

:%s/^..\zs.*\ze..$//g

который удалит все остальное, кроме первых двух столбцов в начале и двух в конце.