8 Stimmen

Wie führt man auf Dateierweiterungen basierende Aktionen in VIM durch?

Ich möchte rubyf Aktion in VIM ausführen, wenn ich F5 drücke, wenn die Datei die Erweiterung .rb hat. Im Moment habe ich nur

map <F5> :rubyf % <CR>.

Aber ich möchte auch Schemadateien interpretieren, wenn es sich um .scm oder compile tex usw. handelt, indem ich dieselbe F5-Taste verwende. Wie prüfe ich die Dateierweiterung und führe die richtige Bindung durch? Wie kompiliert ihr verschiedene Dateien in G/VIM?

13voto

Laurence Gonsalves Punkte 131009

Sie könnten für jede Dateierweiterung ein anderes Autocmd erstellen, z. B:

au BufEnter,BufNew *.rb map <F5> :rubyf % <CR>.

Siehe :help autocmd für Informationen über Autocmds.

Ein besserer Ansatz für Ihr spezifisches Problem wäre die Abbildung <F5> immer aufzurufen :make % und haben dann ein Autocmd, das die makeprg Option für jeden Dateityp (verwenden Sie setlocal wenn Sie dies für beste Ergebnisse tun). Dies wäre nicht zum Laden von Ruby in Vim (wie Sie es zu tun scheinen), sondern zum Aufrufen eines externen Compilers/Interpreters/Liners. Das ist im Wesentlichen das, was ich mache. Das Schöne an dieser Vorgehensweise ist, dass Vim die Fehler und Warnungen interpretieren und automatisch zu den Problemen in Ihrem Code springen kann. Sie können sich auch eine Liste der Fehler/Warnungen anzeigen lassen. Siehe :help quickfix für Informationen dazu, sowie die Hilfethemen für 'makeprg' , :make , :copen y 'errorformat' .

Eine leichte Abwandlung davon wäre, überhaupt keine Autocmds zu verwenden, sondern stattdessen ein externes Skript zu haben, das bei Angabe eines Quelldateinamens herausfindet, was ausgeführt werden soll (Ruby, Ihr Scheme-Compiler, Pychecker, Ihr C-Compiler, was auch immer). Dann setzen Sie einfach makeprg um dieses Skript immer auszuführen.

5voto

sykora Punkte 88704

使用方法 filetype Plugins.

Eine Datei erstellen ~/.vim/ftplugin/ruby/custom.vim

Fügen Sie in diese Datei alle Befehle ein, die nur enthalten sein sollen, wenn der Dateityp des aktuellen Puffers ruby ist. Sie werden dann entsprechend ausgelagert.

Wenn Sie dasselbe von scheme aus tun wollen, erstellen Sie eine weitere Datei ~/.vim/ftplugin/scheme/custom.vim`` und tun Sie dasselbe.

Jedes Mal, wenn Sie eine Datei in vim laden, wird er den Dateityp erkennen und alle Plugins laden, die Ihrem Dateityp entsprechen.

4voto

Silfverstrom Punkte 26486

Autocommands ist Ihr Freund.
ist wie folgt definiert:
:au[tocmd] [group] {event} {pat} [nested] {cmd}

in Ihrem Fall wird die folgende Zeile in .vimrc das tun, was Sie wollen.
autocmd BufRead,BufNewFile *.rb map &lt;F5&gt; :rubyf % &lt;CR&gt;.

für weitere Informationen siehe:
http://www.ph.unimelb.edu.au/~ssk/vim/autocmd.html

1voto

cjs Punkte 23476

Diese Frage wird in den Antworten auf folgende Fragen recht gut beantwortet diese Frage .

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