Brauche bitte kurze Hilfe in vi Makros

Allah

Member
Ich versuche gerade mir den vi anzugewöhnen. Leider habe ich Proble dem vi Makros beizubringen. Während des editierens möchte ich mit bestimmten Tasten vordefinierten Text einfügen.

1. Das hier

map! #b <esc>mp$a<br /><esc>`p

fügt <br /> am Ende einer Zeile ein. Wie bringe ich dem vi aber bei das er nach Ausführung dieses Makros mit dem Cursor am Ende der Zeile steht und nicht wie jetzt vor dem Tag? Oder am besten gleich eine neue Zeile aufmacht und den Cursor dort reinstellt damit ich gleich weiter schreiben kann?

2. Wenn ich jetzt den nachstehenden Text automatisch einfügen möchte, der aus zwei Zeilen besteht, wie gebe ich das als Makro ein?

Zeile 1
Zeile 2
 
Ich habe noch nie vi Macros verwendet, aber ich würde davon ausgehen, das man Zeilensprünge mit \n machen kann und ans Ende der Zeile kommt man wenn man das Steuerzeichen der END Taste angibt.
 
Allah said:
eine neue Zeile aufmacht und den Cursor dort reinstellt damit ich gleich weiter schreiben kann?
Wenn ich dich richtig verstanden haben, sollte dir der Befehl o (am Makro-Ende angehängt) weiterhelfen. Dieser fügt eine neue Zeile unterhalb der aktuellen ein und wechselt in den Eingabe-Modus.

Allah said:
2. Wenn ich jetzt den nachstehenden Text automatisch einfügen möchte, der aus zwei Zeilen besteht, wie gebe ich das als Makro ein?
Code:
:map <IrgendeineTaste> iZeile 1[color=red]^M[/color]Zeile 2
Wichtig ist, daß du das ^M dadurch erzeugst, indem du STRG+V und anschließend die ENTER-Taste drückst.

[LoN]Kamikaze said:
Zeilensprünge mit \n
Das fügt bei dem in FreeBSDs Basissystem enthaltenen vi \n literal in den Text ein. Da sich auch vim so verhält, gehe ich davon aus, daß die meisten vi-Varianten ebenfalls so verfahren.
 
Text, der aus zwei Zeilen besteht, holst du mit ':d2' in den Speicher und mit ':p' wird er ausgegeben.
 
makros bei vim sind die tasten, die du drueckst, einmal seriell aufgeschrieben.

wenn du nach dem p=paste also nochmal $a schreibst, geht der ans ende der zeile ($) und DAHINTER (a) in den insert-modus.
moechtest du, dass er z.b. nach dem einfuegen in die naechste zeile an den anfang springt, ist dein befehl folglich pj^
easy, oder?
 
Nein, nein nein. Bis auf das von Mr Fixit ist das alles nicht zu gebrauchen. Wen es interessiert der suche mit google nach DocBook und vim. Er findet dann einige Makrodateien um mit vim und Docbook zu arbeiten. Die Datei kann man als Beispiel nehmen und seine eigenen Makros dann passend schreiben. Funktioniert bei mir unter dem FreeBSD vi, unter elvis und unter dem Windows Gvim.
 
Hallo,

ich glaube zwar, dass das wahnsinnig umständlich ist, aber ich habe für ein paar automtische Code commentierungen das etwa folgendermassen gelöst:

Code:
imap <leader>foo <ESC>:call InsFoo()<CR>
nmap <leader>foo :call InsFoo()<CR>

function InsFoo()
  exec "normal! ifoo\<CR>"
  exec "normal! Obar\<CR>"
  startinsert!
endfunction

füre einfache sachen reicht aber ein einfaches
Code:
map! #b <br />

Ciao
PhysChemist
 
Ja PhysChemist so wird es gemacht. Wenn es interessiert nach Docbook und vim googeln. Im Prinzip ist es ganz einfach.
 
Back
Top