Как заблокировать заменить код в визуальном режиме?

26

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

a) item 1
b) item 2
c) item 3

Какой самый быстрый способ сделать это:

* item 1
* item 2
* item 3

У меня есть подход с визуальным режимом (Ctr-v, jjj, но нужно сделать две команды замены. Iirc, эту замену можно сделать с помощью 1 команды)

poseid
источник
1
Как .,.+2s/^../*/(или эквивалентно в визуальном отборе)? Почему две команды заменяют? 2cзаменит два символа.
Муру
иногда изменяется только первая строка визуального выделения, затем повторяется с. для других строк все портит.
Посейд
2
@poseid Вы привыкли нажимать Ctrl-Cвместо Esc? Это предотвращает, среди прочего, изменения, применяемые к каждой строке выбора визуального блока.
Tommcdo
это может быть главной причиной путаницы! Благодарность!
Посейд

Ответы:

26

Выбор визуального блока:

<C-v>
jjl
c*
<Esc>

:normal:

:,+2norm! cE*

Замена:

:,+2s/^.\{2}/*

Точечная формула:

cE*<Esc>
j.
j.
romainl
источник
1
Сумасшедший подход: с помощью textobj-word-column.vim вы можете сделать ciC*<esc>и быть сделано. Примечание: этот плагин является плагином "делай то, что я имею в виду", поэтому он не работает в неожиданных местах и ​​путях, но плагин все еще полезен в некоторых простых случаях, подобных этому.
Питер Ринкер
интересна нормальная и точечная формула!
Посейд
3
Обратите внимание, что для решения Visual-block вы увидите только текст, набираемый в первой строке. Как только вы нажмете <Esc>, он заполнит оставшиеся строки.
Tommcdo
Какие-нибудь предложения для способа помнить, что c заменит? Например, как Ctrl + D (собственный)
Джордан Маки
2
@JordanMackie cдля "изменения".
Ромен
17

Вот более эффективный способ сделать это:

  1. Поместив курсор на первый элемент и 1-ю букву ( 0), войдите в «блочный» визуальный режим Ctrl+ vи выберите 1-й столбец текущего абзаца с помощью }(если ваш список заканчивается новой строкой), в противном случае используйте другие методы, такие как клавиши со стрелками (для перемещения вокруг выбора), или поиск шаблона, /c)где cваш последний элемент).
  2. Перейдите к последнему символу вашего списка с помощью kи l(или с помощью клавиш со стрелками ), чтобы выбрать два столбца, которые вы хотите изменить.
  3. Измените выделенный текст, нажав cи введите символ маркера ( *) и завершите, нажав Esc.

Работает более эффективно, особенно в длинных списках.

kenorb
источник