vim: видалити перші 2 пробіли для кількох рядків


79

Який найпростіший спосіб видалити перші 2 пробіли для кожного рядка за допомогою VIM? В основному це повторення "2x" для кожного рядка.

Пояснення: тут припущення, що перші 2 символи є пробілами. Отже, питання полягає в тому, щоб зробити відступ для декількох рядків разом.


Це конкретно пробіли чи перші два символи незалежно від того, якими вони є?
— Джейсон Даун

Це перші два персонажі. Якщо припустити, що перші два символи є пробілами.
— twimo

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

Питання Vim не стосуються теми щодо SO (перегляньте обговорення щодо мета та ... FAQ щодо SO). Крім того, відступ має значення для розвитку ...
— Люк Ермітт,

Відповіді:


93

Ще кілька варіантів. Ви можете вирішити, який "найпростіший спосіб".

Видаліть перші 2 символи кожного рядка:

:%normal 2x

Видаліть перші 2 символи кожного рядка, лише якщо це пробіли:

:%s/^  /

Зверніть увагу, що остання коса риса не є обов’язковою і є лише тут, щоб ви могли бачити два пробіли. Без косої риси це лише 7 символів, включаючи :.

Переміщення відступу вліво для кожного рядка:

:%normal <<

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

Дякуємо за роз'яснення на останньому тире. Це корисно.
— ryanjdillon

1
Додам, що %знак просто означає "виконати цю команду для кожного рядка в документі, а не лише для поточного рядка". Я думаю. Не можу знайти багато документації про це.
— Саммарон

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

7
ctrl-v, щоб вибрати символи, які слід видалити, а потім d для вирізання.
— Генрік К

2
Відповідь із найкращими зірочками! :-)
— Нікос Александріс

Це працює не у всіх vim, якими я користуюся, але для тих, які він працює, це дуже зручно і приємно мати можливість візуалізувати область, яку ви видаляєте, перш ніж це зробити.
— searchengine27

Можливо, різне прив'язування за замовчуванням для режиму візуального блоку? Можливо, різниця між старішим розподілом unix VI (на відміну від VIM).
— Том Керр

Це, мабуть, найпростіша і найрозумніша відповідь.
— Віллем ван Кетвіч

13

Ви також можете використовувати пошук та заміну (у попередньому редакторі, доступ до якого здійснюється через :символ):

Видаліть перші два символи, незважаючи ні на що:

%s/^.\{2}//

Видаліть перші два пробіли (повинні бути на початку, і обидва мають бути пробілами ... будь-який рядок, що не відповідає цим критеріям, буде пропущено):

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

2
Значення / g в кінці зайве. Ви робите лише один збіг на рядок.
— bhinesley

imo це чудове рішення
— Вікторія Стюарт


4

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

:[range]s/^  //

видаляє дві пробіли на початку кожного рядка; використовувати %(еквівалентно 1,$), як [range]це робити для всього файлу.

:[range]s/^..//

видаляє перші два символи кожного рядка, якими б вони не були. (Зверніть увагу, що він видаляє два символи , не обов’язково два стовпці ; символ табуляції вважається одним символом).

Якщо ви насправді змінюєте відступ, ви можете скористатися <командою, щоб зменшити його, або >командою, щоб збільшити його. Встановіть shiftwidthдля контролю, наскільки він зміщується, наприклад

:set shiftwidth=2

3

Я спробував би один із двох підходів:

  1. Виконайте редагування стовпців на блоці для видалення за допомогою Ctrl+V(часто відображається Ctrl+Q).
  2. Запишіть макрос у першому рядку, використовуючи q1(або будь-яку іншу цифру / букву, яку потрібно позначити регістр запису), а потім повторіть цей макрос кілька разів, використовуючи @1(щоб використати мій попередній приклад. Ще краще, використовуйте попереднє число, щоб сказати, скільки times to run - 10@1щоб запустити цей макрос, наприклад, 10 разів. Це, однак, залежить від того, що ви записали - переконайтеся, що курсор перемотано назад 0або опустите один рядок j, якщо це важливо.

3

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.