Come posso fare in modo che Vim ignori tutta la configurazione utente, come se fosse appena installato?


21

Per garantire che il comportamento non sia influenzato dalla mia configurazione personale, voglio avviare Vim in un modo che ignori tutti i miei file di configurazione installati dall'utente, come se Vim fosse appena stato installato per la prima volta per la prima volta e l'utente l'avesse eseguito subito.

Questo è affrontato nelle FAQ che suggeriscono che la risposta è avviare Vim con il seguente comando:

vim -u NONE -U NONE -N -i NONE

Ciò consente di ottenere la maggior parte del percorso, ma l' runtimepathopzione contiene ancora ~/.vime, in particolare, ~/.vim/after(quindi, ad esempio, se accendo successivamente il rilevamento del tipo di file e cambio il tipo di file, ~/.vim/after/syntax/the_relevant_filetype.vimverrà eseguito il codice in ).

Posso risolvere questo specifico problema invocando i seguenti comandi all'avvio *:

:set runtimepath-=~/.vim
:set runtimepath-=~/.vim/after

... ma non sono sicuro se:

  1. Questa è una soluzione solida: sono gli unici percorsi che possono rendere effettive le configurazioni utente? C'è qualcos'altro a cui non ho pensato?
  2. Esiste un modo migliore per ottenere il risultato desiderato.

* Usando --cmdo -u vimrcshell argomenti, o semplicemente digitandoli manualmente.

EDIT : Ecco un esempio specifico del tipo di problema che sto cercando di risolvere. (Anche se vorrei che la soluzione risolvesse altri possibili problemi, potrei non aver ancora riscontrato.):

  1. Crea un file ~ / .vim / after / ftplugin / c.vim, contenente il contenuto:

    noremap i :echom "This is not default behaviour"<CR>
    

    Ora abbiamo alcune configurazioni installate dall'utente che vogliamo ignorare. Testiamo la soluzione suggerita dalle FAQ.

  2. Esegui Vim con il comando:

    vim -u NONE -U NONE -N -i NONE
    
  3. Inserisci i comandi:

    :filetype plugin on
    :set ft=c
    i
    

Comportamento desiderato : Vim dovrebbe entrare in modalità Inserisci. Questo è ciò che farebbe se non esistesse alcuna configurazione utente.

Comportamento osservato : Vim stampa "Questo non è un comportamento predefinito"


Su un sistema simile a Unix, cosa succede se si fa HOME=/dev/null vim -u NONE:?
Muru,

@muru Bella idea, e probabilmente vale la pena aggiungerla come risposta, ma non è perfetta . Ovviamente perdi la possibilità di es. :cd ~, Ma anche la posizione predefinita del viminfofile è in $ HOME, che può causare E138. Immagino che creare una nuova directory vuota e usarla per $ HOME potrebbe essere la soluzione migliore.
Rich

@muru Mi è appena venuto in mente che se stai impostando $ HOME, quindi presumibilmente non è necessario specificare -u NONE?
Rich

1
nel qual caso /tmppotrebbe essere migliore, è stato il mio primo pensiero, ma poi ho scelto / dev / null come un buco nero. ... O qualcosa del genere HOME=$(mktemp -d) vim ....
Muru,

Non leggerà il sistema vimrc se non lo usi -u NONE? Dipende da quale comportamento hai bisogno, suppongo.
Muru,

Risposte:


16

A partire da Vim 8.0.1554 (purtroppo non ancora Neovim), è possibile utilizzare vim --clean. Questo metodo è raccomandato da :help bugs.

:help --clean docs:

Simile a "-u DEFAULTS -U NONE -i NONE":
- le inizializzazioni da file e variabili di ambiente vengono ignorate
- 'runtimepath' e 'packpath' sono impostati per escludere le voci della directory home (non succede con -u DEFAULTS).
- il | defaults.vim | lo script è caricato, il che implica 'nocompatibile': usa i valori predefiniti di Vim
- no | gvimrc | lo script viene caricato
- nessun file viminfo viene letto o scritto


1
Bello! Questo è molto più semplice che scherzare con la $HOMEvariabile. Goodjob Vim sviluppatori. E grazie a te per la risposta!
Ricco

1
--cleanfunziona anche con neovimmaster adesso ( github.com/neovim/neovim/commit/… , da includere in 0.4.0), ma non esclude la home directory.
Christian Clason,

(eppure, quella patch è in attesa di essere trasferita)
Christian Clason,

11

Un modo per eliminare i file specifici dell'utente sarebbe utilizzare un valore diverso di $HOME. Per non consentire la lettura o la scrittura di nulla (come viminfo), è possibile utilizzare /dev/null:

HOME=/dev/null vim -u NONE

Ciò causerà errori viminfo, quindi potresti invece creare una cartella temporanea o utilizzarne una esistente (come /tmp):

HOME=$(mktemp -d) vim -u NONE

Con tale $HOME, -u NONEpotrebbe non essere necessario, a seconda di ciò che l'amministratore ha aggiunto a tutto il sistema vimrc. Ad esempio, in tutti i sistemi di laboratorio I amministrare, ho aggiunto un /etc/vim/vimrc.local(provenienti dal default confezionato Vim /etc/vim/vimrc) che ha nocompatible, syntaxecc, insieme, e filetype onpure.


3
vim -i NESSUNO per impedire il caricamento di viminfo
Christian Brabandt,

1

Non posso rispondere molto di questo, ma un punto che non vedo menzionato, e rispondendo a un'interpretazione di ciò che è nel titolo

Come posso fare in modo che Vim ignori tutta la configurazione utente, come se fosse appena installato?

alcuni hanno suggerito vim -u NONE ovim -u NORC

questo è in qualche modo un po 'più barebone di un semplice file vimrc. Quando scrivo "i", non si dice "inserisci". Potresti voler ancora dire 'inserisci'. Se hai avviato vim con il tuo file vimrc vuoto, mostrerebbe insert

questo perché vim carica prima una configurazione predefinita.

Puoi puntare vim su quel file predefinito per rendere vuoto l'effetto del tuo file vimrc. Verifica di avere /etc/vim/vimrc, e puoi fare vim -u /etc/vim/vimrc o su osx, il file predefinito è/usr/share/vim/vicmrc


Penso che sia esattamente ciò che vim --clean farà per te.
quemeraisc

vim --cleanVerrà caricato @quemeraisc defaults.vim. Questa risposta si riferisce al sistema vimrc (vedi :help system-vimrc.), Che penso non sia caricato da vim --clean.
Rich

@barlap: per evitare confusione con defaults.vim (vedi :help defaults.vim), potrebbe essere migliore di modificare la formulazione default configdi system vimrcquesta risposta. O ancora meglio, discuti entrambi nella risposta!
Rich

0

Da Vim-FAQ 2.5 :

2.5. Ho un problema "xyz" (alcuni) con Vim. Come posso determinare se si tratta di un problema con la mia configurazione o con Vim? / Ho trovato un bug in Vim?

Innanzitutto, devi scoprire se l'errore si trova nei file di runtime effettivi o in qualsiasi plug-in distribuito con Vim o se si tratta di un semplice effetto collaterale di qualsiasi opzione di configurazione dal tuo .vimrc o .gvimrc. Quindi, prima, inizia vim in questo modo:

vim -u NONE -U NONE -N -i NONE

questo avvia Vim in modalità nocompatibile (-N), senza leggere il tuo file viminfo (-i NONE), senza leggere alcun file di configurazione (-u NONE per non leggere il file .vimrc e -U NONE per non leggere un file .gvimrc) o anche plugin.


1
Nonostante sia presente nelle FAQ, in realtà non funziona, per i motivi indicati nella domanda.
Rich

@Rich Dal tuo commento alla domanda: ensure that none of the behaviour I'm seeing is caused by user config- allora sembra che tu stia provando a fare esattamente ciò che viene spiegato in questa FAQ. Ho riletto la tua domanda e ancora non capisco quali sono i motivi che hai citato.
lunedì

Sto davvero cercando di fare esattamente ciò che viene spiegato nelle FAQ. Ma la soluzione che offre non funziona, a causa runtimepathdell'impostazione.
Rich

Cosa c'è di sbagliato esattamente nel runtimepath? Sembra il valore predefinito per questa opzione, come spiegato in :help rtp. In che modo questo valore influisce sul test?
mMontu,

@Rich intendo, vedi delle differenze rispetto a una nuova installazione dopo aver attivato il rilevamento del tipo di file?
mMontu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.