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


211

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


У нас много 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.


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


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: идет к последней строке.


Чем это отличается от ответа Каланидхи?
MSeifert

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

7

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

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

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

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


6

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

:0,$!tr "[A-Z]" "[a-z]"

4
Квадратные скобки лишние, и как только вы их удалите, кавычки также не нужны. :%!tr A-Z a-z
Эфимент

!Показывает внешнюю команду оболочки, так что $ man tr(в отличие от :help tr) , показывает , что trдля translate.
Брэден Бест

Просто по-другому::%0,$!tr [:upper:] [:lower:]
Альбертовар

2

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

:0
gu:$
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.