28 Stimmen

Name der aktuellen Datei in Vim abrufen

Ich versuche, den Namen der Datei zu finden, die ich in Vim bearbeite. So kann ich ihn benutzen, um zuzuordnen F5 um diese Datei zu kompilieren. Es wäre natürlich toll, wenn ich das Dateiformat erkennen und den Compiler entsprechend auswählen könnte, aber das ist wirklich nicht nötig. Wenn ich den Namen der Datei wüsste, könnte ich das selbst tun. Aber ich kann wirklich keine Möglichkeit finden, den Namen der Datei, die ich bearbeite, herauszufinden.

Ich weiß von der :make Kommando, und das habe ich bereits abgebildet, aber für kleine Skripte/Testprogramme möchte ich nicht erst ein einfaches Makefile schreiben müssen.

27voto

sluukkonen Punkte 2526

Sie können das %-Zeichen in Vim-Befehlen verwenden, um den aktuellen Dateinamen mit der Erweiterung zu erhalten. Zum Beispiel,

:!javac %

um javac auf die aktuelle Datei anzuwenden.

Weitere Informationen finden Sie unter

:help filename-modifiers

25voto

Rook Punkte 57113

Ich versuche, den Namen der Datei zu finden, die ich in Vim bearbeite.

Für den aktuellen Puffer wird Ihnen der Name der Datei angezeigt,

echo "You're editing " bufname("%")

(fügen Sie es einfach in eine Datei.vim ein, und geben Sie ":so %" ein. Aber ich glaube nicht, dass es das ist, was Sie brauchen.

So kann ich sie verwenden, um die F5 um diese Datei zu Testzwecken zu kompilieren. Es wäre natürlich toll, wenn ich das Dateiformat erkennen und den Compiler entsprechend auswählen könnte, aber das ist wirklich nicht notwendig. Wenn ich den Namen der Datei finde, kann ich das selbst tun. Aber ich kann wirklich keine Möglichkeit finden, den Namen der Datei zu erfahren, die ich gerade bearbeite.

Sie könnten mehrere Dinge tun. Wenn vim den Dateityp erkennt, den Sie bearbeiten, könnten Sie F5 zu Ihrem Compiler-Befehl und legen Sie diesen Befehl in sein spezifisches ftplugin-Verzeichnis, damit er nur für diesen Dateityp gültig ist. Zum Beispiel, Sie legen

nmap <f5> :!compilername %<cr>

in cpp.vim, fortran.vim, python.vim, usw. Die % gibt den Namen der aktuellen Datei an, die Sie gerade bearbeiten. Dies führt den Compiler genauso aus, wie wenn Sie den Befehl compilername file.cpp in der Eingabeaufforderung.

Ja, natürlich, compilername wird für jeden Dateityp anders sein; Sie werden nicht Fortran mit dem cpp-Compiler kompilieren, Sie setzen fortrancompiler % in diesem Fall.

Das ist eine Möglichkeit. Sie könnten auch versuchen, entsprechend der Erweiterung autocmd-Befehle in Ihrem .vimrc damit es den Dateityp anhand der Dateierweiterung erkennt. Dies ist alles Standardgebrauch von vim, nichts Ungewöhnliches. Ich bin mir nicht sicher, wie Sie das angehen wollen, also verweise ich Sie einfach auf Vim-Wiki wo Sie alle möglichen Artikel zu diesem Thema finden können (und auch ein paar Tipps für einige Compiler).

Ich weiß von der :make Kommando, und das habe ich bereits abgebildet, aber für kleine Skripte/Testprogramme möchte ich nicht erst ein einfaches Makefile schreiben müssen.

Ja, das scheint übertrieben zu sein. Ich persönlich (wenn ich mit Windows arbeite) finde einfache Batch-Dateien für die meisten Dinge viel einfacher zu schreiben, außer für große Projekte. Wenn das Programm aus einer oder zwei Dateien besteht, kompiliere ich es einfach mit Hilfe eines Oneliner-Mappings.

6voto

Magnus Punkte 21152

Die anderen Punkte sind sehr nützlich. Ich würde hinzufügen, dass Sie wahrscheinlich :p benutzen wollen, um sicherzustellen, dass der Dateiname als voll qualifizierter Pfad übergeben wird. Ohne dies könnte Vim ihn als einen Pfad übergeben, der relativ zu Vims aktuellem Pfad ist, der derselbe Pfad sein kann oder auch nicht, den der Compiler benutzt. Eine Lösung ist also:

nnoremap <silent> <f5> :!javac %:p<cr>

Wenn Sie den Dateityp automatisch erkennen wollen, können Sie AutoCommand verwenden

autocmd FileType java       nnoremap <buffer> <silent> <f5> :!javac %:p<cr>
autocmd FileType cpp        nnoremap <buffer> <silent> <f5> :!gcc %:p<cr>

4voto

viraptor Punkte 32254

Wie andere bereits erwähnt haben, % wird zur aktuellen Datei erweitert. Wenn Sie diese Zeichenkette in einem Vim-Skript erhalten wollen, verwenden Sie expand("%") .

Aber vielleicht möchten Sie makeprg einfach auf etwas setzen wie "compiler-command\ %" und laufen :make - Sie erhalten auf diese Weise schnelle Unterstützung. (öffnen Sie das Fenster Fehler/Warnungen mit :copen )

3voto

Andre Punkte 301

Utilice % als Ersatz für Ihren Dateinamen. Aber ich persönlich denke, dass Sie die :make um genau das zu tun, was Sie wollen.

Früher habe ich genau das getan, was Sie vermeiden wollen: einfach ein zweizeiliges Makefile für jeden einzelnen Ordner, in dem ich mich befand, herausgehackt. Ich genoss :make Quickfix-Unterstützung so sehr, dass die Erstellung eines zweizeiligen Makefiles nur ein kleiner Aufwand im Gesamtbild zu sein schien.

... Ich bin inzwischen eines Besseren belehrt worden. Sie können ein Autocmd oder ftplugin verwenden, um die makeprg Option, die Konfiguration von :make um den Befehl Ihrer Wahl auf der Grundlage des aktuellen Dateityps zu verwenden. Das erspart Ihnen an sich schon ein wenig Arbeit.

Das Problem beginnt, wenn wir mit einem Werkzeug arbeiten, dessen Fehlermeldungen nicht genau wie die des GCC aussehen. Um dies zu umgehen, bietet vim auch die errorformat Option. errorformat ist sehr anspruchsvoll. Wenn Sie wirklich etwas darüber lernen wollen, beginnen Sie mit :h error-format . Langfristig gesehen ist die Ausgereiftheit wirklich großartig. Das bedeutet, dass man, wenn man erst einmal gelernt hat, damit umzugehen, praktisch alles analysieren kann. jede Compiler-Ausgabe und formatiert sie für die Anzeige mit quickfix ( :cope o :cl ).

Kurzfristig kann das eine schlechte Sache sein, weil es bedeutet, dass Sie die ersten paar Male, wenn Sie ein Fehlerformat selbst zusammenhacken, eine Menge Zeit damit verbringen werden, die vimdocs zu durchforsten und Dateien neu zu laden und zu erstellen, die die verschiedenen Fehlermeldungen auslösen, die Ihr Compiler erzeugen kann. Das ist definitiv nicht das, was Sie wollen, wenn Sie nur kurz außerhalb Ihrer Komfortzone arbeiten, oder Ihr Chef Ihnen über die Schulter schaut und Sie drängt, diesen Fehler zu beheben. jetzt .

Hoffentlich (und wahrscheinlich) hat bereits jemand diesen Schmerz für Sie durchgestanden, und entweder errorformat entsprechend für Ihren Standard ftplugin oder es als Teil eines Vim-Skripts veröffentlicht, das sie nur darauf warten, dass die Gemeinschaft es installiert und bewundert.

Zur schnellen Demonstration hier ein paar Zeilen, die ich für meine .vim/ftplugin/haskell.vim Datei:

setl makeprg=ghc\ --make\ %
setl errorformat=%E%f:%l:%c:,%C\ %.%m,%Z,%f:%l:%c:%m

Ich benutze setl hier, damit diese Optionen nur für Haskell-Quelldateien konfiguriert werden; wenn ich gleichzeitig eine andere Art von Quelldatei bearbeite, kann es stattdessen eine andere Konfiguration verwenden.

Wenn Sie am Ende die :make empfehle ich auch die Konfiguration Ihrer switchbuf Einstellung. Ich fand es etwas lästig, nach einem Build Strg-O drücken zu müssen, wenn Quickfix sich aufregt und zur falschen Datei springt. Ich benutze:

set switchbuf=useopen,usetab,newtab

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X