J'ai commencé à utiliser gvim, et je ne comprends pas très bien comment la modification multiligne fonctionne dans gvim.
Par exemple:
Texte original:
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
ctrl + q, jjjjjj, $ tout est sélectionné, puis j'appuie sur I pour faire une insertion multiligne.
Mon intention est d'insérer des guillemets comme dans la première ligne, puis d'appuyer sur Echap:
asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
Qu'est-il arrivé? Je m'attendais à un comportement similaire à celui de sublimetext:
Si vous ne savez pas comment cela fonctionne, il répète simplement les actions pour chaque ligne. Comment y parvenir? Et que fait vim ici?
vim
sublimetext
text-editor
AlfredoVR
la source
la source
Réponses:
Faites-vous une faveur en supprimant la couche de compatibilité Windows.
Le raccourci normal pour entrer en mode Visual-Block est
<C-v>
.D'autres ont traité des macros d'enregistrement, voici quelques autres idées:
Utilisation uniquement du mode bloc visuel .
Placez le curseur sur le deuxième mot:
Appuyez sur
<C-v>
pour entrer en mode bloc visuel et étendre votre sélection vers le bas:Frappez
I"<Esc>
pour obtenir:Placez le curseur sur le dernier caractère du troisième mot:
Appuyez sur
<C-v>
pour entrer en mode bloc visuel et étendre votre sélection vers le bas:Frappez
A"<Esc>
pour obtenir:Avec le mode bloc visuel et Surround.vim .
Placez le curseur sur le deuxième mot:
Appuyez sur
<C-v>
pour entrer en mode bloc visuel et étendre votre sélection vers le bas et la droite:Appuyez sur
S"
pour entourer votre sélection de ":Avec le mode visuel-ligne et
:normal
.Appuyez sur
V
pour sélectionner toute la ligne et développez-la vers le bas:Exécutez cette commande:
:'<,'>norm ^wi"<C-v><Esc>eea"<CR>
pour obtenir::norm[al]
permet d'exécuter des commandes en mode normal sur une plage de lignes (la'<,'>
pièce est ajoutée automatiquement par Vim et signifie «agir sur la zone sélectionnée»)^
place le curseur sur le premier caractère de la lignew
passe au mot suivanti"
insère un"
avant le curseur<C-v><Esc>
est la manière de Vim de saisir un caractère de contrôle dans ce contexte, ici il est<Esc>
utilisé pour quitter le mode insertionee
passe à la fin du mot suivanta"
ajoute un"
après le curseur<CR>
exécute la commandeEn utilisant Surround.vim, la commande ci-dessus devient
la source
gv
pour récupérer votre sélection visuelle précédente, puis de vous déplacer horizontalement, peut-être avec2e
. (Plus il y a de lignes, plus il y a de valeurgv
!)s
en mode normal mais un grandS
en mode visuel, donc à l'étape 3 de la méthode surround.vim, les frappes devraient êtreS"
S"
, pass"
.
.Ce sont quelques bonnes solutions prêtes à l'emploi données ci-dessus, mais nous pouvons également essayer des plugins qui fournissent plusieurs curseurs comme Sublime.
Je pense que celui-ci semble prometteur:
Il a semblé abandonné pendant un certain temps, mais a eu quelques contributions en 2014.
Il est assez puissant, même s'il m'a fallu un peu de temps pour m'habituer au flow (qui est assez Sublime mais toujours modal comme Vim).
D'après mon expérience, si vous avez beaucoup d'autres plugins installés, vous pouvez rencontrer des conflits!
Il y a quelques autres tentatives pour cette fonctionnalité:
N'hésitez pas à modifier si vous remarquez que l'un de ces éléments est en cours d'amélioration.
la source
Il existe plusieurs façons d'accomplir cela dans Vim. Cependant, je ne sais pas lesquels sont les plus similaires à ceux de Sublime Text.
Le premier serait via le mode d'insertion multiligne . Placez votre curseur sur le deuxième "a" de la première ligne, appuyez sur
Ctrl-V
, sélectionnez toutes les lignes, puis appuyez surI
, et mettez un guillemet double. Appuyez sur<esc>
pour répéter l'opération sur chaque ligne.Le second est via des macros. Placez le curseur sur le premier caractère et démarrez l'enregistrement d'une macro avec
qa
. Allez à droite avecllll
, entrez en mode insertion aveca
, mettez un guillemet double, sortez du mode insertion et revenez au début de votre ligne avec<home>
(ou équivalent). Appuyezj
pour descendre d'une ligne. Arrêtez l'enregistrement avecq
. Et puis rejouez la macro avec@a
. Plusieurs fois.L'une des approches ci-dessus fonctionne-t-elle pour vous?
la source
si vous utilisez la commande "global", vous pouvez répéter ce que vous pouvez faire sur une ligne sur un nombre quelconque de lignes.
exemple:
La commande ci-dessus trouve toutes les lignes qui ont foo et remplace toutes les occurrences de bar sur cette ligne par baz.
fera sur chaque ligne
la source
:g
commande décrite ici. J'aime utiliser/gc
pour demander des "confirmations" afin que je puisse frappery
oun
pour chaque remplacement, oua
pour les changer tous.la source
I
vous ne pouvez pas entrer en mode insertion, savez-vous pourquoi cela se produit?vim -u NONE
et essayez à nouveau d'exécuter l'action souhaitée, il peut s'agir d'une carte ou d'un plugin modifiant le comportement de votre vim.Je ne sais pas trop ce qui
vim
se passe, mais c'est un effet intéressant. La façon dont vous décrivez ce que vous voulez ressemble plus au fonctionnement des macros (:help macro
). Quelque chose comme ça ferait ce que vous voulez avec les macros (en commençant en mode normal):qa
: Enregistrer la macro àa
enregistrer.0w
:0
aller au début de la ligne,w
sauter un mot.i"<Esc>
: Entrez en mode d'insertion, insérez un"
et revenez en mode normal.2e
: Aller à la fin du deuxième mot.a"<Esc>
: Ajoutez un fichier"
.jq
Passer à la ligne suivante et terminer l'enregistrement de la macro.Pris ensemble:
qa0wi"<Esc>2ea"<Esc>
Vous pouvez maintenant exécuter la macro avec
@a
, répéter la dernière macro avec@@
. Pour appliquer au reste du fichier, faites quelque chose comme99@a
qui suppose que vous n'avez pas plus de 99 lignes, l'exécution de la macro se terminera quand elle atteindra la fin du fichier.Voici comment réaliser ce que vous voulez avec
visual-block-mode
(en commençant en mode normal):visual-block-mode
, sélectionnez les lignes que vous souhaitez affecter,G
pour aller au bas du fichier.I"<Esc>
."
..
suffira.la source
9999@a
peut être moche mais il est beaucoup plus facile à taper que:%norm! @a
et il ne s'exécute pas à nouveau sur la ligne que vous venez de modifier. Toujours bon de le savoir quand même. :)Ma solution est d'utiliser ces 2 mappages:
Comment les utiliser:
V12j
<leader>n
<leader>m
Pour effectuer une autre modification, vous n'avez pas besoin de refaire la sélection. Appuyez simplement sur
<leader>n
, effectuez votre modification et appuyez sur<leader>m
pour appliquer.Comment ça marche:
<Esc><Esc>0qq
Quittez la sélection visuelle, allez au début de la ligne et commencez à enregistrer une macro.q
Arrêtez l'enregistrement de la macro.:'<,'>-1normal!@q<CR>
Du début de la sélection visuelle à la ligne avant la fin, lisez la macro sur chaque ligne.<Down>
Revenez à la dernière ligne.Vous pouvez également mapper simplement la même touche mais pour différents modes:
Bien que cela gâche votre capacité à faire une autre modification. Vous devrez resélectionner vos lignes.
la source