it-swarm.com.de

Warum bevorzugen Vim-Experten Puffer gegenüber Tabs?

Ich verstehe nicht Puffer. Wenn ich drei Dateien auf derselben Registerkarte öffne und mein Fenster schließe, ist es im Allgemeinen ärgerlich, beim nächsten Öffnen einer dieser Dateien festzustellen, dass seltsame Auslagerungsdateien verweilen und mir lästige Nachrichten übermitteln. Aber immer wieder las ich, dass diese Dinge das Produktivitäts-Nirvana sind, das ich verpasse, und dass Tabs für die Plebejer gemacht wurden.

Also frage ich Sie, den Vim-Experten: Was sind die Vorteile der Verwendung von Puffern gegenüber Registerkarten? Ich verstehe nicht, wie sich der Unterschied grundlegend unterscheiden könnte, aber ich würde mich bei der Bedienung von Vim nur für Anfänger bis Fortgeschrittene halten. Ist :ls:b# wirklich so viel schneller als gt? Ich denke, es muss tiefer gehen.

178
2c2c

Wie ZyX auf #vim sagte, klingt diese Frage wie "Warum bevorzugen Vim-Experten das Schmackhafte gegenüber dem Warmen?" .

"Vim-Experten" bevorzugen keine Puffer gegenüber Registerkarten: Sie verwenden Puffer als Dateiproxys und Registerkarten als Arbeitsbereiche. Puffer und Registerkarten haben unterschiedliche Zwecke, daher macht einander vorzuziehen überhaupt keinen Sinn.

Das Problem mit Puffern und Tabulatoren ist eines von confusion , das durch eine Kombination unabhängiger Fakten verursacht wird.

  1. Die meisten "modernen" Texteditoren und IDEs verwenden eine tab Metapher, um geladene Dateien darzustellen. Diese Metapher dient als Informationssystem - sie zeigt dem Benutzer, welche Dateien geöffnet sind und in welchem ​​Zustand sie sich befinden - und als interaktives Gerät ermöglicht sie dem Benutzer, die geöffneten Dateien zu bearbeiten (neu anzuordnen, auszuwählen, zu schließen ...). Trotz ihrer vielen Einschränkungen sind Tabs überall und die Leute sind daran gewöhnt und erwarten überall.

  2. Vim hat - Registerkarten in 7.0 eingeführt, damit die Benutzer Ad-hoc-Arbeitsbereiche erstellen können. Nichts in ihren Funktionen, ihren spezifischen Optionen, ihren spezifischen Befehlen oder ihren :help - Abschnitten legt nahe, dass Registerkarten als Dateiproxys verwendet werden könnten oder sollten.

    Nichts außer dem Namen und das Auftreten von "Registerkarten", was natürlich zu viel Verwirrung führt.

  3. Ohne :set hidden, Das standardmäßig deaktiviert und nicht leicht zu finden ist, kann Vim nicht zu einem anderen Puffer wechseln, ohne den aktuellen zu schreiben oder die Änderungen zu verwerfen. Neue Benutzer, die diese Option nicht kennen, haben keine andere Wahl, als sich der Verwendung von umfangreichen Fenstern oder der nächstgelegenen "tab-ähnlichen" Funktion zuzuwenden, die sie finden können: Registerkarten.

"Registerkarte" ist eine unglückliche Namenswahl für diese Funktion, insbesondere in einer Ära, in der die Vorstellung vorherrscht, dass das Lesen von Dokumentationen Zeitverschwendung ist.

In Vim sind Registerkarten eine Abstraktion, die auf Fenstern aufgebaut ist, selbst eine Abstraktion, die auf Puffern aufgebaut ist. Jede neue Ebene fügt nützliche Funktionen hinzu, schränkt jedoch Ihren Workflow ein.

Der "Pufferweg"

Bei einem pufferbasierten Workflow werden die Dateien, mit denen Sie arbeiten, auf eine einzige Dimension verteilt. Sie können durch Ihre Puffer blättern, Sie können auf einen bestimmten Puffer zugreifen, indem Sie einen Teil seines Namens (mit Vervollständigung) oder seiner Nummer eingeben. Sie können zwischen den Puffern wechseln und sie ganz einfach ansteuern. Es gibt im Grunde keine Reibung.

  1. Acht Puffer offen, nur einer sichtbar:

    Eight buffers open

  2. Umschalten nach Nummer:

    Switching by number

  3. Nach Namen wechseln:

    Switching by name

Puffer sind Vims Datei-Proxys. Wenn Sie in Form von Dateien denken, denken Sie in Form von Puffern.

Der "Fensterweg"

Bei einem fensterbasierten Workflow werden Ihre "Dateien" in derselben "virtuellen" Dimension verteilt, wie wenn Sie die Puffer und nur in zwei anderen "physischen" Dimensionen verwenden würden . Die kartesischen Räume, in denen sich diese Dimensionen befinden, sind jedoch fast vollständig voneinander getrennt: Wenn Sie in einen anderen Puffer verschieben, bedeutet dies immer noch, dass Sie in eine andere Datei verschieben, in ein anderes Fenster jedoch nicht. Der Puffer, der der gewünschten Datei entspricht, wird möglicherweise in diesem Fenster angezeigt, er kann jedoch auch in einer anderen, möglicherweise in einer anderen Registerkarte oder überhaupt nicht angezeigt werden.

Unter Windows wird das Navigieren zwischen geöffneten Dateien entweder zu komplex oder zu einfach, selbst mit 'switchbuf' Und :sb. Meistens, weil Sie gezwungen sind, zwei Befehlssätze für das zu verwenden, was im Wesentlichen dasselbe ist: den Zugriff auf einen Puffer.

Windows kann wie unten beschrieben verwendet werden, hat jedoch nicht das Zeug zum Ersetzen von Puffern im Arbeitsablauf.

Hier arbeite ich an einem Vim-Farbschema. Die beiden Fenster sind unterschiedliche Ansichten desselben Puffers: Das obere Fenster dient als Referenz mit einer Tabelle der im Farbschema verwendeten Farbcodes, und das untere Fenster ist der Ort, an dem ich arbeite:

Working on a colorscheme

Windows sind nicht als Datei-Proxys konzipiert und können nicht in solche umgewandelt werden: Es handelt sich um "Container" oder "Ansichtsfenster", die Ihnen einen Blick in einen Puffer bieten sollen weniger.

Der "tab way"

Bei einem auf Registerkarten basierenden Workflow versuchen Sie im Wesentlichen, die Benutzererfahrung zu imitieren, die Sie von Ihrem vorherigen Editor gewohnt sind, während Sie die Natur der Registerkarten von Vim vollständig ignorieren. Wenn wir für einen Moment vergessen, dass diese Strategie im Allgemeinen sehr unproduktiv ist, ist es ebenso wie bei Windows unmöglich, Vim zu zwingen, sich an diese "eine Datei = eine Registerkarte" zu halten. Paradigma ohne zu verlieren viel Flexibilität.

Wenn Sie weiterhin mit denselben Dateien wie oben arbeiten, beansprucht die Registerkarte einen erheblichen Platz, der praktisch keinen Nutzen bringt. Alle meine Dateien und meine Tabs heißen javascript*.vim, Daher kann ich 3gt Nicht ausführen und bin sicher, dass ich am richtigen Ort lande und es unmöglich ist, einen bestimmten Tab mit Namen zu erreichen . Hinzu kommt die Tatsache, dass sein Label sehr wohl das sehr wenig hilfreiche, aber vollkommen logische sein kann [Quickfix List]… Da es keine praktische Möglichkeit gibt, eine Datei/einen Puffer an eine Registerkarte zu binden, bleibt Ihnen im Grunde genommen nur eine praktische übrig Weg, um zwischen Registerkarten/Puffern/Dateien zu navigieren: Radfahren.

Und ja, mein Tab ist mit nur 8 Tabs überfüllt. Stellen Sie sich vor, ich hätte 20!

  1. Acht Puffer öffnen sich in acht Registerkarten (falsch)

    Wrong

  2. Zwei Registerkarten für zwei bestimmte Aufgaben (rechts)

    Right

Registerkarten sind "Container" oder "Ansichtsfenster", die ein oder mehrere Fenster enthalten sollen, selbst auch "Container", die Puffer enthalten sollen.

Abschließend

"Vim-Experten" (nehmen wir an, ich kann sprechen, als wäre ich einer) ziehen Puffer nicht den Tabs vor: Sie verwenden nur Vim, wie es entworfen wurde, und sind mit diesem Design vollkommen vertraut:

  • "Vim-Experten" haben 2, 30 oder 97 Puffer geladen und sind sehr froh, dass sie sich nicht mit räumlicher Verteilung befassen müssen.

  • wenn sie zwei Dateien vergleichen oder in einem Teil des aktuellen Puffers arbeiten müssen, während ein anderer als Referenz dient, verwenden "Vim-Experten" Fenster, weil sie so verwendet werden sollen.

  • wenn sie eine Weile an einem separaten Teil des Projekts arbeiten müssen, ohne die aktuelle Ansicht zu verändern, laden "Vim-Experten" eine brandneue Registerkarte.

419
romainl

Früher habe ich jeden Puffer in einem separaten Tab aufbewahrt, aber ich wurde ständig müde gt und gTüberall herum.

Ich hatte auch das Gefühl, dass Puffer zu schwierig zu verwalten sind.

Hier sind einige Techniken, die meine frühere Meinung völlig verändert haben:

Hier ist mein typischer Workflow:

  • Öffnen Sie Vim und verwenden Sie :e (normalerweise mit einem regulären Ausdruck wie :e src/**/F*Bar.js), um einen Puffer zu öffnen
  • Erkenne, dass ich eine andere Datei öffnen muss. Verwenden Sie dazu auch :e. Wenn ich zwischen diesem und dem aktuell geöffneten Puffer wechseln möchte, verwende ich :sp oder :vsp, um ihn in einem separaten Fenster zu öffnen.
  • Wiederholen Sie diesen Vorgang, bis ich die 3-5 Dateien habe, zwischen denen ich wechseln werde. Verwenden Sie dazu die Techniken in der obigen Aufzählung, um zwischen Ihren Puffern zu wechseln.
  • Wenn ich mit meinen Puffern "von vorne anfangen" möchte, schließe Vim und öffne es erneut.

Ich hatte das Gefühl, dass es nach ungefähr einer Woche, nachdem ich diese neuen Muster erzwungen hatte, viel einfacher wurde, mir vorzustellen, welche Puffer ich geöffnet hatte und wie ich mit nur wenigen automatischen Bewegungen zu einem von ihnen gelangen konnte.

57
Jonathan.Brink

Der Nachteil der Registerkarten ist, dass Sie jeweils nur den Inhalt eines Registers sehen können. Wenn Sie sie wie in einem Browser verwenden, können Sie mehrere Puffer nebeneinander anzeigen oder sogar einzelne Teile derselben Datei in Splits anzeigen. Daher empfehlen viele, Registerkarten nur zum Trennen verschiedener Arbeitsbereiche zu verwenden (z. B. haben Sie eine für ein Java-Projekt, eine andere für eine Aufgabenliste, eine dritte für ein seitliches Script).

Die von Ihnen beschriebenen Probleme lassen vermuten, dass Sie Vim falsch verwenden. Entweder haben (meistens) eine einzige, dedizierte Instanz. Puffer, die verborgen werden, werden dann einfach "wieder angezeigt", wenn Sie sie erneut bearbeiten (und Sie können sie jetzt mit der Pufferliste abrufen), und es werden keine Auslagerungsdateinachrichten angezeigt. Oder verwenden Sie separate Vim-Instanzen pro Projekt-/Datei-/Bearbeitungssitzung, machen Sie es sich jedoch zur Gewohnheit, jede Instanz vollständig zu :quiten, wenn Sie mit der Datei fertig sind.

10
Ingo Karkat

Ein weiterer Tipp: Wenn Sie den Puffernamen als Argument für: Puffer verwenden, müssen Sie keine vollständigen Namen angeben. Wenn jedoch mehr als ein Puffer mit dem angegebenen Argument übereinstimmt, werden die Puffer nicht gewechselt.

Jedes Fragment des Puffernamens kann zur Übereinstimmung verwendet werden. Wenn Sie beispielsweise über die Puffer request_manager.Java und queue_manager.Java verfügen, stimmen :buffer que oder :b que mit beiden überein, wechseln jedoch zu queue_manager.Java, da sie zu Beginn übereinstimmen.

6
Julius Martin

Ich benutze Tabs, Ctrl-P und Vim Sessions in meinem Workflow und haben seit über einem Jahr:

  • Ich habe ) und ( "Gehe zum nächsten Tab" und "Gehe zum vorherigen Tab" zugeordnet. tn öffnet eine neue Registerkarte. Ich benutze auch tabm, um die Dinge zu organisieren.

  • Ich benutze Vim-Sitzungen für Dateigruppen, die sich auf die aktuelle Story/den aktuellen Bug beziehen, an dem ich arbeite, normalerweise nach Kategorien. Diese Sessions werden im Laufe des Prozesses überschrieben.

  • Ich habe noch nichts Besseres gefunden als Ctrl-PEs dauert jedoch ein wenig, bis alle Dateien zum Auffinden verarbeitet sind.

3
ShangoThrax

Fügen Sie diese zu Ihrem .vimrc hinzu und beginnen Sie, Puffer zu lieben:

:nnoremap <Tab> :n<cr>
:nnoremap <S-Tab> :N<cr>

Auf diese Weise können Sie in normaler Modus über vorwärts/rückwärts durch sie blättern Tab/ShiftTab.

0
sjas

Ich lade "ausgewählte" Puffer als Registerkarten, um schnell (TAB/S-TAB) zwischen ihnen hin- und herschalten zu können. Der Rahmen der Arbeitsbereiche passt hier, da für mich Puffer VS-Registerkarten meistens die Sichtbarkeitssache ist. Ich kann wichtige/Arbeitsdateien in Fenstern und Registerkarten platzieren und diejenigen ausblenden, die ich aktuell nicht im Hintergrund verwenden muss, ohne sich Pfade merken zu müssen, oder nehmen Sie sich Zeit, um sie zu suchen und wieder zu laden, wenn der Bedarf besteht. Dies ermöglicht die Bearbeitung mehrerer Aufgaben oder Projekte in einer VIM - Sitzung. Ich denke, dies war früher bei Rechnern mit geringem Arbeitsspeicher wichtig, eignet sich aber auch für die Bündelung aller Bearbeitungsaufgaben in einem Anwendungsrahmen. Ich habe auch Puffer-Shortcuts auf Ctrl-Right/Left gesetzt, so dass ich auch schnell durch verschiedene Puffer wechseln kann. 

Unterm Strich kann man nur einige Fenster für seine Zwecke aufteilen, so viel wie der Bildschirminhalt ist, aber man kann mehrere Fenstereinstellungen in mehreren Registerkarten halten, wodurch der Arbeitsbereich erweitert und der Arbeitsablauf verbessert wird, wodurch die komplizierte Aufgabe, die mehrere Dateien umfasst, bequem aufgeteilt werden kann . 

Bei den Auslagerungsdateien können Sie VIM anweisen, alle Dateien in einem Ordner Ihrer Bezeichnung zu speichern. Für diesen Gebrauch :set directory.

0
elig

Ich möchte eine brillante Implementierung aus einer guten Anzahl von Jahren vorschlagen: kien/tabman.vim . Es wird Folgendes klargestellt:

  • Man kann so viele Puffer haben, die irgendwo sorgfältig versteckt sind;
  • Registerkarten dienen dazu, Puffer auf kreative Weise anzuzeigen .
    • Mit einem geeigneten Tabline-Plugin können Sie alle versteckten Puffer in der obersten Zeile (Tabline) anzeigen.
    • Nach meiner Erfahrung mit vim-airline zeigt die Tabline nur sehr wenige relevante Informationen an, wenn ich eine neue Registerkarte erstelle.
    • Zwei Tags nehmen den Tabline-Slot nebeneinander ein und verschwenden den Rest der horizontalen Räume
    • Am schlimmsten habe ich keine Ahnung mehr von den verborgenen Puffern.

Es war eine wunderbare Wiederentdeckung dieses magischen Plugins, das auch in meiner Vim-Konfiguration für eine gute Anzahl von Jahren bleiben sollte .. Während ich weiter nach etwas suchen würde, das auch alle versteckten Puffer anzeigt, TabMan ist mein Supermann, wenn es darum geht, aus einer Vogelperspektive zu sehen, wie Puffer auf verschiedenen Registerkarten angeordnet waren.

0
llinfeng