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.