Portál AbcLinuxu, 10. května 2025 09:38

Dotaz: Vim - smazani vice radku

21.3.2006 18:35 tomek
Vim - smazani vice radku
Přečteno: 296×
Odpovědět | Admin
Dobry den, potreboval bych poradit jak v textu ve vimu vyhledat vsechny radky zacinajici stejnym textem a ty pak - cetne dvou radku nad nimi smazat.

tedy aby z:

123456+

ABA5BAB4AB

B1ABAB3ABA

spatny

BBBBBBBBBB

654321-

AB8AB8AB7B

B1AB1ABA1A

spatny

AAAAAAAAAA

vyhledal a smazal radky s textem spatny+2 radky nad nimi a pak ve vysledku zustalo jen:

123456+

BBBBBBBBBB

654321-

AAAAAAAAAA

Predem dekuji za radu, cely den hledam v manualech a na netu a nevim si rady... tomek
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 21.3.2006 20:30 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zanči v normálním režimu, na začátku souboru a mačkej:
/^spatny$/
enter
2k3dd
tím jsi smazal první výskyt.

Pro všechny výskyty mačkej:
ggqq/^spatny$/
enter
2k3dd
ESC
:w !grep -e '^spatny$' | wc -l
enter
číslo, které právě vidíš -- nebude vypsáno
@q
Hello world ! Segmentation fault (core dumped)
21.3.2006 21:22 tomek
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
Je mozne ve vimu tento postup nejak zahrnout do prikazu ktery by po rourach tento postup vykonal? Ma idea je takova, abych vytvoril skript, ktery vyhleda v textu kod na zaklade ktereho smaze nad sebou (vcetne sebe) bud jednu nebo dve radky, podle pozadovane situce. Vytvorit takovy skript by nemel byt problem, ale myslim ze prave sekvence prikazu pro pohyb v textu (tedy to 2k3dd, dle vyse uvedene rady) neni mozne provest jinde nez v normalnim rezimu vimu... tim padem by to zkolabovalo... Ale treba se pletu. (?)
21.3.2006 21:37 Tomáš Honzák | skóre: 19 | Praha
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
Coz takhle vylovit ed? :-)

Neco jako
echo "/^spatny
^
^
d
w
q " | ed $filename
Josef Kufner avatar 21.3.2006 21:46 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
Buď můžeš použít ed a ovládat ho z nějakého scriptu rourou, nebo...
#!/usr/bin/perl

$r1 = '';
$r2 = '';
$buf = 0;

while ($ln = <>) {
	if ($ln =~ /spatny/) {
		$r1 = "";
		$r2 = "";
	} else {
		printf("%s", $r1);
		$r1 = $r2;
		$r2 = $ln;
	}
}
printf("%s", $r1);
printf("%s", $r2);
Hello world ! Segmentation fault (core dumped)
21.3.2006 21:53 tomek
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
Jeste musim upresnit, ze konecne reseni bude provozovano v praci pod windows na GVimu, takze s prikazem ed, patrne nemuzu pocitat a jak to je ve windows s perlem to moc netusim (ale pocitam ze bez Bashe se moc nechytnu)... Nevadi, pokud to nejde vyresit samotnym vimem, tak to nechme byt. Kazdopadne dekuji za rady. Pokud by Vas jeste neco napadlo, budu rad za namety. Jeste jenou dik, tomek.
21.3.2006 22:03 Václav Bárta
Rozbalit Rozbalit vše ActivePerl
(viz http://aspn.activestate.com/ASPN/Downloads/ActivePerl/) uměl zatím všechno, co jsem po Perlu na Windows potřeboval...
22.3.2006 09:25 Tomáš Honzák | skóre: 19 | Praha
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
Jeste musim upresnit, ze konecne reseni bude provozovano v praci pod windows na GVimu
nojo, ale koho to má na abcLINUXU napadnout, žejo :-D
, takze s prikazem ed, patrne nemuzu pocitat a jak to je ve windows s perlem to moc netusim (ale pocitam ze bez Bashe se moc nechytnu)...
Vice nez doporucuju http://www.cygwin.com/ -- bash, ed, cokoliv :-)
22.3.2006 09:53 Tom.š Ze.le.in | skóre: 21 | blog: tz
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
:help :normal
22.3.2006 09:54 Tom.š Ze.le.in | skóre: 21 | blog: tz
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
:help :normal
21.3.2006 22:40 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
Místo 2k3dd je jednodušší použít rovnou d2k
21.3.2006 21:58 Pavel Kysilka
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
Odpovědět | | Sbalit | Link | Blokovat | Admin
%g/\(^.*$<Ctrl+v a pak enter>\)\{2\}^spatny_radek.*$/d

nebo to ctrl+V a pak Enter muze byt jako \n ve zkratce vezmu spatny radek a pridam k nemu dalsi dva radky ^.*$\n .

Zkuste editor vim prakticky II zde na abicku. ozkousejte, ted to pisi z hlavy.

bye gf
22.3.2006 14:03 tomek
Rozbalit Rozbalit vše Re: Vim - smazani vice radku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dekuji vsem za rady. Nakonec jsem to - diky vasi pomoci - vyresil prikazem:

%g/spatny1/ :normal 1dk (pro vyhledani a smazani textu "spatny1" + jedna radka nad nim)

a

%g/spatny2/ :normal 2dk (pro vyhledani a smazani textu "spatny2" + dve radky nad nim)

Jeste jednou dik, tomek.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.