Sida 1 av 1
Hur gör man [...] emacs / vi
Postat: 19 apr 2008, 12:24
av Konservburk
Den här tråden handlar om hur man på smidigast sätt genomför olika mer eller mindre komplicerade editerinsgmanövrar i
emacs respektive
vi.
Ett enkelt exempel:
Hur tar man bort all text från markören till slutet av raden?
emacs:
C-k (dvs ctrl+k)
vi:
d$
===
Nu till det första problemet: Jag vill ta bort allt utom det sista ordet på var tredje rad. DVS jag vill ta bort hela rad 2 och 3, 5 och 6, osv. Men på rad 1, 4, 7, ... så vill jag endast ta bort allt utom det sista ordet.
Med sed skulle jag ha gjort så här:
Frågan är hur jag gör detta smidigast i emacs respektive vi?
Re: Hur gör man [...] emacs / vi
Postat: 19 apr 2008, 12:27
av Emil.s
I vi/vim så kan man ju använda sök och ersätt från vim. Alltså:
s/old/new/ (g)
Kanske går med fler sed-strängar i vim?
Re: Hur gör man [...] emacs / vi
Postat: 19 apr 2008, 12:40
av Konservburk
Emil.s skrev:I vi/vim så kan man ju använda sök och ersätt från vim. Alltså:
s/old/new/ (g)
Men hur anger jag att det bara ska göras på var tredje rad?
Re: Hur gör man [...] emacs / vi
Postat: 20 apr 2008, 10:54
av mcNisse
Det finns ett enklare sätt att ta bort resten av raden i vi: d$ -> D
Konservburk skrev:Men hur anger jag att det bara ska göras på var tredje rad?
Jag vet inget sätt automatisera det... men du kan trycka denna kombinationen...
&nn&nn osv
Re: Hur gör man [...] emacs / vi
Postat: 20 apr 2008, 14:55
av Konservburk
mcNisse skrev:Det finns ett enklare sätt att ta bort resten av raden i vi: d$ -> D
Den där hade jag missat. Finns det någon motsvarande för
d^ också?
mcNisse skrev:Konservburk skrev:Men hur anger jag att det bara ska göras på var tredje rad?
Jag vet inget sätt automatisera det... men du kan trycka denna kombinationen...
&nn&nn osv
Jag kom fram till att det går att matcha på \n, så efter lite pillande blev det så här:
Men här matchar jag egentligen tre rader i taget. Det är fortfarande intressant att veta om/hur man kan matcha endast var tredje rad.
Re: Hur gör man [...] emacs / vi
Postat: 22 apr 2008, 10:38
av mcNisse
Jag tycker det verkar vara allt för besvärligt att ta fram ett regexp för att matcha var tredje rad. I emacs/vim har du macron som enkelt kan göra en substitution och flytta markören nedåt två rader. Använder du sedan upprepning när du kör macrot blir det inte många knapptryckningar

Re: Hur gör man [...] emacs / vi
Postat: 22 apr 2008, 12:30
av Konservburk
mcNisse skrev:Jag tycker det verkar vara allt för besvärligt att ta fram ett regexp för att matcha var tredje rad.
Tycker jag med. Men det var vad jag kom fram till eftersom jag inte lyckades hitta något enkelt sätt att ange var tredje rad på. Man kan ju t.ex. ange rad 3 till 8 på samma sätt som i sed
:3,8 men uppenbarligen inte var tredje rad :1~3
mcNisse skrev:I emacs/vim har du macron som enkelt kan göra en substitution och flytta markören nedåt två rader. Använder du sedan upprepning när du kör macrot blir det inte många knapptryckningar

Sånt har jag ingen koll på alls... men efter lite googling så blev det så här:
och sedan
@c för att upprepa.
Kan man på något sätt se exakt vad som finns i t.ex. c-makrot? Kan man definera egna standardmakron i typ ~/.vimrc så att @c alltid är ett visst makro när man startar vim?
I emacs blev motsvarande makro så här:
Kod: Markera allt
C-x ( C-e M-b C-@ C-a C-w C-n C-u 2 C-k C-x )
och sedan
C-x e för att upprepa.
Re: Hur gör man [...] emacs / vi
Postat: 22 apr 2008, 12:59
av mcNisse
I emacs går det att upprepa ett macro med C-u n C-x e. Där n är hur många gånger du ska upprepa macrot.
I vim borde det bara vara att skriva en siffra innan macro kommandot... n@c
Tyvär verkar det inte gå att spara macron. Men jag gjorde bara en liten sökning. Jag använder mig dessutom enbart av vi kommandon. Då jag vill kunna använda vi utan att känna till brister i jämförelse med vim... (Jobbar ganska ofta mot hpux burkar med enbart vi.)
Hittade ev wiki med vim tips:
http://vim.wikia.com/wiki/Main_Page
Re: Hur gör man [...] emacs / vi
Postat: 22 apr 2008, 13:54
av Konservburk
mcNisse skrev:I emacs går det att upprepa ett macro med C-u n C-x e. Där n är hur många gånger du ska upprepa macrot. I vim borde det bara vara att skriva en siffra innan macro kommandot... n@c
Det verkar ju funka bra, tack för tipset.
Det där var avancerad prylar. Får se om jag lyckas luska ut något med hjälp av detta.
I ~/.emacs kan man definera macron så här:
Sedan finns
M-x namn i emacs.
mcNisse skrev:Jag använder mig dessutom enbart av vi kommandon. Då jag vill kunna använda vi utan att känna till brister i jämförelse med vim... (Jobbar ganska ofta mot hpux burkar med enbart vi.)
Jag har ingen som helst koll på vad som är vi eller vim kommandon. Kanske vore en bra idé att bekanta sig med vanliga vi först innan man börjar ordentligt med vim. Problemet just nu verkar vara att /bin/vi inte är något annat än just vim där jag sitter för tillfället. Vet inte hur det är hemma i ubuntu. Vad heter egentligen den "vanliga" vi? Verkar finnas åtminstone
nvi,
elvis,
ex-vi ... vilken borde jag installera?
Re: Hur gör man [...] emacs / vi
Postat: 22 apr 2008, 16:05
av mcNisse
Jag har ingen aning vad som är en standard vi, men jag lärde mig vi med denna manual
http://ungerhu.com/jxh/vi.html. Det är ingen nybörjar manuall och borde passa dig utmärkt. Jag har inte lärt mig alla kommandon än...
Re: Hur gör man [...] emacs / vi
Postat: 22 apr 2008, 16:30
av Konservburk
mcNisse skrev:Jag har ingen aning vad som är en standard vi, men jag lärde mig vi med denna manual
http://ungerhu.com/jxh/vi.html. Det är ingen nybörjar manuall och borde passa dig utmärkt. Jag har inte lärt mig alla kommandon än...
Den länken var ju jättebra. Tackar!
Jag installerade den här:
http://ex-vi.sourceforge.net/
Den verkar var så nära orginalet man kan komma. Det första jag märkte var att det inte gick att spara makron med q som i vim. Men tack vare din länk så var det inte så svårt att lista ut hur man gör istället...
Uppenbarligen skriver man sitt makro på en tom rad i insert-mode. Sedan går man ut i normal-mode och kör
"cdd på den raden. Då hamnar makrot i @c och funkar precis som vanligt. Det gick dessutom bra att definera makron på det sättet även i vim
