2012-06-14 19 views
16

I tote lo stesso .vimrc tra macchine che hanno sia Vim 7.2 sia 7.3 installato. Le macchine con Vim 7.2 lamentano le mie opzioni 7.3-specifici ogni volta che apro un file:Ignora errori "Opzione sconosciuta" in vimrc

Error detected while processing /home/spiffytech/.vimrc: 
line 72: 
E518: Unknown option: rnu 
line 73: 
E518: Unknown option: undofile 
line 74: 
E518: Unknown option: undodir=/tmp 
line 75: 
E518: Unknown option: cryptmethod=blowfish 
Press ENTER or type command to continue 

Come posso fare Vim ignorare questi errori e non mi chiederà di premere invio ogni volta che apro i file?

risposta

10

Avvolgere le nuove opzioni in:

if version >= 703 
    set rnu ... 
endif 

Controllare l'aiuto per v:version per ulteriori informazioni sul numero di versione da utilizzare:

         *v:version* *version-variable* 
v:version  Version number of Vim: Major version number times 100 plus 
       minor version number. Version 5.0 is 500. Version 5.1 (5.01) 
       is 501. Read-only. "version" also works, for backwards 
       compatibility. 
       Use |has()| to check if a certain patch was included, e.g.: > 
         if has("patch123") 
<    Note that patch numbers are specific to the version, thus both 
       version 5.0 and 5.1 may have a patch 123, but these are 
       completely different. 
+0

che funziona. Sicuramente stai attento a impostare il numero di versione: ci ho messo un po 'a leggere abbastanza a fondo per vedere che è * non * semplicemente "versione * 100" – spiffytech

+0

Sì, può essere difficile, ma ci si abitua. Preferirei descriverlo in un senso di concatenazione delle stringhe, invece di fare matematica. Nota che questo è usato in molti altri posti. Perl, ad esempio, usa una sintassi simile con ['use'] (http://perldoc.perl.org/functions/use.html). Devi 'usare 5.010;' per usare le caratteristiche di perl '5.10', che non è' 5.1'. Ecco perché non lo usano in senso decimale, altrimenti creeresti qualche ambiguità. – sidyll

+2

È meglio testare la funzione specifica rispetto alla versione, poiché una versione specifica potrebbe essere compilata senza la funzione che si sta cercando. – cpbills

3

In voi .vimrc, è possibile testare contro la versione di Vim che si sta eseguendo.

Vedi help v:version

if v:version >= 703 
    "do something 
    set rnu 
    set undofile 
    ... 
endif 

corrisponde a Vim 7.3 (che non è davvero intuitivo ...)

0

Direi che questa domanda non ha risposta. Considera una Session.vim creata sul computer A che ha la versione successiva di Vim. Nel controllo del codice sorgente quando un altro computer B tenta di aprire Session.vim vengono avviati gli errori. Non ha senso dover avvolgere manualmente un numero di versione per quello che dovrebbe essere un processo automatico. Con questo comportamento la nuova versione dovrebbe automaticamente racchiudere un nuovo comando in un numero di versione quando si salva una sessione, cosa che 7.3 non fa.

19

Potrebbe valere la pena eseguire un controllo più dettagliato per le funzionalità effettivamente supportate anziché per le versioni.

Es .:

if has('persistent_undo') 
    set undofile 
    set undodir=/tmp 
endif 

" Some options can only be checked with exists('+option'); I'm not sure why 
if exists('+relativenumber') 
    set rnu 
endif 

if has('cryptv') 
    set cryptmethod=blowfish 
end 
3

si può ignorare qualsiasi errore silent! ..., come silent! set undofile

7

volte un'opzione è legittimo, ma non disponibili nel contesto attuale. Per esempio:

$ vi 
Error detected while processing /home/username/.vimrc: 
line 9: 
Unknown option: indentexpr= 

per verificare se esista o meno una scelta, ed evitare un errore se non disponibile:

if exists("&indentexpr") 
    :set indentexpr= 
endif 
+1

Questo è il modo migliore per risolvere il problema. –

+0

Questo non suona con i numeri di versione. – iltempo