Удалить пробел для набора строк в редакторе Vim


12

У меня есть текст, подобный следующему в файле:

  sample text
    some random text
            even more random text
text with no indent
 worst indention

Мне нужно удалить пустое пространство перед каждой из строк. Для одной строки я делаю 0dw

Я могу повторить ту же команду, используя. но вручную переходя к следующим строкам.

Но есть ли способ применить '0dw' к этому блоку линий?

Я предполагаю, что есть способ использовать макросы, но я не использовал их раньше. Но я готов выучить их, если нет другого выбора.


+1 хороший вопрос, в итоге я делаю одно и то же. И добро пожаловать на сайт.
Сардатрион - против злоупотребления SE

Ответы:


10
:%s/^\s\+
" Same thing (:le = :left = left-align given range):
:%le

Узнайте больше здесь на http://vim.wikia.com/wiki/Remove_unwanted_spaces

Если вы хотите сделать это для определенного диапазона строк:

:19,25s/^\s\+//

Кстати, лучший способ начать изучение vim - это выполнить vimtutorкоманду, она научит вас использовать Vim в редакторе Vim.


1
: le было круто и большое спасибо за альтернативы и ссылку :)
saiy2k

3
+1 за упоминание vimtutor, а также хороший ответ.
Сардатрион - против злоупотребления SE

1
Выберите соответствующие строки, используя Vи перемещая курсор, чтобы расширить выбор линий. Затем нажмите :для автоматического входа '<,'>, и с этого момента вы можете использовать регулярное выражение Nikhil.
UncleZeiv

1
Другой способ сделать диапазон строк (поскольку я всегда забываю номера строк) - пометить 2 строки и воздействовать на них. Например, перейдите к строке 19 и нажмите «ma», перейдите к строке 25 и нажмите «mb», затем сделайте :'a,'bs/^\s\+//.
Патрик

7

Альтернативный способ сделать это - использовать инструменты отступов VIM (обычно связанные с </ >). Для начала вам нужен способ указать, какие строки будут затронуты. Вы можете использовать режим визуального выбора или любое другое средство задания диапазона линий, на которые нужно воздействовать, а затем использовать произвольно большое число или уровни отступов для удаления. 9<обычно делает довольно неплохо, чтобы удалить как минимум 9 уровней возможных отступов (табуляции / пробелов) из текущей строки (строк).


3

У меня есть подход, чтобы сделать это в следующих простых шагах:

1. press `v` to go to visual selection mode
2. select the lines you want to affect
3. :'<,'>normal 0dw

Объяснение третьего шага:

0 Переходит к началу строки.

dw удаляет слово (пробелы).

normalприменяет команду 0dw.

'<,'> повторяет нормальное для всех выбранных линий в визуальном режиме.


1

ctrl+vпозволяет делать что-то похожее на то, что вы хотите, но не совсем так. Вы можете выбрать визуальный блок и применить одну команду к лоту.


2
я выбрал эти строки в блочном режиме, и эта команда работала:: <, '> обычный 0dw
saiy2k

1
@ saiy2k :normal- это важная вещь здесь, и я думаю, что это лучший ответ здесь. Не могли бы вы опубликовать это как ответ?
Жиль "ТАК - перестань быть злым"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.