2009-09-10 17 views
14

Mein Tagesjob beinhaltet die Programmierung mit Perl. Zuhause spiele ich mit Python und Erlang. Für Perl möchte ich meinen Code mit zwei Leerzeichen einrücken. Während für Python der Standard 4 ist. Ich habe auch einige Tastenbelegungen, um Funktionsdeklarationen zu öffnen, die ich mit allen Programmiersprachen verwenden möchte. Wie kann dies in gVim erreicht werden?gVim und mehrere Programmiersprachen

Wie in, gibt es eine Möglichkeit, eine Konfigurationsdatei für jede Programmiersprache oder etwas dieser Art zu pflegen?

Antwort

22

Sie sollten in der Lage sein, mit zu tun, indem sie Dateitypen nutzen ... zB, fügen Sie diese zu Ihrer vimrc (und ändern Sie entsprechend für verschiedene Sprachen):

autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab 
+20

Die Standardeinstellungen nicht überschreiben. Verwenden Sie 'setlocal' (oder 'setl') anstelle von 'set'. Sie möchten nicht, dass die Einstellungen für den letzten autocmd-Break in andere Puffer geändert werden. –

+0

@Maxim - Guter Fang ... :-) –

+2

Der 'set' Befehl akzeptiert mehrere Optionen. Es ist also einfacher zu schreiben: 'set tabstop = 4 shiftwidth = 4 expandtab' –

23

In $ HOME, machen .vim/Verzeichnis (oder vimfiles/unter Windows), darin make ftplugin/directory, und darin die Dateien "perl.vim" oder "python.vim" oder "html.vim" oder ...

Diese Dateien sollten geladen werden automatisch, wenn Sie eine neue Datei eines bestimmten Dateityps öffnen/erstellen, solange Sie nicht vergessen, :filetype plugin on in Ihrer .vimrc (oder _vimrc unter Windows)

hinzuzufügen

Dann sollten Vim-Optionen mit :setlocal (und nicht :set definiert werden, andernfalls wird ihre Definition die globale Standardeinstellung überschreiben).

Zuordnungen sind definiert mit :n/i/v(nore)map <buffer>, sowie die Abkürzungen. Befehle werden mit der Option -b definiert. Menüs können nicht lokal ohne die Hilfe eines Plugins gemacht werden.

local, <buffer> und -b sind wichtig, um Nebenwirkungen zu verhindern.

+0

Wenn Sie Windows verwenden, lesen Sie ": help dos-locations". –

+0

+1 Ich wusste nicht, dass Befehle für einen einzelnen Puffer definiert werden können! –

3

Hier ist, wie ich es mache. Das Folgende ist ein Auszug aus meiner .vimrc, und ich halte weitere Configs pro Sprache, und laden Sie diese, wenn ein neuer Puffer geladen wird.

Beachten Sie, dass, obwohl ich eine Datei Quelle, kann ich einen beliebigen VIM-Befehl ausführen oder eine Funktion aufrufen. z.B. eine neue Java-Datei zum Laden ich dies tun:

autocmd BufNewFile *.java call GeneratePackage() 

wo GeneratePackage() eine VIM-Funktion ist.

+0

autocmd FileType ... ist besser, weil Sie die Dateityperkennung (mit BufNewFile) von den Aktionen trennen, die für diesen Dateityp ausgeführt werden. – joeforker

7

Zusätzlich zu der Antwort von Rangerchris könnten Sie auch die Verwendung von Modelines erwägen. -Modelines sagen Sie den Editor, wie sich selbst konfigurieren:

#!/usr/bin/perl 
# vi: ts=4 sw=4 ht=4 et textwidth=76 : 

use strict; 
use warnings; 

print "hello world\n"; 

Das Modeline vi 4 Zeichen Tabs und automatisches Einrücken verwenden erzählt, Leerzeichen Registerkarten stattdessen zu verwenden, und dass es eine neue Zeile einzufügen, wenn der Cursor auf 76 Zeichen erhält.

können Sie steuern, wie Vim liest -Modelines mit zwei Variablen (höchstwahrscheinlich in Ihrem .vimrc eingestellt):

set modeline 
set modelines=5 

Die modeline Variable sagt Vim für -Modelines zu suchen, wenn es gesetzt ist. Die Variable modelines teilt Vim mit, wie viele Zeilen von oben und unten nach der Modelllinie suchen sollen (in diesem Fall wird die Modelllinie gefunden, wenn sie sich in der ersten oder letzten Zeile der Datei befindet).

Wie jedes System, das Anweisungen von nicht vertrauenswürdigen Quellen annimmt, können Modelines ein security threat sein, also sollte der root Benutzer nie Modell verwenden und Sie sollten Ihre Kopie von Vim auf dem neuesten Stand halten.

Der echte Vorteil für Modelines ist, dass sie pro Datei sind. Die meisten Perl-Leute sind vier Leerzeichen als Einrückungs-Personen, aber ich bin eine achtstellige Tab-Person. Wenn ich mit Code anderer Leute arbeite, benutze ich eine Modelline, die ihre Verwendung widerspiegelt. Die restliche Zeit nutze ich meine eigenen.