vimでは、~
(この質問で述べたように)1つの文字を大文字にするために使用できることは知っていますが、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
結果:
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 "()".
Vim Tips Wikiには、視覚的な選択を小文字、大文字、およびタイトル大文字に切り替えるTwiddleCaseマッピングがあります。
TwiddleCase
関数をに追加する場合は.vimrc
、目的のテキストを視覚的に選択し、チルダ文字~
を押して各ケースを循環します。
オプション1。-このマッピングはキーをマップしますq
をしてカーソル位置の文字を大文字にし、次の単語の先頭に移動します。
:map q gUlw
これを使用するには、行の先頭にカーソルを置き、q
単語ごとに1回押して、最初の文字を大文字にします。最初の文字をそのままにしておきたい場合は、w
代わりにを押して次の単語に移動します。
オプション2。-このマッピングq
は、カーソル位置で文字の大文字と小文字を反転するようにキーをマップし、次の単語の先頭に移動します。
:map q ~w
これを使用するには、q
単語ごとに1回ヒットした行の先頭にカーソルを置き、最初の文字の大文字と小文字を逆にします。最初の文字をそのままにしておきたい場合は、w
代わりにを押して次の単語に移動します。
マッピングのマッピングを解除します。-q
キーに割り当てられたマッピングをマップ解除(削除)するには:
:unmap q
qq~wq
とリプレイの@q
後に@@
?
vim-titlecase
このための非常に便利なプラグインもあります。
変更を視覚的な選択に制限するには、次のようなものを使用する必要があります。
:'<,'>s/\%V\<.\%V/\u&/g
\%V ............... see help for this