In Vim, wie sich schnell wechseln, zwischen .h und .cpp-Dateien mit dem gleichen Namen?
Angenommen ich habe einen Ordner mit vielen .h und .cpp-Dateien. Ich Häufig müssen Sie Folgendes tun:
- eine Datei öffnen
prefix_SomeReallyLongFileName.h
, - ein paar änderungen vornehmen,
- und öffnen Sie dann
prefix_SomeReallyLongFileName.cpp
.
Ich kann dies tun, indem Sie :e <filename>
mit auto-complete, aber als Präfix ist die gleiche für viele der Dateien, das wird unbequem.
Gibt es eine schnelle Möglichkeit zum öffnen einer Datei mit dem gleichen Namen wie die aktuelle Datei, aber eine andere Endung?
Anderen Menschen in dieser situation auch, und wenn ja, was ist Ihre bevorzugte Art und Weise der Navigation durch die C++ - Dateien in einem Verzeichnis? Danke.
- Ich bin mir nicht sicher, ob dies geschieht, um viele Menschen. In der Regel haben Sie Ihre header-Dateien in einem separaten Ordner als Quell-Dateien (zum Beispiel
include/
undsrc/
), also, was Sie Fragen, nicht passiert (es sei denn, Suche nach der Datei in../include/
oder../src/
). Was ich normalerweise tun ist, öffnen Sie zwei terminals, halten Sie die header-Datei, geöffnet in einem, und die Quell-Datei in die andere, da in der Regel gehe ich hin und her zwischen den Dateien. - Geben Sie
:e
, drücken Sie dann die Strg-r %. Dies wird die aktuellen Dateinamen auf der Linie, dann ersetzen Sie die Erweiterung. - Fragen Mit einem.vim für C++ und Vim-Skript zum Umschalten zwischen header-und Implementierungsdatei mit cscope.
- verschiedene Verzeichnisse Obermenge: stackoverflow.com/questions/3385491/... || SU superuser.com/questions/313064/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
:r
(root) mit dem Namen Modifikator, der entfernt die Letzte Erweiterung (check-out:h filename-modifiers
weitere Informationen)wo
%
ist die Kurzform für den aktuellen Dateinamen.:r
entfernt die Erweiterung.cpp
einfach fügt die Zeichenfolge am Ende.Diese effektiv ersetzt die aktuelle Datei-Endung mit einem anderen, dann öffnen Sie die Datei mit der neueren Erweiterung.
Einen noch kürzeren Weg (mit freundlicher Genehmigung von Peter Rincker),
Relevanten Dokumentation auf
:h extension-removal
a.c
,:e %:e.h
wirdc.h
anstelle des erwartetena.h
:r
. Ich korrigiere den Beitrag.:e %<.cpp
Nach dem Vim-wiki gibt es durchaus ein paar Vorschläge.
Umrissen, ein paar Optionen aus dem Artikel:
:e %<.c
oder:e %<.h
.%<
stellt die aktuelle Datei w/o-Erweiterungnnoremap <F4> :e %:p:s,.h$,.X123X,:s,.cpp$,.h,:s,.X123X$,.cpp,<CR>
. Fügen Sie diese zu Ihrem~/.vimrc
..h
und.cpp
aber auch andere alternativen und können angepasst werden.tag
statte
. Aber es sagttag not found
. Ist es, weil es aufgerufen wird, von der.vimrc
Datei und nicht der Quell-Datei?:e
sind völlig verschiedene Befehle.:e
Bearbeitungen einer bestimmten Datei während:tag
springt zu einem bestimmten tag. Der Befehl oben (das mapping) grundsätzlich nimmt die aktuellen Dateinamen,%
, und gilt manchen substitution Tricks zu ändern.h
->.cpp
und.cpp
->.h
. Dies bedeutet, dass der Befehl schaltet zwischen einer Quell-Datei und eine header-Datei (und wieder zurück). Durch die Verwendung:tag
mit dieser Zuordnung sind Sie im Grunde die Suche nach dem Dateinamen mit der Endung eingeschaltet, das macht keinen Sinn. Für weitere Hilfe siehe:h :tag
,:h :e
, und:h c_%
.Installieren "unbeeinträchtigt" und verwenden Sie dann
]f
und[f
zu gehen, den vorherigen und nächsten Datei. Da Quell-und-header haben Sie die gleichen Namen außer der Endung-Sie sind die nächsten und vorherigen Dateien.]f
und[f
nur gehen Sie durch die Dateien im aktuellen Verzeichnis. Das spielt also Antwort auf die OP-Frage, aber wird nicht helfen, diejenigen, die split-header und source Dateien in verschiedenen Verzeichnissen, etc..Dies ist nur mit einfachen(?!) vimscript, so können Sie legen Sie Sie in Ihre
vimrc
,jetzt funktioniert es für
.c
- Dateien, kann aber geändert werden, ziemlich leicht für.cpp
(offensichtlich), es hat sogar einige "Fehlerbehandlung" in die innere if-Anweisung (das ist wahrscheinlich sinnlos), aber wenn jemand es braucht, hey, es ist es! Ohne es, es ist so viel kürzer (nur lassen die:e %<.h
, zum Beispiel), so wählen Sie, was Sie wollen.dann weitere hinzufügen, um Ihre
vimrc
etwas entlang diesen Linien:Nun, wenn Sie in den normalen Modus, drücken Sie die Taste Komma
,
(dies ist unsere<Leader>
- Taste), dannh
und Funktion von oben aufgerufen wird, und Sie wechseln zwischen Dateien. Tada!https://github.com/ericcurtin/CurtineIncSw.vim ist eine option.
Einmal konfiguriert, durchsucht das aktuelle Verzeichnis rekursiv und das Verzeichnis der Quelldatei ist rekursiv in die Datei, die Sie wechseln möchten.