Как преобразовать весь текст в нижний регистр в Vim

211

Как конвертировать весь текст в Vim в нижний регистр? Это вообще возможно?

ksuralta
источник
У нас много HTML-страниц со всеми символами в верхнем регистре. Это экономит мое время, печатая все в нижнем регистре.
Ксуралта
2
Прежде чем редактировать вопрос, нужно было конвертировать весь текст в vim в маленькие заглавные буквы. Очевидно, есть вариант использования для преобразования текста в нижний регистр.
лимонад
6
На сайте VIM есть ответ: vim.wikia.com/wiki/Switching_case_of_characters Спасибо.
2012 г.

Ответы:

122
  1. Если вы действительно имеете в виду маленькие заглавные буквы , то нет, это невозможно - точно так же, как невозможно преобразовать текст в жирный или курсив в любом текстовом редакторе (в отличие от текстового процессора ). Если вы хотите преобразовать текст в нижний регистр, создайте визуальный блок и нажмите u(или Uдля преобразования в верхний регистр). Tilde ( ~) в командном режиме меняет регистр символа под курсором.

  2. Если вы хотите, чтобы весь текст в Vim отображался маленькими буквами, вы можете посмотреть на эту guifontопцию или ввести, :set guifont=*поддерживает ли ваш аромат Vim средство выбора шрифтов GUI.

Zoul
источник
33
Я думаю, что стоит упомянуть, что вам не обязательно создавать визуальный блок для строчных букв блока текста. guuснизит строчку и gu[motion]уменьшит значение текста этого движения. Точно так же gUUи gU[motion]работают так же, только для прописных.
Захари Мюррей
1
На самом деле, маленькие буквы также возможны для большинства букв, используя ᴀʙcᴅᴇꜰɢʜıᴊᴋʟᴍɴoᴘʀsᴛᴜvwxʏz.
геррит
1
Это всего лишь взлом. Они не предназначены для использования в качестве обычных маленьких заглавных букв и не очень хорошо поддерживаются шрифтами. (На моем настольном компьютере F странно рендерится, на моем телефоне он вообще не рендерит, чтобы привести пример.) В любом случае, интересная часть Unicode, спасибо!
zoul
2
Этот ответ неверен. user80168 имеет правильный ответ.
Уэйн Воркман
401

Я полагаю, вы хотите, чтобы текст в нижнем регистре. Решение довольно простое:

ggVGu

Объяснение:

  1. gg - переходит к первой строке текста
  2. V - включает визуальный выбор в режиме линии
  3. G - идет в конец файла (на данный момент у вас выделен весь текст)
  4. u - строчная выделенная область
Дейв Джарвис
источник
88
или ggguG, если вы хотите сделать это без визуального выбора. : help gu
DrAl
18
используйте заглавные Uбуквы (например ggVGU)
Натан Уоллес
42

Похоже на решение Мангледорфа, но короче и дружелюбнее

:%s/.*/\L&/g

tarkeshwar
источник
3
:%s/.*/\L&было бы достаточно (не нужен gфлаг, так как .*выделяет всю строку)
Гордон Густафсон
1
Как и было бы :%s/./\L&/g, поскольку / g / обозначает глобальную для строки операцию. Что получает меня, тем не менее, это &. Почему это необходимо?
Брэден Бест
1
&означает здесь what was matched by the pattern, так что это можно понять следующим образом: заменить .*на \Lowercase(what was matched by the pattern). Обратите внимание, что сопоставление .глобально медленнее, чем сопоставление.*
Camusensei
39

используйте эту опцию командного режима

ggguG


gg - Goto the first line 
g  - start to converting from current line    
u  - Convert into lower case for all characters
G  - To end of the file.
Каланидхи
источник
27

Множество способов снять шкуру с кошки ... вот способ, о котором я только что писал :


:%s/[A-Z]/\L&/g

Аналогично для заглавных букв:


:%s/[a-z]/\U&/g

Я предпочитаю этот способ, потому что я использую эту конструкцию ( :%s/[pattern]/replace/g) все время, так что это более естественно.

Алек Якобсон
источник
Я думаю, что в последнем примере есть опечатка («аналогично для верхнего регистра») - регулярное выражение должно измениться на [az], а не на [AZ].
monojohnny
1
:%s/./\U&/gтоже работает. Оказывается, он игнорирует цифры и не алфавитные символы. Что получает меня, так это &. Почему \ U (или \ L) само по себе недостаточно? Можем ли мы получить объяснение этому?
Брэден Бест
2
&является заменой для согласованной строки. Таким образом, \U&заглавная строка соответствует заглавной, чтобы ее можно было использовать для замены.
Алек Джейкобсон,
22
  • Переключите случай «HellO» в «HELLo» с помощью g ~, затем движения.
  • Прописные буквы от «HellO» до «HELLO» с gU, затем движение.
  • Строчные "HellO" в "привет" с гу, затем движение.

Для примеров и дополнительной информации, пожалуйста, прочитайте это: http://vim.wikia.com/wiki/Switching_case_of_characters

Адольфо Абегг
источник
Я полагаю, что нет, но в ответе @mangledorf есть команда подстановки, которая менее интуитивно понятна, заменив нужные символы на escape-последовательность "\ L &" для строчных букв и "\ U &" для прописных. Что получает меня, так это &. \ L и \ U имеют смысл, но зачем это &нужно?
Брэден Бест
9

использование ggguG

GG: идет к первой строке. gu: изменить на строчные. G: идет к последней строке.

Ziyadsk
источник
Чем это отличается от ответа Каланидхи?
MSeifert
Проголосовал, чтобы довести это до 0, что является адекватным баллом за ответ, который является копией предыдущего. @MSeifert Отрицательные оценки должны быть зарезервированы для неправильных / вредных решений
Титу
7

Обычно Vu(или VUв верхнем регистре) достаточно, чтобы превратить всю строку в строчную, так как Vуже выбирается вся строка, к которой применяется действие.

Tilda ( ~) изменяет регистр отдельных букв , что приводит к регистру верблюдов или тому подобному.

Действительно здорово, что у Vim есть много разных режимов, чтобы иметь дело с различными случаями, и как эти режимы аккуратно организованы.

Например, v- истинный визуальный режим и связанные с ним V- визуальные линии и Ctrl+ Q- режимы визуальных блоков (что позволяет выбирать блоки, отличная особенность, которую некоторые другие продвинутые редакторы также обычно предлагают, удерживая Altклавишу и выбирая текст).


источник
6

Если вы работаете под ароматом Unix

:0,$!tr "[A-Z]" "[a-z]"
ojblass
источник
4
Квадратные скобки лишние, и как только вы их удалите, кавычки также не нужны. :%!tr A-Z a-z
Эфимент
!Показывает внешнюю команду оболочки, так что $ man tr(в отличие от :help tr) , показывает , что trдля translate.
Брэден Бест
Просто по-другому::%0,$!tr [:upper:] [:lower:]
Альбертовар
2

У меня была похожая проблема, и я хотел ее использовать ":%s/old/new/g", но в итоге использовал две команды:

:0
gu:$
shaolinux
источник