Ich weiß nicht verstehen Puffer. Wenn ich 3 Dateien auf derselben Registerkarte öffne und mein Fenster schließe, ärgere ich mich im Allgemeinen darüber, dass ich beim nächsten Öffnen einer dieser Dateien merkwürdige Auslagerungsdateien habe, die verweilen und mir lästige Nachrichten geben. 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.
Ich frage Sie, den Vim-Experten: Was sind die Vorteile der Verwendung von Puffern gegenüber Registerkarten? Ich sehe nicht ein, wie der Unterschied grundlegend anders sein könnte, aber ich würde mich beim Betrieb von Vim nur als Anfänger bis Fortgeschrittene betrachten. Ist das :ls
:b#
wirklich viel schneller als gt
herumlaufen? Ich denke, es muss tiefer gehen.
:split
in "Fenster" tippen. Wenn Sie alle Ihre Puffer (Dateien) in separaten Registerkarten haben, erhalten Sie diese gleichzeitige Ansicht nicht. Ich würde empfehlen, vim zunächst mit 1 Registerkarte zu lernen und sich an Splits zu gewöhnen.Antworten:
Wie ZyX auf #vim sagte, klingt diese Frage wie "Warum bevorzugen Vim-Experten lecker gegenüber warm?" .
"Vim-Experten" bevorzugen keine Puffer gegenüber Registerkarten: Sie verwenden Puffer als Datei-Proxys und Registerkarten als Arbeitsbereiche. Puffer und Registerkarten haben unterschiedliche Zwecke, daher macht es keinen Sinn, einander vorzuziehen.
Das Problem mit Puffern und Registerkarten ist eine Verwirrung , die durch eine Kombination unabhängiger Fakten verursacht wird.
Die meisten "modernen" Texteditoren und IDEs verwenden eine Tabulatormetapher , um geladene Dateien darzustellen. Diese Metapher fungiert als Informationssystem - sie zeigt dem Benutzer, welche Dateien geöffnet sind und welchen Status sie haben - und als interaktives Gerät ermöglicht sie dem Benutzer, diese geöffneten Dateien zu bearbeiten (neu anzuordnen, auszuwählen, zu schließen ...). Trotz ihrer vielen Einschränkungen sind Registerkarten überall und die Leute sind an sie gewöhnt und erwarten sie überall.
Vim führte in 7.0 Registerkarten ein, mit denen 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 Datei-Proxys verwendet werden könnten oder sollten.Natürlich nichts außer dem Namen und dem Erscheinungsbild von "Registerkarten", was zu viel Verwirrung führt.
Ohne
:set hidden
, das standardmäßig deaktiviert und nicht leicht zu finden ist, macht es Vim unmöglich, zu einem anderen Puffer zu wechseln, ohne den aktuellen zu schreiben oder seine Änderungen aufzugeben. Neue Benutzer, denen diese Option nicht bekannt ist, haben keine andere Wahl, als sich der Verwendung von Windows 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 Zeit, in der die Idee dominiert wird, dass das Lesen von Dokumentation 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 Abschluss) oder seiner Nummer eingeben. Sie können zwischen Puffern wechseln und sie ganz einfach als Ziel festlegen. Es gibt im Grunde keine Reibung.
Acht Puffer geöffnet, nur einer sichtbar:
Umschalten nach Nummer:
Nach Namen wechseln:
Puffer sind Vims Datei-Proxys. Wenn Sie in Dateien denken, denken Sie in Puffern.
Der "Fensterweg"
Bei einem fensterbasierten Workflow werden Ihre "Dateien" in derselben "virtuellen" Dimension verteilt, wie wenn Sie nur Puffer verwenden würden, und in zwei anderen "physischen" Dimensionen. Die kartesischen Räume, in denen sich diese Dimensionen befinden, sind jedoch fast vollständig voneinander getrennt: Das Verschieben in einen anderen Puffer bedeutet immer noch "Verschieben in eine andere Datei", das Verschieben in ein anderes Fenster jedoch nicht. Der Puffer, der der gewünschten Datei entspricht, kann in diesem Fenster angezeigt werden, er kann jedoch auch in einem anderen, möglicherweise auf einer anderen Registerkarte oder überhaupt nicht angezeigt werden.
Mit Windows wird das Navigieren zwischen geöffneten Dateien entweder mit
'switchbuf'
und zu komplex oder zu einfach: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 hat ihre Verwendung, wie unten beschrieben, aber sie haben nicht das Zeug, Puffer im Workflow eines anderen zu ersetzen.
Hier arbeite ich an einem Vim-Farbschema. Die beiden Fenster sind unterschiedliche Ansichten desselben Puffers: Das obere dient als Referenz mit einer Tabelle der im Farbschema verwendeten Farbcodes, und im unteren Fenster arbeite ich:
Windows ist nicht als Datei-Proxy konzipiert und kann nicht zu einem solchen gemacht werden: Es handelt sich um "Container" oder "Ansichtsfenster", die Ihnen einen Blick in einen Puffer bieten sollen. Nicht mehr und nicht weniger.
Der "Tab-Weg"
Mit einem tabulatorbasierten Workflow versuchen Sie im Wesentlichen, die Benutzererfahrung nachzuahmen, 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, dieses Paradigma "eine Datei = eine Registerkarte" einzuhalten, ohne viel Flexibilität zu verlieren .
Die Tabline arbeitet immer noch mit denselben Dateien wie oben und nimmt einen erheblichen Speicherplatz ein, der praktisch keinen Nutzen bringt. Alle meine Dateien und alle meine Registerkarten werden aufgerufen,
javascript*.vim
sodass ich nicht3gt
sicher sein kann, dass ich am richtigen Ort lande und es unmöglich ist, eine bestimmte Registerkarte mit Namen zu erreichen. Hinzu kommt, dass die Beschriftung sehr wenig hilfreich, aber durchaus logisch sein kann[Quickfix List]
. Da es keine praktische Möglichkeit gibt, eine Datei / einen Puffer an eine Registerkarte zu binden, bleibt Ihnen im Grunde nur eine praktische Möglichkeit, zwischen Registerkarten zu navigieren / Puffer / Dateien: Radfahren.Und ja, meine Tabline ist mit nur 8 Tabs überfüllt. Stellen Sie sich vor, ich hätte 20!
Acht Puffer öffnen sich auf acht Registerkarten (falsch)
Zwei Registerkarten für zwei spezifische Aufgaben (rechts)
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) bevorzugen keine Puffer gegenüber Tabs: Sie verwenden Vim nur so, wie es entworfen wurde, und sind mit diesem Design vollkommen zufrieden:
"Vim-Experten" haben 2, 30 oder 97 Puffer geladen und sind sehr froh, dass sie sich nicht mit der räumlichen 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 verwendet wird, verwenden "Vim-Experten" Windows, da sie auf diese Weise verwendet werden sollen.
Wenn sie eine Weile an einem separaten Teil des Projekts arbeiten müssen, ohne ihre aktuelle Ansicht zu beeinträchtigen, laden "Vim-Experten" eine brandneue Registerkarte.
quelle
*.c
,*.h
,scripts/*
undtest/**/*.lua
Dateien). Da mein Terminal nur 239 Spalten breit ist, kann der Ansatz „Eine Datei pro Tab“ nicht verwendet werden.Früher habe ich jeden Puffer in einem eigenen Register zu halten, aber ich wuchs ständig müde gtund gT-ing ü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:
:b
. Das wird überraschend schnell. Siehe vim, schnelles Wechseln zwischen Dateien mit Vanilla Vim (keine Plugins)Hier ist mein typischer Workflow:
:e
(normalerweise mit einem regulären Ausdruck wie:e src/**/F*Bar.js
), um einen Puffer zu öffnen:e
auch dafür. Wenn ich zwischen diesem Puffer und dem aktuell geöffneten Puffer wechseln möchte, verwende ich ihn:sp
oder:vsp
öffne ihn in einem separaten Fenster.Ich hatte das Gefühl, dass es nach ungefähr einer Woche, in der diese neuen Muster erzwungen wurden, viel einfacher wurde, mir vorzustellen, welche Puffer ich geöffnet hatte und wie ich mit nur wenigen automatischen Strichen zu einem von ihnen gelangen konnte.
quelle
gT
der Befehl zum Wechseln der Registerkarten war. Ich hatte nach dem Ersatz für gesuchtctrl+tab
. Vielen Dank, dass Sie einem neuen Benutzer wirklich geholfen haben, anstatt ihn nur dumm zu machen.nnoremap <leader>b :ls<CR>:b<space>
ist sehr gut, um die Puffer schnell zu wechseln, da es Ihnen eine Liste der aktuell geöffneten Puffer zeigt. Außerdem werden Teilnamen akzeptiert (solange nur eine Übereinstimmung vorliegt).ctrl N
oderctrl P
ausführen (P ist das, was ich normalerweise verwende), erhalten Sie eine Liste von Wörtern, um die Eingabe zu beenden. Es ist intelligent, basierend auf Ihrer aktuellen Puffer, solche in Splits, solche, die Sie gerade gesehen haben, und jede andere geöffnete Datei!Der Nachteil von Registerkarten ist, dass Sie jeweils nur den Inhalt sehen können. Wenn Sie sie also wie in einem Browser verwenden, verlieren Sie die Möglichkeit, mehrere Puffer nebeneinander oder sogar einzelne Teile derselben Datei in Teilungen anzuzeigen. Daher empfehlen viele, Registerkarten nur zum Trennen verschiedener Arbeitsbereiche zu verwenden (z. B. eine für ein Java-Projekt, eine andere für eine Aufgabenliste, eine dritte zum Hacken eines Skripts an der Seite).
Die von Ihnen beschriebenen Probleme lassen den Eindruck entstehen, dass Sie Vim falsch verwenden. Entweder haben (meistens) eine einzelne, dedizierte Instanz. Dann werden ausgeblendete Puffer einfach "wieder angezeigt", wenn Sie sie erneut bearbeiten (und Sie können sie jetzt über die Pufferliste abrufen), und es werden keine Swap-Dateimeldungen angezeigt. Oder verwenden Sie separate Vim-Instanzen pro Projekt / Datei / Bearbeitungssitzung, aber machen Sie es sich dann zur Gewohnheit,
:quit
jede Instanz vollständig zu bearbeiten, wenn Sie mit der Datei fertig sind.quelle
Ein weiterer Tipp: Wenn Sie den Puffernamen als Argument für: buffer verwenden, müssen Sie nicht ganze Namen angeben. Wenn jedoch mehr als ein Puffer mit dem angegebenen Argument übereinstimmt, werden die Puffer nicht umgeschaltet.
Jedes Fragment des Puffernamens kann zum Abgleichen verwendet werden. Zum Beispiel, wenn Sie die Puffer haben
request_manager.java
undqueue_manager.java
dann:buffer que
oder:b que
mit beiden übereinstimmen, aber zu queue_manager.java wechseln, wie es am Anfang übereinstimmt.quelle
Ich verwende Tabs, Ctrl- Pund Vim-Sitzungen in meinem Workflow und habe seit über einem Jahr:
Ich habe )und bin ("zum nächsten Tab" bzw. "zum vorherigen Tab" zugeordnet. tnöffnet eine neue Registerkarte. Ich benutze auch Tabm, um die Dinge zu organisieren.
Ich verwende Vim-Sitzungen für Gruppen von Dateien, die sich auf die aktuelle Story / den aktuellen Fehler beziehen, an dem ich arbeite, normalerweise nach Kategorien. Diese Sitzungen werden im Laufe des Prozesses überschrieben.
Ich habe noch nichts Besseres gefunden als Ctrl- P, aber es dauert ein bisschen, bis alle Dateien gefunden sind.
quelle
Wirft 2c in den Stapel.
TLDR;
:b *part-of-filename*
Dies ist der beste Weg, um eine Datei in der Pufferliste zu finden, dh sie ist SCHNELLER und hat eine geringere kognitive Belastung als Puffernummern, Registerkarten oder Fenster zum Verfolgen von Dateien.Es ist nichts für mich, 30 Puffer offen zu haben (dh ich habe mich nicht um die Hauswirtschaft gekümmert), und das Schöne an den verwendeten Puffern ist, dass es mich überhaupt nicht verlangsamt. Tatsächlich beschleunigt es die Dinge, wenn ich vier Tage nach dem Öffnen der Datei, die ich benötige,
:b *part-of-filename*
anrufe und sie auf magische Weise erscheint, was Mitarbeiter und toady Kollektivisten gleichermaßen beeindruckt.Puffer sind für Dateien.
Effektiv sein:
:e
ls
Sie die ganze Zeit, wenn Sie anfangen, ein gutes mentales Modell zu erhalten (Sie können nicht verstehen, was Sie nicht sehen können, weder mental noch wörtlich).:q
bläst es:b
in Ihr Muskelgedächtnis ein:b1
ist gut für die erste Datei, von der Sie wissen, dass Sie sie geöffnet haben, da sonst Zahlen und Buchstaben schnell ungeschickt werden:b#
ist gut für den Wechsel zu Ihrer letzten Datei, was ein häufiger Bedarf ist:bd#
ist gut geeignet, wenn Sie zu einer temporären Datei gewechselt haben, das getan haben, was Sie tun mussten, mit zurückgeschaltet:b#
haben und diese temporäre Datei jetzt schließen möchten:b *part-of-filename*
Dies ist ansonsten der beste Weg, um eine Datei zu finden, die Sie in der Liste benötigen, dh sie ist SCHNELLER und hat eine geringere kognitive Belastung als Puffernummern, Registerkarten oder Fenster zum Verfolgen von Dateien.Das einzige Ärgernis
:b *part-of-filename*
ist, dass Sie die Datei manchmal noch nicht geöffnet haben und:e path/to/full-filename
zuerst zurückgehen müssen.Registerkarten dienen zur Unterscheidung von wirklich nicht verwandten Dateien.
Oder ein bestimmtes Windows-Layout griffbereit zu halten (Haftungsausschluss: Ich habe es selbst nie dafür verwendet).
Oder für Dateien, die selten verwendet werden, aber vorhersehbar benötigt werden. Für mich ist das normalerweise eine
commitMessage
Datei, die ich während der Arbeit mit Anmerkungen versehen muss, damit ich nicht zu viel nachdenken muss, wenn es darum geht, ein Commit durchzuführen.gt
ist schneller als:b com<enter>
(wenn Sie Glück haben, sonst:b com<tab><enter>
):tabe commitMessage
gt
odergT
auch ein Muskelgedächtnis FavoritFensteraufteilungen dienen zum visuellen Vergleich von Informationen
Oder ich habe sofortigen Zugriff auf wichtige Informationen (ehrlich gesagt, wenn diese Informationen nicht irgendwie etwas sind, mit dem ich live aktualisieren muss, z.
:e
B. eine Protokolldatei, ziehe ich den Inhalt normalerweise einfach in die aktuelle Datei und beschäftige mich dort damit).:vsp
oderC-w v
öffnet eine vertikale Teilung dh links | Richtig, dann verwenden Sie:b
oder:e
, um die gewünschte Datei zu erhalten:sp
oderC-w s
öffnen Sie eine horizontale Teilung, dh oben / untenC-w C-w
dh doppelte Strg-W, dreht Sie um die verfügbaren FensterC-w c
aktuelles Fenster schließenC-w o
Schließen Sie alle anderen Fenster und halten Sie NUR den aktuellen Standquelle
:b#
und:bd#
!Fügen Sie diese zu Ihren hinzu
.vimrc
und fangen Sie an, Puffer zu lieben:Auf diese Weise können Sie im normalen Modus über Tab/ vorwärts / rückwärts durchlaufen ShiftTab.
quelle
<C-I>
. Karte<C-Tab>
stattdessen, wenn Sie wirklich wollen.:n
und:N
beziehen sich auf die Argumentliste, nicht offene Puffer. Du würdest wollen:bn
und:bp
(:bnext
und:bprev
). tpope's unbeeinträchtigt bietet Mappings]b
und[b
dafür (und andere gute Sachen), wenn Sie wollen.(
und)
, oder<left>
und<right>
Pfeile, wären wahrscheinlich weniger nützliche Tasten zum Überschreiben als Tabulatoren, wenn Sie wirklich eine kurze Zuordnung wünschen.Ctrl + Tab
da dies die meisten anderen GUI-Editoren und Browser verwenden.Ich möchte eine brillante Implementierung von vor einigen Jahren vorschlagen : kien / tabman.vim . Es wird Folgendes klargestellt:
Es war eine wunderbare Wiederentdeckung dieses magischen Plugins, das auch einige Jahre in meiner Vim-Konfiguration bleiben sollte. Während ich weiterhin nach etwas suchen würde, das auch alle versteckten Puffer anzeigt, ist TabMan mein Übermensch, wenn es darum geht, aus der Vogelperspektive zu sehen, wie Puffer auf verschiedenen Registerkarten angeordnet sind.
quelle
Tabs und Puffer sind zwei verschiedene Standards in Vi. Lesen Sie diese drei Definitionen:
Lesen Sie diesen Artikel für mehr https://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs/
quelle
Ich lade "ausgewählte" Puffer als Registerkarten, um schnell (TAB / S-TAB) zwischen ihnen umzuschalten. Der Rahmen der Arbeitsbereiche passt hierher, da für mich Puffer VS-Registerkarten meistens die Sichtbarkeitssache sind. Ich kann wichtige / Arbeitsdateien in Fenstern und Registerkarten einfügen und diejenigen ausblenden, die ich derzeit nicht im Hintergrund verwenden muss, ohne mich an Pfade erinnern zu müssen, oder mir Zeit nehmen, um sie zu suchen und erneut zu laden, wenn dies erforderlich ist. Dies ermöglicht die Bearbeitung mehrerer Aufgaben oder Projekte in einer VIM-Sitzung. Ich denke, dies war früher bei Maschinen mit wenig Arbeitsspeicher wichtig, eignet sich aber auch gut, um alle Bearbeitungsaufgaben unter einem Anwendungsrahmen zu konzentrieren. Ich habe auch Verknüpfungen zum CtrlVerschieben von Puffern auf -Richtig / Links eingestellt, damit ich auch schnell durch verschiedene Puffer wechseln kann.
Unterm Strich kann man für seine Zwecke nur so viele Fenster aufteilen, wie es für den Bildschirm erforderlich ist. Man kann jedoch mehrere Fenstereinstellungen auf mehreren Registerkarten speichern, wodurch der Arbeitsbereich erweitert und der Workflow verbessert wird, sodass komplizierte Aufgaben, die mehr als eine Datei umfassen, bequem aufgeteilt werden können .
Für die Auslagerungsdateien können Sie VIM anweisen, alle in einem Ordner Ihrer Bezeichnung zu speichern. Für diesen Gebrauch
:set directory
.quelle