Verwijder verschillende witruimten tijdens het bewerken in Vim

Vaak kom ik tijdens het bewerken met Vim in verschillende situaties terecht waarin witruimte me veel gedoe oplevert. Stel bijvoorbeeld dat ik een opmerking als deze heb:

#This program was featured on the Today show, it is an algorithm for promoting world peace in third-world countries
#given the name of that country and the name of a celebrity to endorse its cause

Als ik bijvoorbeeld de lijnen wil bijsnijden zodat ze naar X-tekens gaan, plaats ik een nieuwe regel ergens in het midden van de bovenste regel om dit te krijgen (na het raken van de nieuwe regel en automatisch inspringen):

#This program was featured on the Today show, it is an algorithm for promoting
world peace in third-world countries
#given the name of that country and the name of a celebrity to endorse its cause

Vervolgens voeg ik een # toe aan het begin van de regel, en dat is allemaal goed en wel, maar dan wil ik dat die regel ook in de rij staat. Om dit te doen, moet ik de nieuwe regel verwijderen, alle spatie voor het streepje op de volgende regel en vervolgens het commentaar #. Het kost niet erg veel tijd om dat te doen, maar deze en soortgelijke situaties kloppen allemaal meer dan een dag aan codering.

Nu is het bovenstaande voorbeeld behoorlijk specifiek, maar mijn vraag is dat niet. Wat is een goede manier in Vim om alle witruimte te verwijderen, INCLUSIEF NIEUWLIJNEN tot het volgende niet-spatie karakters? Als Vim al bewegingen heeft die dat doen, zou dat geweldig zijn, maar als dat niet het geval is, heeft iemand dan een favoriete Vim-functie die ze gebruiken om het bovenstaande te doen dat aan een sleutel kan worden toegewezen? Althans, mis ik een Vim-gebruiksidioom waardoor ik me geen zorgen hoef te maken over deze zaak?

EDIT: Formatteren naar breedte, hoewel nuttig en van toepassing op de bovenstaande casus, is niet de focus van deze vraag. Ik maak me meer zorgen over de verwijdering van witruimte die niet stopt aan het einde van een regel, maar in plaats daarvan doorgaat naar het eerste niet-witte teken van de volgende regel.

0
werkt dw niet? Ook, voor uw oorspronkelijke probleem, niet gwap of gqap doen wat u wilt?
toegevoegd de auteur Benoit, de bron
dw spant geen lijnen uit.
toegevoegd de auteur A. Wilson, de bron

3 antwoord

U wilt die opmerking eigenlijk alleen maar aanpassen aan de huidige 'textwidth' . Als de opmerking een alinea is (di gescheiden door een regel met spaties boven en onder), dan kunt u gewoon gqip gebruiken ( gq is de opdracht reformat, ip is het tekstobject "binnenste alinea") om het opnieuw te formatteren. Als het geen op zichzelf staande alinea is, kunt u die lijnen visueel selecteren en vervolgens gq gebruiken.

Dit is waarschijnlijk ook afhankelijk van het correct instellen van 'formatoptions' om ervoor te zorgen dat de commentaartekens goed worden afgehandeld, maar in veel gevallen heeft de ftplugin dat al gedaan.

1
toegevoegd
@wilsona, d/\ ze \ S . Dat is het leuke aan de opdrachten van Vim. Ze werken over elke beweging. /\ ze \ S zoekt naar de positie vlak voor het volgende teken zonder witruimte, dus gebruik dat als een beweging voor de opdracht d .
toegevoegd de auteur jamessan, de bron
Dit is echt goed om te weten voor de opmerking specifiek. Hoe zit het met de code in het algemeen die niet erg alineagericht is?
toegevoegd de auteur A. Wilson, de bron

Dit is een tijdje later, maar ik ontdekte dat er in 90% van de gevallen een opdracht is die doet wat ik nodig heb:

J --  join line below to the current one
1
toegevoegd

Deze opdracht lijkt te werken:

:.s/\W*$\n\W*//g

het gebruikt een vervang om witruimte te verwijderen tot het einde van de regel en de nieuwe regel aan het einde.

In dit voorbeeld:

testting                 aad        $            
asdjkasdjsdaksddjk$

(om metatekens in vim te zien gebruikt u de opdracht : lijst instellen )

als je de cursor op de eerste regel plaatst en de eerste opdracht gebruikt, zal het alles van aad tot $ verwijderen (aad niet inbegrepen, maar inclusief $ en een nieuwe regel).

Merk ook op voor wat u aan het doen bent, het is veel efficiënter om een ​​extern programma te gebruiken om opmerkingen voor u te formatteren. In het bijzonder is par een geweldig klein C-programma dat tekst bewerkt en het op de gewenste lengte verpakt.

Als je par in je pad hebt, is het net zo eenvoudig om te doen wat je probeert te doen als je het blok met reacties selecteert met Shift + v en de opdracht uitvoert

:!par 40pgr

waarbij 40 de gewenste breedte in kolommen is.

Als je hackish voelt, schrijf dan je eigen programma in C/perl/C ++/python dat opmerkingen bewerkt zoals je zelf wilt, zet het dan in pad en gebruik de externe filteropdracht :! om tekstblokken te verwerken er doorheen.

0
toegevoegd
Leuk, ik had niet verwacht dat het zou overspannen, maar toen gebeurde het.
toegevoegd de auteur A. Wilson, de bron