A One Liner
J'ai trouvé un simple remplacement d'expression régulière (en supposant que la «magie» est définie):
:s/ \([a-zA-Z]\)/\u\1/g
Cela correspond à n'importe quelle lettre après un espace, ce qui enregistre la lettre. Ensuite, il le remplace par la lettre enregistrée en majuscule ( \u
= majuscule, \1
= première correspondance enregistrée), pour chaque correspondance de la ligne.
Appliquer sur l'ensemble du fichier en mettant un %
entre :
et s
.
L'inconvénient de cette solution est qu'elle est linéaire (ce qui fonctionne pour vos exemples), mais serait insuffisante si vous ne vouliez que quelques mots sur chameau dans une ligne.
Une solution plus complète
map <leader>g~ :set opfunc=MyCamelCase<CR>g@
function! MyCamelCase(type, ...)
let searchsave=@/
silent s/\%>'\[ \([a-zA-Z]\)\%<']/\u\1/g
let @/=searchsave
endfunction
Cela crée un nouvel opérateur qui peut opérer sur un mouvement. Si vous avez <leader>
comme \
, puis donné le texte suivant (avec |
comme le curseur):
This is some |example text to work with.
La frappe \g~3w
donne
This is some exampleTextTo work with.
Autrement dit, nous chameau enfermé sur 3 mots.
Description de cette substitution:
s/
démarre la substitution.
\%>'\[
est un peu douloureux. Le \%>'m
dit correspondre à droite d'une marque. Nous voulons marquer [
, mais cela doit également être échappé dans ce modèle. Ainsi, cela démarre le match après le mouvement donné à l'opérateur.
\([a-zA-Z\)
est le même que celui de la doublure ci-dessus.
\%<']
c'est l'autre extrémité, correspondant avant la fin du mouvement.
/\u\1/g
est le remplacement du one-liner ci-dessus.
Pour une alternative, j'utilise le plugin vim- abolish qui offre une fonction de coercition:
la source
Vous pouvez créer une macro récursive qui le fait pour une seule ligne avec les touches suivantes:
(Notez que l'espace entre le
f
et lex
est un tapotement de la barre d'espace, pas une pause)En détail:
Effacez le registre q. Cela est nécessaire car nous créons une macro récursive. (Voir l'étape 5.):
qqq
Commencez à enregistrer une macro dans le registre q:
qq
Vous ne pouvez pas utiliser le
w
mouvement ici, car vous voulez que la macro s'arrête lorsqu'elle arrive à la fin de la ligne, plutôt que de passer à la ligne suivante. Au lieu de cela, passez au caractère d'espace suivant sur la ligne en appuyant sur laf
touche suivie de la barre d'espace:f<space>
Supprimez l'espace et en majuscule la lettre suivante:
xgUl
Recurse. Parce que nous avons effacé le
q
registre à l'étape 1, il n'y a encore rien dedans, donc cela ne fera rien:@q
Enregistrez la macro:
q
Vous pouvez ensuite appliquer cette macro à plusieurs lignes à l'aide d'une plage:
Appliquez la macro à chaque ligne du fichier:
Appliquez la macro aux lignes 2 à 5 incluses:
Effectuez une sélection visuelle, puis tapez
:normal @q
. Cela pré-remplira la ligne de commande lorsque vous appuyez sur la:
touche, ce qui entraîne une commande qui applique la macro à chaque ligne de la sélection:la source
q
registre, tout commeqq
avant de commencer l'enregistrement des frappes. En fait, c'est précisément pourquoiqqq
travaille pour effacer leq
registre :)q
registre (c'est-à-dire en utilisantqQ
), il serait probablement nécessaire de l'effacer en premier.vim -u NONE
). Le contenu existant n'est effacé que lorsque vous enregistrez le registre, à l'étape 6. Il est donc nécessaire d'effacer le registre avant de commencer si vous souhaitez recurse.Voir http://vim.wikia.com/wiki/Changing_case_with_regular_expressions Il explique les modificateurs \ U, \ L, \ u, \ l assez clairement et succinctement!
Son essence est la suivante:
Il peut arriver que vous souhaitiez parcourir un fichier et modifier la casse des caractères correspondant à certains critères arbitraires. Si vous comprenez bien les expressions régulières, vous pouvez le faire assez facilement.
C'est aussi simple que de placer \ U ou \ L devant les références arrières dont vous voulez changer la casse, et \ E à la fin. Vim rendra le texte dans la référence arrière majuscule ou minuscule (respectivement). Utilisez \ u et \ l (sans le \ E à la fin) pour simplement changer la casse du tout premier caractère dans la référence arrière.
(Une "référence arrière" est une partie d'une expression régulière qui fait référence à une partie précédente d'une expression régulière. Les références arrière les plus courantes sont &, \ 1, \ 2, \ 3, ..., \ 9).
Quelques exemples qui démontrent la puissance de cette technique:
Minuscule tout le fichier
(& est une référence pratique qui fait référence au texte complet de la correspondance.)
Majuscules tous les mots précédés d'un <(c'est-à-dire ouverture des noms de balises HTML):
Notez également les commandes gu et gU.
Par exemple, ggguG minuscule tout le fichier. (gg = aller en haut, gu = en minuscules, G = aller en EOF).
En utilisant le backref général \ 0 au lieu de ceux du nom (\ 1, \ 2 etc.), vous pouvez enregistrer une saisie pour la strophe de remplacement de l'expression régulière.
Cette expression régulière majuscule un ensemble explicite de mots en majuscules dans un fichier:
Pas de science fusée, mais sinon vous devriez faire ceci:
la source