Normalerweise arbeite ich mit 2 Fenstern, die vertikal geteilt sind.
Das Problem, das ich lösen möchte, ist: leichtes Hin- und Herspringen von der Header <-> Implementierungsdatei
Ich untersuche ohne Glück zwei Möglichkeiten, dies zu tun:
- Alternative Datei im aktuellen Fenster öffnen : Es gibt viele Möglichkeiten, dies zu tun. Ich kann jedoch keine Möglichkeit finden, sich daran zu erinnern, wo ich mich in der vorherigen Datei befunden habe (dh zum Header springen, zurückspringen, aber nicht an die gleiche Stelle, an der ich mich befand ).
- Alternative Datei im anderen Fenster öffnen : Dies ist genau definiert, da ich immer nur mit 2 Fenstern arbeite, mir jedoch die vim-Kenntnisse fehlen, um dies zu tun.
vim-windows
zach
quelle
quelle
:h line()
(generische Lösung): "Dieser automatische Befehl springt direkt nach dem Öffnen zur letzten bekannten Position in einer Datei, wenn die Markierung '" gesetzt ist :: au BufReadPost * if line ("' "")> 1 && Zeile ("'") <= Zeile ("$") | exe "normal! g` \" | endifAntworten:
Es gibt drei Hauptschritte, um das zu erreichen, was Sie verlangen:
Um den alternativen Dateinamen zu finden, möchten Sie den aktuellen Dateinamen in "root" und "extension" aufteilen. Ein einfacher Weg, dies zu tun, ist:
Wenn Sie wissen, dass Sie immer nur zwischen
.h
und.cpp
Dateien wechseln, können Sie die Erweiterung einfach von einer zur anderen ändern:Alternativ können Sie ein Wörterbuch erstellen, das bekannte Erweiterungen potenziell gültigen alternativen Erweiterungen zuordnet. Oder verwenden Sie
globpath()
, um alle möglichen Alternativen für die aktuelle Datei abzurufen:und wähle den ersten oder was auch immer. Ich bevorzuge den
globpath
Ansatz, mit einigen zusätzlichen Intelligenz, die ich später beschreiben werde. Nachdem Sie die Zielerweiterung ausgewählt haben, bilden Sie den vollständigen Zielpfad:Jetzt können Sie die alternative Datei im aktuellen Fenster öffnen:
Oder verwenden Sie
winnr()
, um die Nummer des "anderen Fensters" abzurufen (winnr("#")
ist das Fenster,<C-W>p
zu dem gesprungen wird, oder Sie können es hart codieren, wenn Sie wissen, dass es für Ihr Setup immer gleich ist) und tun Sie etwas wie:Dies gibt Ihnen eine wirklich einfache Lösung zum Öffnen alternativer Dateien. Es gibt ein paar Mängel bei dem obigen Ansatz, da ich ihn so geschrieben habe, dass er unkompliziert ist und ein bisschen von der Stange ist. Ich habe ein Plugin geschrieben , das das alternative Wechseln von Dateien "nach meinen Wünschen" durchführt (durch alle verfügbaren
globpath()
Ergebnisse blättern). Es behebt einige der Probleme mit der Einfachheit des oben genannten. Sie können die Implementierung überprüfen, wenn Sie mehr erfahren möchten.Schließlich der Punkt "Cursorposition wiederherstellen". Ich habe es zum letzten Mal gespeichert, da es orthogonal zum alternativen Schaltobjekt ist (mein Plugin behandelt es zum Beispiel nicht), aber Sie könnten es in Ihre Funktion einfügen, wenn Sie Ihr eigenes rollen wollen.
:help line()
hat einen automatischen Befehl, der nützlich ist, um die Cursorposition an der Stelle wiederherzustellen, an der sie sich befand, als die Datei zuletzt geöffnet wurde:Ich habe das oder etwas sehr Ähnliches einfach in meine aufgenommen,
.vimrc
da ich das Verhalten die ganze Zeit bevorzuge. Sie können den Code aber auch einfach woanders platzieren.quelle
Sie können das vim-fswitch- Plugin zusammen mit der folgenden Konfiguration in Ihrer
.vimrc
Datei verwenden:Wenn Sie eingeben
<Leader>
(die\
Standardeinstellung) , gefolgt vons
in einer.hpp
oder.h
Datei, wird das Plugin prüfen , ob eine passende.cpp
,.cc
oder.c
Datei vorhanden ist :include
durchsrc
im Pfad der aktuellen Dateisrc
Ordner über der aktuellen Datei schauenEs gibt mehr Optionen, mit denen Sie Ihr Projekt besser in die Dokumentation integrieren können . Es wird ein paar Minuten dauern, aber sobald Sie es richtig verstanden haben, sollten Sie es lieben. Ich persönlich finde es sehr flexibel und erweiterbar, und es funktioniert genauso gut für viele Arten von Dateien (.m, .h, .inl usw.).
quelle
In deinem
.vimrc
Auf diese Weise können Sie schnell zwischen Fenstern wechseln, indem Sie einfach die Richtungstasten Strg und VIM in der Startzeile verwenden. Das Besondere daran ist, dass Sie auf eine übliche Weise zu jedem Fenster springen können, einschließlich des Quickfix-Fensters.
Um schnell zwischen Header und Quelle zu wechseln, verwenden
vim-scripts/a.vim
Sie hier: https://github.com/vim-scripts/a.vim , verwenden Sie den:A
Befehl zum Umschalten.Randnotiz => Wenn Sie tmux verwenden, können Sie mit https://github.com/christoomey/vim-tmux-navigator nahtlos zwischen vim- oder nvim-Fenstern und einem Terminal wechseln.
quelle
Ich werde nur meine superschnelle und schmutzige Version teilen ...
Richten Sie meine Zuordnungen ein. alt-o öffnet die zugehörige Datei im selben Fenster, alt-shift-o öffnet in einem Split ...
Dann habe ich eine Funktion, die die Liste der zugehörigen Dateien abruft. Ich wollte es optimieren, um den Dateinamen am ersten und nicht am letzten Punkt zu entfernen, aber das ist immer noch eine Übung für den Leser.
Mein .vimrc-Setup ist manchmal auf jeden Client spezialisiert. Einige haben Quellcode und enthalten separate Ordnerhierarchien, andere haben sie zusammen. Standardmäßig gehe ich davon aus, dass sie alle in der Nähe sind, aber wenn ich jagen muss, werde ich eine Ersatzfunktion wie diese bereitstellen.
Dann schaue ich durch diese Liste von Dateien, um die Datei des aktuellen Puffers zu finden und gehe zur nächsten in der Liste. Es ist nicht oft so einfach wie ein .cpp / .h-Paar, oft habe ich andere Dinge, die berücksichtigt werden müssen.
Und schließlich die beiden Funktionen, die entweder im aktuellen Fenster geöffnet werden oder eine Teilung durchführen ...
In meiner Aufteilungsversion werden .cpp- und .c-Dateien immer in eine untergeordnete Aufteilung verschoben, andernfalls wird die Aufteilung standardmäßig (in meinem Fall über) geteilt.
quelle