So, neuer Tag, neues CSV-Plugin für Vim.
Jetzt unterstützt es auch Dateien mit festen Breiten, also z.B. die erste Spalte geht bis zum 10. Buchstaben, danach fängt gleich die zweite Spalte an. Ich hasse ja solche Dateien, aber leider muß man sowas manchmal verarbeiten. Außerdem kann man jetzt CSV Dateien einfach in ein neues Format konvertieren (also beispielsweise in SQL-Insert Statements umwandeln oder als HTML exportieren).
Tuesday, 16. August 2011
CSV Plugin Update
Wednesday, 20. July 2011
Vim Plugin Unicode.vim
So, dann hab ich mal Unicode.vim (v0.9) released.
Also manchmal nervt mich der Unicode Krempel ja tierisch und das Handling in Vim ist auch nur so suboptimal. Wieso kann ich z.B. nicht anständig die Unicode Punkte des Glyphs unterm Cursor bekommen?
Also manchmal nervt mich der Unicode Krempel ja tierisch und das Handling in Vim ist auch nur so suboptimal. Wieso kann ich z.B. nicht anständig die Unicode Punkte des Glyphs unterm Cursor bekommen?
Tuesday, 29. March 2011
EasyMotion: Ein nettes Vim Plugin
Heute stelle ich mal ein Plugin vor, dass ich ganz interessant finde. Normalerweise navigiert man ja im Normal Mode. 1 Worte vorwärts 'w', zum nächsten s springen 'fs', etc. und dazu kann man dann noch die Anzahl der nächsten Bewegungen angeben (zum übernächsten Wort springen: '2w', zum 3. s springen '3fs', etc). Da fängt mal schnell an, Wort zu zählen und da wird es dann anstrengend.
An dieser Stelle kommt dann das EasyMotion Plugin ins Spiel. Man drückt \w und das Plugin kennzeichnet jedes Wort farblich, so dass man einfach auswählen kann, zu welchem Wort man springen möchte. Sehr interessantes Konzept.
Hier geht es zu einem kurzen Screencast.
An dieser Stelle kommt dann das EasyMotion Plugin ins Spiel. Man drückt \w und das Plugin kennzeichnet jedes Wort farblich, so dass man einfach auswählen kann, zu welchem Wort man springen möchte. Sehr interessantes Konzept.
Hier geht es zu einem kurzen Screencast.
Thursday, 3. March 2011
Vim CSV-Plugin, Screencast
Thursday, 24. February 2011
Ein CSV Filetype plugin für Vim

Oben fixierte Header-Zeile
Spalten tabellarisch angeordnet
Unten rechts, in der Statusleiste wird die Spalte angezeigt, in der sich der Cursor befindet
7. Spalte hervorgehoben
Spalten tabellarisch angeordnet
Unten rechts, in der Statusleiste wird die Spalte angezeigt, in der sich der Cursor befindet
7. Spalte hervorgehoben
Nun habe ich mir vor ein paar Tagen wieder etwas Zeit genommen und das Plugin wieder an meine Ansprüche angepasst und umfangreich erweitert. Der reguläre Ausdruck zum Parsen der Spalten ist natürlich[™] komplexer geworden:
Wenn man sich in einer ruhigen Minute mal RFC4180 anschaut, dann bekommt man das kalte Grausen, was alles in CSV Dateien erlaubt ist. Zeilenumbrüche und kaputtes Quoting. Naturgemäß hatte ich nur wenig Lust, solch kaputte CSV-Dateien zu unterstützen, aber immerhin kann man das Plugin jetzt so konfigurieren, dass es Zeilenumbrüche in CSV-Dateien erlaubt. Dennoch werden die meisten Befehle nicht damit klarkommen. Deswegen werde ich mich auch zukünftig nicht darum kümmern. Zeilenumbrüche gehören einfach nicht in CSV-Dateien. Punkt.
Die folgenden Features werden unterstützt:
- Das Plugin ermöglicht jetzt ein einfaches Syntax-Highlighting, in dem die Spalten in alternierenden Farben angezeigt werden (und die Spalten Delimiter ausgeblendet werden)
- Zur schöneren Ansicht, kann man außerdem die Datei so formatieren (:%ArrangeCol), dass alle Spalten schön ausgerichtet sind. Das erledigt im Wesentlichen ein komplexer Suchen- und Ersetzen Ausdruck, der daher für umfangreichere Dateien schon mal länger dauern kann.
- :Header und :VHeader fixieren jetzt entweder die erste Zeile (:Header) oder Spalte (:VHeader). Das funktioniert so ähnlich wie bei Excel. So behält man leichter die Übersicht. Leider funktioniert nur entweder das eine oder das andere. Beides gleichzeitig wird auf absehbare Zeit nicht möglich sein.
- :SearchInCol ermöglicht es, genau in einer bestimmten Spalte zu suchen. Ich bin noch nicht so ganz zufrieden mit der Suche, fürchte aber, dass auch hier die Möglichkeiten der Regulären Ausdrücke in Vim nicht ausreichen. (Suche in einer Spalte nach einem Zeichen, das mehrmals vorkommt und :SearchInCol wird nur das letzte finden). Oder ich verstehe gerade nicht mehr Reguläre Ausdrücke. Hmpf.
- :HiColumn markiert noch einmal die aktuelle Spalte.
- einfaces Navigieren durch die Spalten mittels HJKL (H: zur vorherigen Spalte, J eine Zeile nach unten aber in der gleichen Spalte bleiben, K eine Zeile nach oben innerhalb der gleichen Spalte, L zur nächsten Spalte).
- :DeleteColumn, um eine Spalte zu löschen
- :Column um den Inhalt einer Spalte in ein Register zu kopieren.
- Dokumentation gehört meiner Meinung nach zu einem anständigen Plugin dazu. Also habe ich alles dokumentiert, was man konfigurieren kann und wie man das Plugin benutzt.
Wednesday, 20. January 2010
VimPlugin: histwin.vim
Vim hat ein geniales Feature, die Undo-Funktion. Das hört sich erstmal nicht spektakulär an, ist es aber, weil sobald man mal etwas rückgängig gemacht hat und man an einer vorherigen Version Änderungen vornimmt, die vorherige Version bei normaler Undo-Funktion weg ist. Vim dagegen erstellt einen sogenannten undo branch und man kann jederzeit zu dieser Version zurück kehren mittels :earlier oder :later. Leider ist das Interface dazu etwas gewöhnungsbedürftig. Man vergißt leicht welche verschiedenen Branches es gibt und wie man dahin kommt.
Einen relativ kurzen Überblick gibt die Hilfe in :h undo-tree und :h usr_32
Daher habe ich jetzt mal angefangen ein Plugin histwin.vim zu schreiben, dass die Navigation zu den diversen Undo-Branches erleichtert. Der obligatorische Screenshot:
Wie ich finde, hat das Plugin mehrere Vorteile:
Einen relativ kurzen Überblick gibt die Hilfe in :h undo-tree und :h usr_32
Daher habe ich jetzt mal angefangen ein Plugin histwin.vim zu schreiben, dass die Navigation zu den diversen Undo-Branches erleichtert. Der obligatorische Screenshot:
Wie ich finde, hat das Plugin mehrere Vorteile:
- Man sieht in welchem Undo-Branch man sich befindet (in obigen Beispiel grau hinterlegt, das ist leider noch etwas buggy)
- Man kann einen selektierten Branch mit der aktuell geladenen Version durchführen ("D" im Undo-Tree Window auf dem entsprechenden Branch drücken)
- Man kann bestimmte Branches taggen ("T" auf dem Branch drücken)
- Und als Spaßfeature habe ich mal einen Schnelldurchlauf durch alle Änderungen eingebaut, die vom Anfang bis zum gewählten Branch durchgeführt wurden ("R" auf dem Branch drücken). Man kann da also vim bei der Arbeit zusehen, wie es den Buffer bearbeitet.
Wednesday, 4. November 2009
Vim: Text ausblenden, der das Suchmuster nicht enthält.
Mit Vim kann man mittels Folding Text ausblenden. Dafür gibt es
verschiedene Methoden, z.B. anhand der Syntax-Regeln, manueller Regeln, anhand der Einrückung oder anhand eines Ausdrucks.
Möchte man z.B. nur den Text einblenden lassen, der auf die Suche passt, kann man das so machen:
:set foldmethod=expr
:set foldexpr=getline(v:lnum)!~@/
Das Problem dabei ist nur, dass dieser Ausdruck nicht jedesmal neu
ausgewertet wird und daher für spätere Suchvorgänge nicht mehr passt.
Am einfachsten ist es daher diesen Ausdruck per Autocommand ausführen zu lassen:
au CursorHold * :set foldexpr=getline(v:lnum)!~@/
Dann wird dieser Audruck immer nach einer bestimmten Anzahl Sekunden Inaktivität aktiviert. Nach wieviel Sekunden hängt von der Einstellung updatetime ab:
set updatetime?
4000
hier also 4 Sekunden
verschiedene Methoden, z.B. anhand der Syntax-Regeln, manueller Regeln, anhand der Einrückung oder anhand eines Ausdrucks.
Möchte man z.B. nur den Text einblenden lassen, der auf die Suche passt, kann man das so machen:
:set foldmethod=expr
:set foldexpr=getline(v:lnum)!~@/
Das Problem dabei ist nur, dass dieser Ausdruck nicht jedesmal neu
ausgewertet wird und daher für spätere Suchvorgänge nicht mehr passt.
Am einfachsten ist es daher diesen Ausdruck per Autocommand ausführen zu lassen:
au CursorHold * :set foldexpr=getline(v:lnum)!~@/
Dann wird dieser Audruck immer nach einer bestimmten Anzahl Sekunden Inaktivität aktiviert. Nach wieviel Sekunden hängt von der Einstellung updatetime ab:
set updatetime?
4000
hier also 4 Sekunden
Wednesday, 30. September 2009
mutt und Vim: Anhänge
mutt als Mailer und vim als Editor sind ein flexibles Team. In Verbindung mit edit_headers hat man volle Kontrolle über seine Mails (inklusive alle Headerzeilen). Hin und wieder möchte man auch mal eine Datei einer E-Mail anhängen. Normalerweise macht man das dann, wenn die E-Mail fertig geschrieben wurde und man wieder in mutt ist und wenn man Pech hat, vergisst man die Datei anzuhängen und muß eine zweite Mail nachschicken und sich dem Empfänger gegenüber als Depp outen.
Dabei geht es auch anders. Ein eher weniger bekanntes Feature von mutt erlaubt es nämlich auch Dateien anzuhängen, die über die Headerzeile Attach: Datei angegeben wurden. Nun kann man bereits beim Schreiben der Mail eine entsprechende Anweisung im Header-Kopf der E-Mail hinterlassen und mutt wird automatisch die gewünschte Datei anhängen. So habe ich mir zum Beispiel den Befehl :Attach definiert, der eine entsprechende Kopfzeile in die E-Mail schreibt:
(siehe auch diesen alten Artikel).
Leider verhindert dass immer noch nicht, dass man vergisst die Datei anzuhängen und man sich trotzdem zum Deppen macht. Daher habe ich mal eine kleine Funktion geschrieben, welche die Mail scannt und den Nutzer zum Anhängen der Dateien auffordert, wenn sie bestimmte Stichworte findet.
Gestern nun habe ich daraus ein Plugin (CheckAttach.vim) für Vim gemacht. Einfach das Plugin runterladen, in Vim öffenen und einlesen:
Dann wird das Plugin automatisch installiert.
Beim Schreiben von Mails sollte das Plugin dann automatisch aktiv sein. Mit :DisableCheckAttach kann man das Plugin einfach deaktivieren und mit :EnableCheckAttach einfach wieder aktivieren, wenn man es deaktiviert hatte. Eine kleine Hilfe ist auch vorhanden (:h CheckAttach.txt)
Wenn das Plugin aktiv ist, wird es beim Speichern immer überprüfen, ob die Worte Anhang oder angehängt (bzw. attachment und attach) vorhanden sind und falls es diese findet, wird es den Benutzer auffordern, die Dateien anzugeben. Es generiert dann die entsprechenden Header automatisch. Dabei erlaubt vim Autovervollständigen der Dateien und man kann auch die Shell-Muster * angeben, um mehrere Dateien anzuhängen. Temporär deaktivieren kann man den Check auch wenn man mit ! speichert, also z.B. :w! anstelle von :w.
Wichtig: Falls der Pfad bzw. der Dateiname Leerzeichen enthalten, werden diese mit einem '\' maskiert. In mutt vor Version 1.5.20 können diese Dateien aber nicht angehängt werden. Das ist leider ein Bug. Wenn man mutt vor Version 1.5.20 einsetzt, müssen die Dateien vorher umbenannt werden.
Dabei geht es auch anders. Ein eher weniger bekanntes Feature von mutt erlaubt es nämlich auch Dateien anzuhängen, die über die Headerzeile Attach: Datei angegeben wurden. Nun kann man bereits beim Schreiben der Mail eine entsprechende Anweisung im Header-Kopf der E-Mail hinterlassen und mutt wird automatisch die gewünschte Datei anhängen. So habe ich mir zum Beispiel den Befehl :Attach definiert, der eine entsprechende Kopfzeile in die E-Mail schreibt:
CODE:
command! -nargs=1 -complete=file AttachFile
\exe "normal magg}-" | call append(line('.'), 'Attach: <args>') | normal `a
(siehe auch diesen alten Artikel).
Leider verhindert dass immer noch nicht, dass man vergisst die Datei anzuhängen und man sich trotzdem zum Deppen macht. Daher habe ich mal eine kleine Funktion geschrieben, welche die Mail scannt und den Nutzer zum Anhängen der Dateien auffordert, wenn sie bestimmte Stichworte findet.
Gestern nun habe ich daraus ein Plugin (CheckAttach.vim) für Vim gemacht. Einfach das Plugin runterladen, in Vim öffenen und einlesen:
CODE:
~$ vim CheckAttach.vba
:so %
:q!
Dann wird das Plugin automatisch installiert.
Beim Schreiben von Mails sollte das Plugin dann automatisch aktiv sein. Mit :DisableCheckAttach kann man das Plugin einfach deaktivieren und mit :EnableCheckAttach einfach wieder aktivieren, wenn man es deaktiviert hatte. Eine kleine Hilfe ist auch vorhanden (:h CheckAttach.txt)
Wenn das Plugin aktiv ist, wird es beim Speichern immer überprüfen, ob die Worte Anhang oder angehängt (bzw. attachment und attach) vorhanden sind und falls es diese findet, wird es den Benutzer auffordern, die Dateien anzugeben. Es generiert dann die entsprechenden Header automatisch. Dabei erlaubt vim Autovervollständigen der Dateien und man kann auch die Shell-Muster * angeben, um mehrere Dateien anzuhängen. Temporär deaktivieren kann man den Check auch wenn man mit ! speichert, also z.B. :w! anstelle von :w.
Wichtig: Falls der Pfad bzw. der Dateiname Leerzeichen enthalten, werden diese mit einem '\' maskiert. In mutt vor Version 1.5.20 können diese Dateien aber nicht angehängt werden. Das ist leider ein Bug. Wenn man mutt vor Version 1.5.20 einsetzt, müssen die Dateien vorher umbenannt werden.
Wednesday, 8. July 2009
Vim Plugin sudoedit.vim
In Vim passiert es mir immer wieder, dass ich nur mal kurz in einer Datei kurz reinschaue, die ich als normaler User nicht bearbeiten darf. Dann bemerke ich aber, dass ich doch kurz was bearbeiten möchte. Also Vim beenden, per sudo/su zum root werden vim mit der Datei neu starten. Das kann ganz schön nervig sein.
Daher hab ich das Plugin sudoedit.vim geschrieben. Wenn mir sowas wieder passiert, einfach Datei bearbeiten und zum Schluß :SudoWrite eingeben und die Datei wird mittels sudo/su oder mithilfe eines anderen konfigurierbaren Tools geschrieben.
Daher hab ich das Plugin sudoedit.vim geschrieben. Wenn mir sowas wieder passiert, einfach Datei bearbeiten und zum Schluß :SudoWrite eingeben und die Datei wird mittels sudo/su oder mithilfe eines anderen konfigurierbaren Tools geschrieben.
Monday, 6. July 2009
Vim Highlightmark.vim Plugin
Der Eintrag zum Hervorheben von Marks in Vim wird gerade ungewöhnlich häufig abgerufen. Ich schätze das kommt davon, wenn man über dies und jenes bloggt. Irgendwann stolpert nämlich mal jemand darüber und schreibt es nieder. Und die Leute lesen es und laden es dann runter.
Dabei gibt es mindestens noch 2 andere Implementierungen: showmarks.vim und showmarks.vim Ich hab das erst hinterher erfahren, nachdem ich mein eigenes Script geschrieben habe. Ich kenne nämlich keines davon, mein Script funktioniert für mich zufriedenstellend.
Fehler und Anmerkungen nehme ich natürlich gerne entgegen. Dabei fällt mir ein, ich könnte mal wieder häufiger über diesen Editor bloggen. Mal sehen...
Dabei gibt es mindestens noch 2 andere Implementierungen: showmarks.vim und showmarks.vim Ich hab das erst hinterher erfahren, nachdem ich mein eigenes Script geschrieben habe. Ich kenne nämlich keines davon, mein Script funktioniert für mich zufriedenstellend.
Fehler und Anmerkungen nehme ich natürlich gerne entgegen. Dabei fällt mir ein, ich könnte mal wieder häufiger über diesen Editor bloggen. Mal sehen...
Tuesday, 25. March 2008
Vim: verbessertes Undo im Eingabemodus
Weil ich gerade letztens drüber gestolpert bin und ich mich immer wieder darüber geärgert habe:
Wenn man auch die letzten Eingaben rückgängig machen möchte, dann helfen diese Mappings:
Damit wird bei Benutzung der Tasten Backspace (BS), Delete (DEL), Ctrl-U (löscht vom Cursor bis zum Zeilenanfang und Ctrl-W (löscht letztes Wort) eine neue undo-Sequence gestartet. Bei Benutzung von 'u' (undo) wird immer bis zur letzten undo-Sequence rückgängig gemacht. Normalerweise passiert das, wenn man z.B. den Insert-Modus verläßt. Und das heißt, dass ein undo dann alles rückgängig gemacht hätte, was vorher im Insert-Modus eingegeben wurde.
Besonder nervig war ein zufällig getipptes Ctrl-U im Einfügemodus und man konnte das dann nicht mehr rückgängig machen.
Mit den Mappings oben erreicht man dann, dass ein undo im Zweifelsfall jeden einzelnen Buchstaben rückgängig macht, den man vorher per backspace oder delete gelöscht hat. Ganz wie man es von den Editoren unter Windows gewohnt ist ;)
Wenn man auch die letzten Eingaben rückgängig machen möchte, dann helfen diese Mappings:
CODE:
inoremap <C-U> <C-G>u<C-U>
inoremap <C-W> <C-G>u<C-W>
inoremap <BS> <C-G>u<BS>
inoremap <Del> <C-G>u<Del>
Damit wird bei Benutzung der Tasten Backspace (BS), Delete (DEL), Ctrl-U (löscht vom Cursor bis zum Zeilenanfang und Ctrl-W (löscht letztes Wort) eine neue undo-Sequence gestartet. Bei Benutzung von 'u' (undo) wird immer bis zur letzten undo-Sequence rückgängig gemacht. Normalerweise passiert das, wenn man z.B. den Insert-Modus verläßt. Und das heißt, dass ein undo dann alles rückgängig gemacht hätte, was vorher im Insert-Modus eingegeben wurde.
Besonder nervig war ein zufällig getipptes Ctrl-U im Einfügemodus und man konnte das dann nicht mehr rückgängig machen.
Mit den Mappings oben erreicht man dann, dass ein undo im Zweifelsfall jeden einzelnen Buchstaben rückgängig macht, den man vorher per backspace oder delete gelöscht hat. Ganz wie man es von den Editoren unter Windows gewohnt ist ;)
Posted by chrisbra
in Vim
at
21:53
| Comments (0)
| Trackbacks (0)
Defined tags for this entry: tipps and tricks, vim
Tuesday, 12. February 2008
In Vim Marks visualisieren
In Vim nutze ich sehr oft marks, um Stellen zu markieren und später an dieser Stelle weiterzuarbeiten. Man kann damit quasi Lesezeichen erstellen, die sogar nach dem nächsten Laden noch vorhanden sind. Man kann auch diese Lesezeichen in Verbindung mit anderen Befehlen benutzen (z.B. d'w heißt lösche bis zu der Zeile, in der die Markierung w definiert ist) oder zwischen 2 Bereichen Suchen und Ersetzen (:'<,'>s.... heißt in diesem Fall ersetze zwischen den Markierungen '< und '>, die Markierungen '< und '> sind dabei spezielle Markierungen, die immer auf den Anfang und das Ende des letzen visuell markierten Bereichs zeigen).
Leider weiß man oftmals nach einer Weile gar nicht mehr, wo man bestimmte Markierungen gesetzt hat. Dem hab ich jetzt mit meinem ersten Plugin abgeholfen. Einfach das Plugin nach ~/.vim/plugin werfen und beim nächsten Laden wird es aktiv.
Am Anfang gibt es ein paar Konfigurationseinstellungen, die man ändern kann (z.B. wie die Markierungen sichtbar gemacht werden oder durch welche Taste es aktiviert wird). Ohne Konfiguration kann man es mit F6 aktivieren bzw. deaktivieren. Wenn es aktiviert ist, werden Markierungen in der ersten Zeile grafisch durch ihren Namen dargestellt. Zur Verdeutlichung hier ein Bild:
Leider weiß man oftmals nach einer Weile gar nicht mehr, wo man bestimmte Markierungen gesetzt hat. Dem hab ich jetzt mit meinem ersten Plugin abgeholfen. Einfach das Plugin nach ~/.vim/plugin werfen und beim nächsten Laden wird es aktiv.
Am Anfang gibt es ein paar Konfigurationseinstellungen, die man ändern kann (z.B. wie die Markierungen sichtbar gemacht werden oder durch welche Taste es aktiviert wird). Ohne Konfiguration kann man es mit F6 aktivieren bzw. deaktivieren. Wenn es aktiviert ist, werden Markierungen in der ersten Zeile grafisch durch ihren Namen dargestellt. Zur Verdeutlichung hier ein Bild:
Tuesday, 23. October 2007
Vim Command-line Window
Bin ich eigentlich der Einzige, der anstelle von :q q: tippt? Typischer Fall von mangelnder Koordination der beiden Hände schätze ich. Das ganze ist nervig genug, dass ich q: jetzt auf :q umgebogen habe:
:noremap q: :q
All die Jahre, die ich vim nutze, hab ich noch nie das Command-line Window (:h cmdwin) benutzt. Zur Not kann man es noch mit q/ oder q? öffnen (im normal Mode, im Command-Mode [:] durch Drücken von Ctrl-F)
:noremap q: :q
All die Jahre, die ich vim nutze, hab ich noch nie das Command-line Window (:h cmdwin) benutzt. Zur Not kann man es noch mit q/ oder q? öffnen (im normal Mode, im Command-Mode [:] durch Drücken von Ctrl-F)
Posted by chrisbra
in Vim
at
22:32
| Comments (2)
| Trackbacks (0)
Defined tags for this entry: tipps and tricks, vim
Friday, 21. September 2007
Ein bunter Vim
Das folgende macht vim ganz schön bunt. Und zwar bei jedem Start anders:
In die .vimrc eintragen und vim neustarten. Nach jedem Start wird vim mit einem zufälligen ColorScheme gestartet. Möchte man wissen, welches aktuell benutzt wird, hilft :echo g:colors_name
CODE:
let mycolors = split(globpath(&rtp,"**/colors/*.vim"),"\n")
exe 'so ' . mycolors[localtime() % len(mycolors)]
unlet mycolors
In die .vimrc eintragen und vim neustarten. Nach jedem Start wird vim mit einem zufälligen ColorScheme gestartet. Möchte man wissen, welches aktuell benutzt wird, hilft :echo g:colors_name
Posted by chrisbra
in Vim
at
22:47
| Comments (0)
| Trackbacks (0)
Defined tags for this entry: tipps and tricks, vim
Friday, 22. June 2007
Vim-Tipp: Patch aus aktuell bearbeiteter Datei erstellen
Um aus der aktuell bearbeiteten Datei einen Patch zu erstellen, kann man die folgende Vim-Funktion benutzen:
Diese Funktion such automatisch nach einer passenden .orig Datei und nutzt diese, um den Patch in einem neuen Fenster zu erstellen. Falls keine .orig-Datei vorhanden ist, aber die aktuelle Datei modifiziert ist, wird automatisch die unmodifizierte Version der aktuellen Datei benutzt. Ansonsten fragt es nach einer zu vergleichenden Datei.
Aufruf:
:call DiffUnified()
Abhängigkeiten: diff muß vorhanden sein und das löschen der temporären Dateien funktioniert nur unter Unix/Linux. Man könnte evtl. auch den passenden del-Aufruf für die Windows-Version hinzufügen.
Dies ist eine Kopie von diesem Vim Tipp.
CODE:
fu! DiffUnified()
let diffexpr="diff -Nuar"
let bname=bufname("")
let origtemp=0
" Case 1: File has a filename and is not modified
if !&modified && !empty(bname)
let tempfile=0
let origFile=bname.".orig"
else
" Case 2: File has a filename and is modified
if &modified && !empty(bname)
if !filereadable(bname.".orig")
sp
enew
r #
0d
let tempfile2=tempname()
exe ":sil w! " .tempfile2
wincmd q
let origtemp=1
wincmd p
endif
let origFile=tempfile2
" let bname=tempname()
" exe ":sil w! ".bname
" let tempfile=1
" Case 2: File is new and is modified
else
if &modified
let origFile=bname.".orig"
else
let origFile=""
endif
endif
let bname=tempname()
exe ":sil w! ".bname
let tempfile=1
endif
try
if !filereadable(origFile)
let origFile=input("With which file to diff?: ","","file")
endif
if !filereadable(bname)
exe ":sil w! ".bname
endif
if empty(origFile)
throw "nofile"
endif
exe "sil sp"
exe "enew"
set bt=nofile
exe "sil r!".diffexpr." ".origFile." ".bname
exe "0d_"
exe "set ft=diff"
" Clean up temporary files
if tempfile == 1
exe "sil :!rm -f ". bname
let tempfile=0
endif
if origtemp == 1
exe "sil :!rm -f ". origFile
let origtemp=0
endif
catch
endtry
endf
Diese Funktion such automatisch nach einer passenden .orig Datei und nutzt diese, um den Patch in einem neuen Fenster zu erstellen. Falls keine .orig-Datei vorhanden ist, aber die aktuelle Datei modifiziert ist, wird automatisch die unmodifizierte Version der aktuellen Datei benutzt. Ansonsten fragt es nach einer zu vergleichenden Datei.
Aufruf:
:call DiffUnified()
Abhängigkeiten: diff muß vorhanden sein und das löschen der temporären Dateien funktioniert nur unter Unix/Linux. Man könnte evtl. auch den passenden del-Aufruf für die Windows-Version hinzufügen.
Dies ist eine Kopie von diesem Vim Tipp.
(Page 1 of 3, totaling 31 entries)
next page »

