Я знаю, что в vim мы можем использовать ~
один символ для заглавной буквы (как упоминалось в этом вопросе ), но есть ли способ сделать первую букву каждого слова в выделенном фрагменте заглавной с помощью vim?
Например, если я хочу изменить с
hello world from stackoverflow
к
Hello World From Stackoverflow
Как мне это сделать в vim?
Ответы:
Вы можете использовать следующую замену:
s/\<./\u&/g
\<
соответствует началу слова.
соответствует первому символу слова\u
сообщает Vim о необходимости прописать следующий символ в строке подстановки(&)
&
означает заменить все, что было найдено на LHSисточник
%s/\<./\u&/g
: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
Результат:
Альтернатива самому волшебному режиму:
: % s/\<\(.\)\(\w*\)/\u\1\L\2/g # Each capture group requires a backslash to enable their meta # character meaning i.e. "\(\)" verses "()".
источник
Vim Tips Wiki имеет отображение TwiddleCase, которое переключает визуальное выделение на нижний регистр, ВЕРХНИЙ регистр и регистр заголовков.
Если вы добавляете
TwiddleCase
функцию в свой.vimrc
, то вы просто визуально выбираете нужный текст и нажимаете символ тильды,~
чтобы перебирать каждый регистр.источник
Попробуйте это регулярное выражение ..
источник
&
но он не работает, если ваша строковая строка имеет смешанный регистр для начала или все в верхнем регистре для начала.Вариант 1. - Это сопоставление сопоставляет клавишу
q
с заглавной буквой в позиции курсора, а затем она перемещается в начало следующего слова:: map q gUlw
Чтобы использовать это, поместите курсор в начало строки и нажмите
q
один раз для каждого слова, чтобы сделать первую букву заглавной. Если вы хотите оставить первую букву такой, какая она есть,w
вместо этого нажмите, чтобы перейти к следующему слову.Вариант 2. - Это сопоставление отображает клавишу,
q
чтобы инвертировать регистр буквы в позиции курсора, а затем он перемещается в начало следующего слова::map q ~w
Чтобы использовать это, поместите курсор в начало строки, нажимая
q
один раз для каждого слова, чтобы инвертировать регистр первой буквы. Если вы хотите оставить первую букву такой, какая она есть,w
вместо этого нажмите, чтобы перейти к следующему слову.Отключить отображение. - Чтобы отменить отображение (удалить) сопоставление, назначенное
q
клавише::unmap q
источник
qq~wq
и воспроизвести с@q
последующим@@
?Для этого также есть очень полезный
vim-titlecase
плагин.источник
Чтобы ограничить модификацию визуальным выбором, мы должны использовать что-то вроде:
:'<,'>s/\%V\<.\%V/\u&/g \%V ............... see help for this
источник