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

12

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

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

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

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

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

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

saiy2k
источник
+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.

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

saiy2k
источник
1

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

Сардатрион - против злоупотребления SE
источник
2
я выбрал эти строки в блочном режиме, и эта команда работала:: <, '> обычный 0dw
saiy2k
1
@ saiy2k :normal- это важная вещь здесь, и я думаю, что это лучший ответ здесь. Не могли бы вы опубликовать это как ответ?
Жиль "ТАК - перестань быть злым"