Заглавная буква каждого слова в выборе с помощью vim
В vim, я знаю, мы можем использовать ~
для использования одного char (как упоминалось в этом вопросе), но есть ли способ капитализировать первая буква каждого слова в выборе с помощью vim?
Например, если я хочу изменить
hello world from stackoverflow
к
hello world from stackoverflow
Как мне это сделать в vim?
Ответы
Ответ 1
Вы можете использовать следующую подстановку:
s/\<./\u&/g
-
\<
соответствует началу слова
-
.
соответствует первому символу слова
-
\u
сообщает Vim о нижнем регистре следующего символа в строке подстановки (&)
-
&
означает замену того, что соответствовало LHS
Ответ 2
:help case
говорит:
To turn one line into title caps, make every first letter of a word
uppercase: >
: s/\v<(.)(\w*)/\u\1\L\2/g
Пояснение:
: # Enter ex command line mode.
space # The space after the colon means that there is no
# address range i.e. line,line or % for entire
# file.
s/pattern/result/g # The overall search and replace command uses
# forward slashes. The g means to apply the
# change to every thing on the line. If there
# g is missing, then change just the first match
# is changed.
Эта часть шаблона имеет этот смысл.
\v # Means to enter very magic mode.
< # Find the beginning of a word boundary.
(.) # The first () construct is a capture group.
# Inside the () a single ., dot, means match any
# character.
(\w*) # The second () capture group contains \w*. This
# means find one or more word caracters. \w* is
# shorthand for [a-zA-Z0-9_].
Результат или часть замены имеет это значение:
\u # Means to uppercase the following character.
\1 # Each () capture group is assigned a number
# from 1 to 9. \1 or back slash one says use what
# I captured in the first capture group.
\L # Means to lowercase all the following characters.
\2 # Use the second capture group
Результат:
ROPER STATE PARK
Roper State Park
Альтернативой очень волшебному режиму:
: % s/\<\(.\)\(\w*\)/\u\1\L\2/g
# Each capture group requires a backslash to enable their meta
# character meaning i.e. "\(\)" verses "()".
Ответ 3
Wim Tips Wiki имеет отображение TwiddleCase, которое переключает визуальный выбор на нижний регистр, верхний регистр и заголовок.
Если вы добавили функцию TwiddleCase
к вашему .vimrc
, тогда вы просто визуально выбираете нужный текст и нажимаете символ тильды ~
для циклического перехода по каждому случаю.
Ответ 4
Попробуйте это регулярное выражение..
s/ \w/ \u&/g
Ответ 5
Существует также очень полезный vim-titlecase
плагин для этого.