Как изменить первые два символа верхнего регистра в каждой строке на строчные в Vim?

#text #full-text-search #text-editor #vim

#текст #полнотекстовый поиск #текстовый редактор #vim

Вопрос:

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

 HELLO TO STACKOVERFLOW
WELCOME TO STACKOVERFLOW
  

Я хочу, чтобы текст был изменен следующим образом:

 heLLO TO STACKOVERFLOW
weLCOME TO STACKOVERFLOW
  

Как я могу это сделать в Vim?

Ответ №1:

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

введите описание изображения здесь

Введите gu или u для уменьшения выделенного текста, gU или U для увеличения.

введите описание изображения здесь

Комментарии:

1. или ~ инвертировать регистр. Будьте осторожны при отправке скриншотов, ваше окно полупрозрачно, будьте особенно осторожны, если у вас есть разумные данные (здесь не беспокойтесь)

2. @Benoit Да, я буду, но мне нечего скрывать 🙂 Спасибо за редактирование и ~ совет.

3. 1 для тех, кто еще использует VsVim в Visual Studio, ~ трюк работает ( gu и gU не сработал для меня).

Ответ №2:

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

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

 :%normal 0gu2l
  

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

 :4,5normal 0gu2l
  

Комментарии:

1. 1, вы также можете указать столбцы, с которыми хотите работать. :%normal 15|gu3l будут уменьшены столбцы с 15 по 17 для всех строк.

Ответ №3:

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

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

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

Комментарии:

1. Хорошее объяснение 'startofline' и использование 'tildeop'

Ответ №4:

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

 :%s/^../Lamp;E/
  

см . :help sub-replace-special

Ответ №5:

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

 :%s/.*</Lamp;
  

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