vim: удалить первые 2 пробела для нескольких строк


79

Какой самый простой способ удалить первые 2 пробела для каждой строки с помощью VIM? В основном это повторение «2x» для каждой строки.

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


Это именно пробел или первые два символа, независимо от того, что они собой представляют?
— Джейсон Даун

Это первые два символа. Предполагая, что первые два символа являются пробелами.
— дважды

Я показал способ сделать это с помощью поиска и замены в режиме бывшего редактора. Один способ гарантирует, что он сделает это только для строк, начинающихся с двух пробелов (и удалит только два пробела). Другой просто выпотрошит первых двух персонажей независимо от того, что они собой представляют.
— Джейсон Даун

Вопросы по Vim не выходят за рамки темы SO (проверьте обсуждения на мета и ... SO FAQ). Более того, отступы имеют отношение к развитию ...
— Люк Эрмитт 09

Ответы:


93

Еще несколько вариантов. Вы можете решить, какой из них «самый простой».

Удалите первые 2 символа каждой строки:

:%normal 2x

Удалите первые 2 символа каждой строки, только если они пробелы:

:%s/^  /

Обратите внимание, что последняя косая черта является необязательной и находится здесь только для того, чтобы вы могли видеть два пробела. Без косой черты это всего 7 символов, включая расширение :.

Переместите отступ влево для каждой строки:

:%normal <<

11
Мне нравится, что в Vim есть 30 различных способов сделать что-то. Подобные вопросы поднимают то, о чем вы никогда не знали. Я понятия не имел о% нормальном.
— Джейсон Даун

Спасибо за разъяснения по поводу последнего рывка. Это полезно.
— ryanjdillon

1
Я добавлю, что %знак просто означает «выполнить эту команду для каждой строки в документе, а не только для текущей». Я думаю. Не могу найти много документации по этому поводу.
— Sammaron

119
  1. Войдите в режим визуального блока с помощью Ctrl-V(или, Ctrl-Qесли вы используете Ctrl-Vдля вставки);
  2. Выберите область для удаления с помощью стрелок;
  3. Затем нажмите, dчтобы удалить выбранную область.
  4. Нажмите Esc

7
ctrl-v, чтобы выбрать символы для удаления, а затем d для вырезания.
— Henrik K

2
Самый популярный ответ! :-)
— Никос Александрис

Это не работает во всех vim, которые я использую, но для тех, которые действительно работают, это очень удобно, и приятно иметь возможность визуализировать область, которую вы удаляете, прежде чем вы действительно это сделаете.
— searchchengine27

Возможно, другая привязка по умолчанию для режима визуального блока? Возможно, разница между старым дистрибутивом UNIX VI (в отличие от VIM).
— Tom Kerr

Это, наверное, самый простой и разумный ответ.
— Виллем ван

13

Вы также можете использовать поиск и замену (в редакторе ex, доступ к которому осуществляется через :символ):

Удалите первые два символа несмотря ни на что:

%s/^.\{2}//

Удалите первые два символа пробела (должны быть в начале и оба должны быть пробелами ... любая строка, не соответствующая этому критерию, будет пропущена):

%s/^\s\{2}//

2
Символ / g в конце не нужен. Вы делаете только одно совпадение в строке.
— bhinesley 05

imo, это отличное решение
— Виктория Стюарт


4

Два пробела или два символа? ( 2xделает последнее.)

:[range]s/^  //

удаляет два пробела в начале каждой строки; используйте %(эквивалент 1,$) as [range]do to this для всего файла.

:[range]s/^..//

удаляет первые два символа каждой строки, какими бы они ни были. (Обратите внимание, что он удаляет два символа , не обязательно два столбца ; символ табуляции считается как один символ).

Если на самом деле вы меняете отступ, вы можете использовать <команду, чтобы уменьшить его, или >команду, чтобы увеличить его. Установите, shiftwidthчтобы контролировать, насколько он сдвигается, например

:set shiftwidth=2

3

Я бы попробовал один из двух подходов:

  1. Выполните редактирование столбцов в удаляемом блоке Ctrl+V(часто с отображением Ctrl+Q).
  2. Запишите макрос в первой строке, используя q1(или любую другую цифру / букву, которую вы хотите обозначить регистр записи), затем воспроизведите этот макрос несколько раз, используя @1(для использования моего предыдущего примера. Еще лучше, используйте предыдущее число, чтобы указать, сколько раз для выполнения - например, 10@1для запуска этого макроса 10 раз. Однако это зависит от того, что вы записали - не забудьте перемотать курсор назад 0или опустить одну строку j, если это необходимо.

3

Я бы также добавил: узнайте, как настроить отступ для vim. Тогда простое gg=Gпоможет.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.