Hoe voeg ik tekst toe aan het einde van elke regel in Vim?

In Vim heb ik de volgende tekst:

key => value1
key => value2
key => value1111
key => value12
key => value1122222

Ik wil graag “,” toevoegen aan het einde van elke regel. De vorige tekst wordt de volgende:

key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,

Weet iemand hoe dit moet? Is het mogelijk om de visuele blokkeringsmodus te gebruiken om dit te bereiken?


Antwoord 1, autoriteit 100%

Dit doet het voor elke regel in het bestand:

:%s/$/,/

Als u een subset van regels wilt maken in plaats van het hele bestand, kunt u deze specificeren in plaats van de %.

Eén manier is om een ​​visuele selectie uit te voeren en vervolgens de :te typen. Het zal :'<,'>voor u invullen, daarna typt u de rest (Let op: u hoeft alleen s/$/,/toe te voegen)

:'<,'>s/$/,/

Antwoord 2, autoriteit 91%

Er is in feite een manier om dit te doen met behulp van de visuele blokmodus. Door simpelweg op $Ate drukken in de visuele blokmodus, wordt aan het einde van alle regels in de selectie toegevoegd. De toegevoegde tekst verschijnt op alle regels zodra u op Escdrukt.

Dus dit is een mogelijke oplossing:

vip<C-V>$A,<Esc>

Dat wil zeggen, in de normale modus: selecteer een alinea vip, schakel over naar de visuele blokmodus CTRLV, voeg toe aan alle regels $Aeen komma ,en druk vervolgens op Escom te bevestigen.

De documentatie is te vinden op :h v_b_A. Er is zelfs een illustratie van hoe het werkt in de sectie voorbeelden: :h v_b_A_example.


Antwoord 3, autoriteit 24%

Een andere oplossing, met een andere geweldige functie:

:'<,'>norm A,

Zie :help :normal.


Antwoord 4, autoriteit 20%

ex-modus is het gemakkelijkst:

:%s/$/,
: - enter command mode
% - for every line
s/ - substitute
$ - the end of the line
/ - and change it to
, - a comma

Antwoord 5, autoriteit 5%

Het vervangende commando kan worden toegepast op een visuele selectie. Maak een visueel blok over de regels die u wilt wijzigen en typ :, en merk op dat de opdrachtregel als volgt wordt geïnitialiseerd: :'<,'>. Dit betekent dat het vervangende commando zal werken op de visuele selectie, zoals:

:'<,'>s/$/,/

En dit is een vervanging die zou moeten werken voor uw voorbeeld, ervan uitgaande dat u echt de komma aan het einde van elke regelwilt hebben, zoals u hebt vermeld. Als er spaties achter staan, moet u de opdracht mogelijk dienovereenkomstig aanpassen:

:'<,'>s/\s*$/,/

Hierdoor wordt elke hoeveelheid witruimte voorafgaand aan het einde van de regel vervangen door een komma, waardoor de volgende witruimte effectief wordt verwijderd.

Dezelfde commando’s kunnen op een reeks regels werken, b.v. voor de volgende 5 regels: :,+5s/$/,/, of voor de hele buffer: :%s/$/,/.


Antwoord 6

Als je ‘,’ wilt toevoegen aan het einde van de regels die beginnen met ‘key’, gebruik dan:

:%s/key.*$/&,

Antwoord 7

:%s/$/,/g

$ komt overeen met het einde van de regel


Antwoord 8

Ik heb <M-DOWN>(alt-pijl omlaag) toegewezen aan <DOWN>.zodat ik het laatste commando op een reeks regels kan herhalen heel snel. met deze mapping kan ik:

A,<ESC>

En houd vervolgens alt ingedrukt terwijl je herhaaldelijk ingedrukt houdt om de komma aan het einde van elke regel toe te voegen.
Dit werkt goed voor mij omdat het een zeer goede controle geeft over welke lijnen wel en niet de verandering krijgen.
(Ik heb ook de andere pijlen op dezelfde manier in kaart gebracht, zodat .)

Hier is de toewijzingsregel die u in uw vimrc moet plakken:

map <M-DOWN> <DOWN>.

Antwoord 9

De volgende macro kan ook worden gebruikt om uw taak te volbrengen.

qqA,^[0jq4@q

Other episodes