Wie automatisiere ich einen Satz von VIM-Befehlen, die ich ständig verwende?

1867
Joe

Ich führe einige Textdateien aus, die in Markdown über Pandoc geschrieben wurden, um HTML zu erhalten. Die Tags werden jedoch mit seltsamen Zeilenumbrüchen und Leerzeichen in Tags gerendert. Daher habe ich einige sed-Befehle in VIM ausgeführt.

Sollte ich mir Vimscripts oder Makros anschauen? Oder ein Shellscript (wenn ich die VIM-Befehle mit dem Shell-Befehl Pandoc kombinieren möchte)?

Ich verwende gVIM unter Windows 7 und Pandoc durch die reguläre Windows-Cmd-Shell, obwohl ich dies normalerweise von VIM aus erledige.

1
Warum verwenden Sie nicht sed, um die sed-Befehle auszuführen? Ignacio Vazquez-Abrams vor 13 Jahren 0
Das ist es, was ich mache, aber ich muss einige von ihnen ausführen, und ich muss es jedes Mal tun, wenn ich eine Datei konvertiere. Ich möchte in der Lage sein, die Konvertierung + mehrere sed-Befehle auf einmal zu automatisieren, vorzugsweise aus VIM heraus. Joe vor 13 Jahren 0

2 Antworten auf die Frage

1
garyjohn

Ich denke, es hängt davon ab, wo die meisten Dateiverarbeitung und Entscheidungsfindung stattfindet, und von den Skriptfunktionen, die Ihnen außerhalb von Vim zur Verfügung stehen. Da der Großteil der Verarbeitung, die Sie durchführen, scheinbar eine Folge von Programmen ausführt, möglicherweise in einer Pipeline, würde ich gerne alles in ein Shell-Skript oder eine Batch-Datei packen und von Vim aus starten. (Sie haben geschrieben, dass Sie sed verwenden. Haben Sie auch Zugriff auf eine Unix-Shell?) Wenn Sie keinen Zugriff auf eine Unix-Shell haben und sich der Befehlssatz für die Batch-Datei als eingeschränkt erweist, könnten Sie alle Befehle verwenden in eine Vim-Funktion. Durch das Einfügen der Befehle in eine Vim-Funktion erhalten Sie ein wenig mehr Flexibilität und eine einfachere Programmierung, als zu versuchen, alles für einen Vim-Befehl oder ein Mapping genau zu zitieren.

Sie können Shell-Befehle so einfach in Funktionen einfügen

function Foo() !echo "hello" endfunction 

oder dieses:

function Bar() call system('echo "hello"') endfunction 

Sehen

:help usr_41.txt 

und speziell

:help 41.6 :help 41.7 

ebenso gut wie

:help system() 

mehr dazu. Weitere Informationen zu Befehlen und Zuordnungen finden Sie unter

:help usr_40.txt 

Sie können einen Befehl zum Aufrufen Ihrer Funktion wie folgt schreiben:

:command Foo call Foo() 

damit Sie Ihre Funktion mit ausführen können

:Foo 
0
glenn jackman

ed ist ziemlich einfach zu schreiben.

printf "%s\n" "%s/$/...end/" "g/delete.this.line/d" w q | ed filename