11
votes

Commande d'entourer un personnage avec des espaces dans Vim

J'essaie d'utiliser Vim correctement - pour m'aider que j'ai mappé mes touches fléchées de "" afin que je suis obligé d'utiliser {hjlk} pour se déplacer.

Cela me cause un problème lorsque je veux juste entourer un caractère avec des espaces, par exemple:

"2 + 3" est mieux formaté "2 + 3"

Auparavant, j'aurais placé mon curseur sur + et dactylographié:

i [espace] [arrow-droite] [Espace] [Echap]

C'est 5 presses.

Pour ce faire sans la flèche, je semble avoir besoin de mettre le curseur sur + et d'aller:

i [espace] [Esc] lli [espace] [Echap]

C'est 8 presses.

Je peux convertir "LI" en un "A" qui la réduit à 7 presses:

i [espace] [Esc] la [Espace] [Echap]

Un bref écrit d'écriture dans une macro est une meilleure façon de le faire? Existe-t-il une commande magique Vim qui me permettra de le faire en moins de 5 presses - et d'une manière de le généraliser afin que je puisse le faire à des mots ou symboles entiers, par exemple si je veux convertir 3 == 4 à 3 == 4?


3 commentaires

Juste curieux, comment avez-vous mappé vos flèches sur ""?


Pour six coups de frappe, vous pouvez faire i [espace] [Esc] el. mais il y a toujours probablement des moyens plus rapides que cela, donc cela étant un commentaire et non une réponse :)


Casey: Pour cartographier les touches fléchées, dans votre ~ / .vimrc: carte "" [nouvelle ligne] map <"[nouvelle ligne] carte " "[nouvelle ligne]" "(Désolé - Je ne peux pas mettre de nouvelles lignes dans les commentaires!)


9 Réponses :


5
votes

La première chose qui saute à l'esprit après avoir lu le titre est surround.viM qui est un excellent script pour faire toutes sortes de choses utiles le long des lignes de ce que vous avez décrit.

Pour résoudre votre problème spécifique, je voudrais probablement positionner le curseur sur le + et:

s [espace] + [Espace] [Echap]

Pour changer 3 == 4 en 3 == 4, je pourrais positionner le curseur sur le premier =, et:

i [espace] [Echap] ww.


1 commentaires

J'aime cette deuxième solution de la vôtre car elle semble fonctionner sur n'importe quel jeton. Plus le double w est plus facile à taper que deux touches différentes.



17
votes

Personnellement, je pense qu'il a le plus de sens de détruire ce que vous voulez entourer, puis de le repousser.

s [space] [space] ESC P


1 commentaires

Nice - je m'habitue toujours au fait que la suppression des choses les met dans la tampon de pâte. Et j'utilise VI depuis 10 ans ... C'est pourquoi je me forise à l'apprendre correctement! Sed est la prochaine ...



1
votes

Essayez de positionnez votre curseur sur le '+' et en tapant ceci:

q1i [espace] [flèche droite] [espace] [flèche gauche] [Echaw] q

Cela enregistrera une macro rapide dans la fente 1 que vous pouvez réutiliser chaque fois que vous en avez envie, cela entourera le caractère sous le curseur avec des espaces. Vous pouvez le rappeler avec @ 1 .

Il y a aussi le plus polyvalent:

q1ea [espace] [ESC] bi [espace] [flèche droite] [Echaw] q

qui entourera le mot sous le curseur ("=" compte comme un mot) avec des espaces lorsque vous appuyez sur @ 1 .


1 commentaires

Comme je l'ai dit, je sais que je pouvais le faire avec une macro peut le faire, mais je me demandais s'il y avait un commandement intelligent que je ne connaissais pas!



1
votes

Vous pouvez créer une macro avec l'une des actions décrites et l'appeler à chaque fois que vous en avez besoin (comme l'amphétamachine proposée pendant que j'écris) ou que vous pourriez simplement rechercher et remplacer:

:%s/\d\@<=+\|-\d\@=/ \0 /g


0 commentaires

1
votes

Vous pouvez configurer un mappage comme celui-ci (appuyez sur Entrée en mode Visual pour envelopper les espaces):

:vnoremap <CR> <ESC>`<i<SPACE><ESC>`>la<SPACE><ESC>h


0 commentaires

3
votes

Hah! J'ai essayé de comprendre comment entourer un bloc dans des espaces pendant un bon moment et j'ai finalement trouvé la bonne combinaison.

Utilisation surround.vim vous dire l'espace de l'espace sélecteur surround.

Donc, pour ce cas spécifique, j'utiliser le mode visuel (un bon truc pour fonctionner sur un seul caractère sous le curseur BTW) ainsi: « vs » <- quatre touches

J'ai aussi une habitude de taper des choses comme des listes d'arguments sans espaces. Avec cette technique, vous pouvez simplement naviguer au second argument en utilisant w et dire « VWS » pour sélectionner visuellement un mot et surround avec des espaces.

Je préfère le mode de sélection visuelle en général. Aussi la syntaxe surround alternate « YSW » ne comprend pas le mot de virgule finale qui est pris par « vw ».


0 commentaires

4
votes

Je me suis aussi demandé à ce sujet. J'ai essayé avec surround.vim, mais l'approche naïve

s

(après avoir effectué une sélection visuelle) ne fonctionne pas car l'espace est déjà absorbé par modificateur pour ajouter de l'espace à d'autres paires de caractères environnants. s ajoute A ^ m dans la sortie. ss fonctionne presque mais insère un espace seulement avant.

Après avoir demandé à TPope / Surround.viM sur GitHub:

s

en mode Visual fonctionne. Alternativement, à partir du mode normal, YSL fonctionne pour un seul caractère


0 commentaires

1
votes

Cette méthode vous permet d'utiliser. Pour répéter la commande à la version suivante +.

Mettez votre curseur sur + et tapez: P>

s[SPACE][CTRL-R]"[SPACE][ESC]


0 commentaires

0
votes

Je sais que c'est et le vieux fil, mais cela pourrait être utile à quelqu'un. J'ai trouvé que la carte (carapez-la à autre chose que vous voulez!)

noremap <leader>ss diwi<SPACE><C-R>"<SPACE><ESC>B


0 commentaires