2009-03-11 4 views
15

Ich trage einen vimrc zu allen Maschinen, an denen ich arbeite, und es enthält natürlich Optionen, die in alten vi nicht vorhanden sind.Wie erkennt man vi (nicht vim) in .vimrc?

Wenn ich versehentlich eine vi-Sitzung auf einer Maschine starte, wo vi kein Alias ​​für vim ist und/oder vim nicht installiert ist, liest vi vimrc und löst eine Reihe von ärgerlichen Fehlern aus, um mich über diese Option zu informieren nicht unterstützt.

Ich weiß, ich kann einfach immer "vim" anstelle von "vi" eingeben und die Variable EDITOR auf vim setzen (für visudo etc ...), aber gibt es eine Zeile, die ich an die Spitze der vimrc hinzufügen kann Wird das Skript früher beendet, wenn die Datei von vi gelesen wird?

Antwort

34

Wenn vi nicht wirklich ein Link auf vim ist, sollte es nicht lesen .vimrc, sollte es .exrc lesen. Die Tatsache, dass es .vimrc liest, zeigt an, dass es sich tatsächlich um eine frühere Version von vim handelt. Wenn das der Fall ist, können Sie die vim verwenden "wenn" konstruieren zu neueren Features umklammern, wie folgt aus:

:if version >= 500 
: version-5-specific-commands 
:endif 

Typ:

:help if 

wenn in vim für weitere Informationen.

+0

Typ: Version, um herauszufinden, welche Version von Vim ist. –

+0

@anon, danke das hat funktioniert, aber wenn ich 'vi --version' mache, dann zeigt es 'VIM - Vi IMproved 7.2 (2008 Aug 9, kompiliert am 17. Februar 2012 10:24:10)' also ist es ein VIM kompiliert vi mit Funktionen aus. Wie ich in der Beschreibung 'Kleine Version ohne GUI' weiter sehen kann. Aber warum das funktioniert? Fehle ich etwas? – garg10may

6

Non-vim liest kein .vimrc, es sucht nach einem .exrc. Sie können ältere Versionen von vim mit "if version> = 500" erkennen.

12

Wenn Sie genauer in Ihre Schecks einsteigen möchten, können Sie auch nach einzelnen Funktionen suchen.

Ich habe dies in meinem .vimrc:

if has("eval") 
    " Syntax stuff 
    let java_highlight_all=1 
endif 


if has("autocmd") 
    " Buffers 
    autocmd BufEnter * cd %:p:h 
endif 
3

"vi" vimrc liest, weil es sicher ist Vim mit dem Namen "vi" zusammengestellt. Und es ist wahrscheinlich kompiliert „sehr Vi kompatibel zu sein“, so können Sie versuchen, Feature „kompatibel“ zu überprüfen „vi“ zu erkennen:

if !has("compatible") 
    let g:loaded_matchparen=1 
    syntax off 
endif 
Verwandte Themen