2013-12-11 5 views
6

Kann Vim automatisch Änderungsbefehle wie dd, O und u an alle geöffneten Fenster anwenden? Ich schreibe ein LaTeX-Dokument in einem Fenster und möchte ein zweites Fenster für meine Randnotizen, TODOs usw. verwenden (ähnlich wie Cornell notes). Mein Vim Tab sieht aus wieAutomatisches Anwenden von Änderungsbefehlen in mehreren Fenstern in Vim

|1 \documentclass{article}  |1 
|2 \begin{document}    |2 
|3 Lorem ipsum dolor sit amet, |3 TODO: reword this. 
| …consectetur adipisicing elit.| 
|4 Ut enim ad minim veniam, quis |4 Could use some more examples. 
| …nostrud exercitation ullamco.| 
|5        |5 Put bibliography here. 
|6 \end{document}    |6 

Ich brauche wrap zu halten (und vorzugsweise showbreak) umgeschaltet, wie meine Sätze sind oft ziemlich lang.

Bisher habe ich und cursorbind erfolgreich verwendet, um die beiden Dateien parallel zu navigieren. Wenn ich jedoch Zeilen in eine Datei einfüge oder lösche, bricht die Ausrichtung ab. Zum Beispiel könnte ich eine Linie (mit o) im linken Fenster einfügen, ein Paket zu laden,

|1 \documentclass{article}  |1 
|2 \usepackage{hyperref}   |2 
|3 \begin{document}    |3 TODO: reword this. 
|4 Lorem ipsum dolor sit amet, |4 Could use some more examples. 
| …consectetur adipisicing elit.| 
|5 Ut enim ad minim veniam, quis |5 Put bibliography here. 
| …nostrud exercitation ullamco.| 
|6        |6 
|7 \end{document}    |~ 

Nun ist alle Kommentare im rechten Fenster Herstellung sind auf den falschen Linien. Wenn meine Bearbeitung im linken Fenster auch eine neue Zeile nach Zeile 1 im rechten Fenster eingefügt hat, bleibt die Ausrichtung erhalten. Ich hatte Erfolg mit dem Befehl windo (z. B. windo normal dd, um eine Zeile in beiden Dateien zu löschen); sollte ich dd zu window normal dd und ähnlich für jeden Befehl zuordnen, den ich verwenden könnte? Wie würde das bei Befehlen wie o funktionieren, die Sie im Einfügemodus belassen?

Um das Problem zu komplizieren, würde ich idealerweise jede Aktion, die ein Newline-Zeichen erstellt oder gelöscht, in beiden Dateien repliziert werden. Beispielsweise sollten Wagenrückläufe im Einfügemodus abgefangen und im anderen Fenster wiederholt werden.

Gibt es eine bessere Möglichkeit, dies zu tun (ich bleibe bei Vim, wäre aber daran interessiert, von anderen Editoren zu hören, die diese Funktionalität haben), oder sollte ich einfach meine Kommentare in der Dokumentendatei behalten?

+2

Keine Antwort, aber ist es nicht das, wofür '%' Kommentare sind? Einfach die Zeilen rechts in das Dokument einfügen, wo sie hingehören. Du kannst sie immer noch leicht entfernen, wenn du musst: ': g/^ \ s *%/d'. – glts

Antwort

2

In Vim werden Sie nicht in der Lage sein, ein perfektes System zu implementieren, das zu 100% vollständig und konsistent ist.

Während Befehle wie dd direkt auf den anderen Puffer angewendet werden können, erfordert der Einfügemodus bereits, dass Sie auf das Ende der Texteingabe warten. Ein Befehl wie u kann nicht direkt angewendet werden; Sie müssen darauf achten, was sich geändert hat, und dies auf den anderen Puffer anwenden. Dasselbe gilt für die meisten Ex-Befehle wie :global, :substitute.

Anstatt die meisten Befehle neu zu mappen, würde ich lieber :autocmd s bei Ereignissen wie CursorHold,InsertLeave definieren, die die Gesamtzahl der Zeilen mit dem zuvor gespeicherten Wert vergleichen und dann den anderen Puffer entsprechend der aktuellen Zeile anpassen. Wenn Sie bereit sind zu akzeptieren, dass bestimmte Änderungen durch dieses Schema fallen und Sie entweder diese vermeiden oder manuell korrigieren, kann dies eine praktikable Lösung sein.

3

Nizza, ich habe noch nie von der Cornell notes gehört, aber ich bezweifle, dass es möglich ist, zwei Puffer so, wie Sie ohne hickups synchronisieren möchten (ich würde gerne obwohl falsch erwiesen).

Aber was, wenn wir ein bisschen zurücktreten und anstatt zu versuchen, zwei Puffer zu synchronisieren, versuchen wir, nur einen Puffer zu verwenden, indem wir einen Gutter bei Spalte 120 erzeugen?

Workflow-

  • Erstellen ein neues Dokument
  • :set virtualedit=all
  • Im Normalmodus-Typ [email protected]='120|i|^M^[' eine Rinne an der Position 120 über Leitungen 80 zu schaffen.
  • das Dokument schreiben und Notizen
  • Speichern, um das Dokument

^M wird als ctrl-v eingegeben
^[eingegeben als ctrl-vesc eingeben

Vorteile

  • Navigieren und Löschen des Dokuments und Notizen vereinfacht. Schließlich arbeiten Sie nur in einem Puffer.
  • Sie müssen nur eine Datei öffnen, um sowohl Dokumente als auch Notizen zu haben.
  • Wenn Sie die meiste Zeit damit verbringen, ein vorhandenes Dokument zu navigieren und zu ändern, könnte dies eine praktikable Lösung sein.

Nachteile

  • die Noten Schreiben wird komplizierter, weil Sie verwenden müssen, werden R(ersetzen) viel statt i(Einsatz) nicht vermasseln die Gosse, die wir erstellt haben.
  • Das Ändern der Größe von zwei Puffern ist einfacher als das Ändern der festen Rinne.
  • Wenn Sie die meiste Zeit damit verbringen, neue Dokumente zu erstellen, wird es schmerzhaft.
+0

@glts - ja es tut, thx. –

Verwandte Themen