En vim, sé que podemos usar ~
para poner en mayúscula un solo carácter (como se menciona en esta pregunta ), pero ¿hay alguna manera de poner en mayúscula la primera letra de cada palabra en una selección usando vim?
Por ejemplo, si quisiera cambiar de
hello world from stackoverflow
a
Hello World From Stackoverflow
¿Cómo debo hacerlo en vim?
Respuestas:
Puede utilizar la siguiente sustitución:
s/\<./\u&/g
\<
coincide con el comienzo de una palabra.
coincide con el primer carácter de una palabra\u
le dice a Vim que ponga en mayúsculas el siguiente carácter en la cadena de sustitución(&)
&
significa sustituir lo que se haya emparejado en el LHSfuente
%s/\<./\u&/g
:help case
dice:To turn one line into title caps, make every first letter of a word uppercase: > : s/\v<(.)(\w*)/\u\1\L\2/g
Explicación:
: # 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.
La parte del patrón tiene este significado.
\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_].
El resultado o parte de reemplazo tiene este significado:
\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
Resultado:
Una alternativa al modo muy mágico:
: % s/\<\(.\)\(\w*\)/\u\1\L\2/g # Each capture group requires a backslash to enable their meta # character meaning i.e. "\(\)" verses "()".
fuente
Vim Tips Wiki tiene un mapeo TwiddleCase que cambia la selección visual a minúsculas, MAYÚSCULAS y mayúsculas.
Si agrega la
TwiddleCase
función a su.vimrc
, simplemente seleccione visualmente el texto deseado y presione el carácter de tilde~
para recorrer cada caso.fuente
Prueba esta expresión regular ...
fuente
&
pero no funciona si su cadena de cadena es una combinación de mayúsculas para comenzar o todas en mayúsculas para comenzar.Opción 1. - Este mapeo mapea la tecla
q
para poner en mayúscula la letra en la posición del cursor, y luego se mueve al comienzo de la siguiente palabra:: mapa q gUlw
Para usar esto, coloque el cursor al principio de la línea y presione
q
una vez para cada palabra para poner en mayúscula la primera letra. Si desea dejar la primera letra como está, presione en suw
lugar para pasar a la siguiente palabra.Opción 2. - Esta asignación asigna la clave
q
para invertir el caso de la letra en la posición del cursor, y luego se mueve al comienzo de la siguiente palabra::map q ~w
Para usar esto, coloque el cursor al comienzo de la línea y presione
q
una vez por cada palabra para invertir el caso de la primera letra. Si desea dejar la primera letra como está, presione en suw
lugar para pasar a la siguiente palabra.Desmapear mapeo. - Para desasignar (eliminar) el mapeo asignado a la
q
tecla::unmap q
fuente
qq~wq
y reproducir@q
seguido de@@
?También existe el
vim-titlecase
complemento muy útil para esto.fuente
Para restringir la modificación a la selección visual tenemos que usar algo como:
:'<,'>s/\%V\<.\%V/\u&/g \%V ............... see help for this
fuente