как заменить первые два заглавных символа на строчные в каждой строке в vim - PullRequest
3 голосов
/ 05 октября 2011

У меня есть следующий текст

HELLO TO STACKOVERFLOW
WELCOME TO STACKOVERFLOW

Я хочу, чтобы текст был таким

heLLO TO STACKOVERFLOW
weLCOME TO STACKOVERFLOW

Ответы [ 5 ]

15 голосов
/ 05 октября 2011

Выделите визуальный блок для первых двух столбцов с помощью CTRL - V

enter image description here

Введите gu или u, чтобы выделить выбранный текст, gU или U, чтобы выделить.

enter image description here

9 голосов
/ 05 октября 2011

Хотя @Jin предоставил хороший ответ для интерактивного использования, вот способ сделать это в сценариях:

для запуска каждой строки буфера:

:%normal 0gu2l

или вы можете указать диапазон строк, где применить команду. Это будет применяться для строк 4 и 5:

:4,5normal 0gu2l
5 голосов
/ 05 октября 2011

В обычном режиме:

  • , если установлено startofline (:verb set sol? сообщит вам), вы можете использовать: lgu CTRL-V G.
    Подробно:
    • l идет к следующему символу
    • gu является оператором make lowercase, ожидающим движение
    • CTRL-V указывает, что движениеблочно
    • G переходит к первому столбцу последней строки.
  • , если startofline не задано, то gu CTRL-V Gl. (l переходит к следующему символу, а . повторяет ту же команду).

Для перехода в верхний регистр изменения gu с помощью gU, для переключения регистраустановите tildeop и используйте вместо него ~.

2 голосов
/ 05 октября 2011

В дополнение к ответам @Benoit, @Jin и @progo:

:%s/^../\L&\E/

см. :help sub-replace-special

1 голос
/ 06 октября 2011

Вы можете использовать подстановку

:%s/.*\%3c/\L&

, которая использует \%c атом шаблона поиска, соответствующий определенному столбцу.Используя этот атом, вы можете легко настроить шаблон так, чтобы он соответствовал любому количеству первых символов в строке.

...