Как удалить текст из всех строк между двумя столбцами?
Я хотел бы удалить содержимое для всех строк между двумя столбцами. Как мне это сделать?
например, я хочу этого:
abcdefg
hijklmn
opqrstu
чтобы стать этим, если я удаляю текст между столбцами с 3 по 5:
abfg
himn
optu
5 ответов
для спонтанного редактирования я бы использовал блочный визуальный режим с помощью CTRL-V (часто сопоставляется с CTRL-Q в Windows), затем d
, чтобы удалить его.
Если вы делаете это часто, для большого диапазона / всего буфера или неоднократно, я бы использовал подстановку, которая начинает соответствовать в виртуальном столбце и расширяется (вверх) до конечного столбца, например, для вашего примера:
%s/\%3v.*\%<7v//
Ваш вопрос очень похож на этот.
удалить столбцы с 3 по 5 для все строки в файле:
:%normal 3|d6|
для удаления определенного интервала строк (от 80 до 90) используйте следующее:
:80,90normal 3|d6|
если вы не знакомы с нормальной командой или с / "движением", есть краткое объяснение:
- на выполните следующие команды в нормальный режима;
- | "motion" перемещает курсор в указанный столбец, поэтому
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
который удалит все остальное, кроме первых двух столбцов в начале и двух в конце.