Як перетворити весь текст у Vim у малі регістри? Чи можливо це навіть?
Як перетворити весь текст у Vim у малі регістри? Чи можливо це навіть?
Відповіді:
Якщо ви дійсно маєте на увазі маленькі літери , то ні, це неможливо - так само, як не можна перетворити текст у жирний або курсивний текст у будь-якому текстовому редакторі (на відміну від текстового редактора ). Якщо ви хочете перетворити текст у малі регістри, створіть візуальний блок і натисніть u
(або U
для перетворення у великі регістри ). Tilde ( ~
) в командному режимі повертає регістр символу під курсором.
Якщо ви хочете побачити увесь текст у Vim малими літерами, ви можете переглянути guifont
варіант або ввести, :set guifont=*
чи ваш аромат Vim підтримує інструмент вибору шрифту GUI.
guu
зменшить рядки рядка та gu[motion]
зменшить малі значення цього руху. Так само gUU
і gU[motion]
працюйте так само, лише для великих літер.
Я припускаю, що ви хочете з малого тексту. Рішення досить просте:
ggVGu
Пояснення:
U
для великих літер (наприклад ggVGU
)
Схожий на рішення Мангледорфа, але коротший і нехитрий
:%s/.*/\L&/g
:%s/.*/\L&
Було б достатньо ( g
прапор не потрібен, оскільки .*
виділяється весь рядок)
:%s/./\L&/g
, оскільки / g / позначає операцію, яка є глобальною для лінії. Що мене, однак, це &
. Чому це потрібно?
&
стоїть тут what was matched by the pattern
, тому його можна зрозуміти так: замінити .*
на \Lowercase(what was matched by the pattern)
. Зауважте, що узгодження у .
глобальному масштабі відбувається повільніше, ніж збіг.*
Багато способів зняти шкіру з котом ... ось як я нещодавно опублікував :
:%s/[A-Z]/\L&/g
Аналогічно для верхнього регістру:
:%s/[a-z]/\U&/g
Я вважаю за краще цей спосіб, тому що я :%s/[pattern]/replace/g
весь час використовую цю конструкцію ( ), щоб це було природніше.
:%s/./\U&/g
також працює. Виявляється, вона ігнорує числа та символи, що не містять алфавіту. Що мене отримує - це &
. Чому саме \ U (або \ L) недостатньо? Чи можемо ми отримати пояснення для цього?
&
є резервним для відповідного рядка. Таким чином, з \U&
великої літери використовується відповідна рядок, щоб вона могла бути використана для заміни.
Для прикладів та додаткової інформації читайте це: http://vim.wikia.com/wiki/Switching_case_of_characters
&
. \ L і \ U мають ідеальний сенс, але навіщо це &
потрібно?
використання ggguG
gg: переходить до першого рядка. gu: змінити на малі. Г: переходить до останнього рядка.
Зазвичай Vu(або VUу верхньому регістрі) достатньо, щоб перетворити всю лінійку в малі регістри, оскільки Vвже вибрано всю лінію для застосування дії проти.
Тільда ( ~) змінює регістр окремої букви , внаслідок чого йде справа з верблюдом або подібне.
Це дійсно чудово, як Vim має багато різних режимів для вирішення різних випадків і як ці режими чітко організовані.
Наприклад, v- справжній візуальний режим і пов'язаний з ним Vвізуальний рядок та Ctrl+ Q- режими візуального блоку (що дозволяє вибирати блоки, чудова функція, яку зазвичай пропонують деякі інші розширені редактори, утримуючи Altклавішу та підбираючи текст).
Якщо ви працюєте під ароматом Unix
:0,$!tr "[A-Z]" "[a-z]"
:%!tr A-Z a-z
!
Показує зовнішню команду оболонки, так що $ man tr
(на відміну від :help tr
) , показує , що tr
для translate
.
:%0,$!tr [:upper:] [:lower:]