Изменить следующие N символов в VIM - PullRequest
57 голосов
/ 30 августа 2011

Скажите, у меня есть следующая строка:

|add_test()          (| == cursor position)

И хотите заменить 'add' на 'del'.

del|_test()

Я могу либо нажать X три раза, а затем нажать i, чтобы вставить, и набрать del. То, что я хочу, это что-то вроде 3c или 3r, чтобы перезаписать всего 3 символа. Оба из них не делают то, что я хочу, 3c перезаписывает 3 символа с тем же персонаж, 3r делает несколько других вещей.

Есть ли простой способ сделать это без ручного сини и вставки текста?

Ответы [ 7 ]

91 голосов
/ 30 августа 2011

3s, «заменить 3 символа» - то же самое, что и c3l. 3cl и c3l должны быть одинаковыми, я не знаю, почему вы увидите повторение одного и того же символа. Я также фанат использования t, например ct_ Как уже упоминалось в другом постере, мне не нужно считать символы, и я могу просто напечатать "del".

Я боролся с «заменить пару символов» в течение нескольких дней; 'r' отлично подходит для одиночных символов, R отлично подходит для строки соответствующей длины, но я хотел что-то вроде того, что запрашивает OP. Итак, я набрал :help x и некоторое время читал, оказалось, что описание s и S - это всего лишь пара страниц по сравнению с x.

Другими словами, :help ваш друг. Читайте и учитесь.

23 голосов
/ 30 августа 2011

Используйте c {движение} команда:

  1. cf_ - изменить до первого '_' (включая);
  2. ct_ - заменить на первое '_' (исключая);
  3. cw - изменить первое слово;

Слово определяется переменной iskeyword . Проверьте это с помощью : установить iskeyword? и удалить любое '_', например : установить iskeyword = @, 48-57,192-255 Кстати, см. : помощь c и : помощь движению , если вы хотите больше.

7 голосов
/ 30 августа 2011

Я думаю 3cl это то, что вы хотите. Это меняет 3 символа вправо. Я бы набрал ct_del<esc>, но это не то, что вы спросили

5 голосов
/ 30 августа 2011

c3 ('c', '3', пробел), затем введите символы, которые вы хотите вставить. (Или вы можете использовать стрелку вправо или l вместо пробела.)

Или, как только что сказал @Mike в комментарии, Control-R R работает хорошо, если количество символов совпадает с количеством удаляемых символов.

или ct_ для перехода от курсора к следующему _ символу.

3 голосов
/ 30 августа 2011

Если работы имеют одинаковую длину, вы можете использовать команду R, которая заменяет то, что у вас было ранее, тем, что вы печатаете.

1 голос
/ 18 августа 2018

Другие ответы приведены с использованием номеров. Когда текст длиннее, легче не считать. Например, я часто делаю заголовки в файлах уценки, например:

Some super duper long title that I don't want to have to count

удвоить линию с yy pp

Some super duper long title that I don't want to have to count Some super duper long title that I don't want to have to count

Подсвечивает всю строку с V затем используйте r{char} или в этом случае r=, чтобы получить:

Some super duper long title that I don't want to have to count ============================================================== (Я добавил пробел выше, чтобы отключить форматирование уценки переполнения стека)

0 голосов
/ 01 июня 2019

'c3h' вернет 3 символа и перейдет в режим вставки, затем введите ваш 'del'

...