imposta formatoptions in vimrc viene ignorato


9

Vim continua automaticamente un commento quando premo Invio in modalità Inserisci, che trovo utile.

Tuttavia, non voglio che il commento continui dopo aver premuto 'o' dalla modalità normale per inserire una nuova riga sotto la fine del commento.

Ho letto che devo rimuovere l'opzione odal mio formatoptions, quindi ho messo questa riga alla fine del mio file vimrc:

set formatoptions-=o

Ma non è cambiato nulla, e quando :set formatoptionseseguo da Iside di VIM mi mostra che le mie formattazioni sono croql.

Come posso liberarmi della 'o'?

Modificare:

Ho seguito alcuni passaggi indicati nei commenti di Sato Katsura:

La soluzione inizia con l'esecuzione :verb set foper vedere dove l'ultima modifica è stata modificata.

Ecco l'output di verb set fo:

  formatoptions=croql
        Last set from /usr/share/vim/vim73/ftplugin/vim.vim


1
@DJMcMayhem Questo non risolve il mio problema. Come puoi vedere, ho adottato gli approcci raccomandati dalle risposte a quella domanda e il comportamento di Vim non è cambiato.
theonlygusti,

1
Sì, lo vedo. Ero troppo affrettato con il mio voto ravvicinato, quindi mi sono ritirato ora. Tuttavia, ora sembra un problema con il tuo .vimrc, quindi non possiamo aiutarti affatto fino a quando non lo pubblichi. Immagino che un plug-in lo cambi o non sia stato sorgente correttamente.
James,

2
Fondamentalmente, la domanda è "perché la linea set formatoptions-=onel mio vimrc non funziona?", Che questo disabilita i commenti quando premere oè una coincidenza :-)
Martin Tournoij,

@Carpetsmoker sì, praticamente ... ha bisogno di essere modificato?
theonlygusti,

Risposte:


8

All'avvio vim, viene eseguito $VIMRUNTIME/ftdetect.vimper scoprire quale tipo di file si sta modificando; quindi, se hai 'ftplugin'impostato, genera $VIMRUNTIME/ftplugin.vimquali fonti $VIMRUNTIME/ftplugin/&filetype.vim(vedi :help startupper maggiori dettagli).

È possibile modificare o sostituire $VIMRUNTIME/ftplugin.vimo $VIMRUNTIME/ftplugin/&filetype.vim. Crea una cartella e una sottocartella nella tua home directory chiamata .vim/after.

Se vuoi sovrascrivere i formati per tutti i plugin di tipi di file, modifica $HOME/.vim/after/ftplugin.vim, altrimenti modifica $HOME/.vim/after/ftplugin/lua.vim(o sostituisci luacon qualsiasi lingua, nel tuo caso è vim). Per una spiegazione corretta di come funziona, vedere :help 'runtimepath'(e :help :runtime).

Inserisci il seguente contenuto nel file:

set formatoptions-=o

Puoi vedere se ha funzionato eseguendo :scriptnames. Dovresti ottenere un elenco come il seguente:

  1: H:\script\vim\vimrc
  2: H:\script\vim\syntax\syntax.vim
  3: H:\script\vim\syntax\synload.vim
  4: H:\script\vim\syntax\syncolor.vim
  5: H:\script\vim\filetype.vim
  6: ~\vimfiles\ftdetect\log.vim
  7: ~\vimfiles\ftdetect\rdp.vim
  8: ~\vimfiles\ftdetect\scratch.vim
  9: ~\vimfiles\ftdetect\sqlite.vim
 10: ~\vimfiles\ftdetect\todo.vim
 11: H:\script\vim\ftplugin.vim
 12: ~\vimfiles\after\ftplugin.vim
 13: ~\vimfiles\colors\desert.vim
 14: H:\script\vim\defaults.vim
 15: H:\script\vim\plugin\getscriptPlugin.vim
 16: H:\script\vim\plugin\gzip.vim
 17: H:\script\vim\plugin\logiPat.vim
 18: H:\script\vim\plugin\manpager.vim
 19: H:\script\vim\plugin\matchparen.vim
 20: H:\script\vim\plugin\netrwPlugin.vim
 21: H:\script\vim\plugin\rrhelper.vim
 22: H:\script\vim\plugin\spellfile.vim
 23: H:\script\vim\plugin\tarPlugin.vim
 24: H:\script\vim\plugin\tohtml.vim
 25: H:\script\vim\plugin\vimballPlugin.vim
 26: H:\script\vim\plugin\zipPlugin.vim
 27: H:\script\vim\syntax\lua.vim
 28: H:\script\vim\ftplugin\lua.vim

Linee di nota 11 e 12. I percorsi dei file appariranno leggermente diversi.


1
Questo potrebbe essere utile per qualcuno. Nella mia situazione, uso vim-plug, e alcuni plugin (non so quale) hanno cambiato il formatoptions, tuttavia il mio .vim/afterproviene da quei plugin ...
voldikss

Penso che sia il comando corretto :scriptnames.
Jari Turkia,

Per tentativi ed errori, ho imparato che cercando di forzare formatoptionsin ~/.vim/after/ftplugins.vimnon funziona - allora ho incontrato questo argomento che tipo di-spiega perché.
Stabledog

3

Ho scoperto che posso fornire una soluzione improvvisata usando un autocommand.

La seguente riga nel tuo .vimrcfile dovrebbe applicare ovunque i nuovi formati:

autocmd FileType * set formatoptions-=o

Tuttavia, questo non riesce davvero a risolvere il problema; Ancora non capisco perché un semplice setnon fosse abbastanza, e come è stato sottolineato nei commenti questa soluzione non è l'ideale.


1
Questo può funzionare , ma è molto divertente e non è la soluzione che consiglierei.
James,

@DJMcMayhem hmm, quali possibili problemi potrei incontrare utilizzando questa soluzione?
Sentiti

1
Perché non @DJMcMayhem? Il problema è quasi certamente dovuto al fatto che uno dei set di file formatoptions(ad esempio Perl, Ruby e molti altri lo imposta). Questa sembra una soluzione accettabile?
Martin Tournoij,

@Carpetsmoker Suppongo sia giusto. Non ci avevo pensato. Sembra strano cambiare un'impostazione in un autocmd, piuttosto che impostarla direttamente.
James,

2
@SatoKatsura Dipende da cosa vuoi, immagino. Alcune persone potrebbero preferire di non aggiungere mai un carattere di commento durante l'utilizzo oindipendentemente dal tipo di file, nel qual caso questo sembra appropriato.
Martin Tournoij,

2

Ho avuto un'esperienza simile a OP.

Ho scoperto che tveniva aggiunto al mio formatoptionsnonostante avessi deliberatamente tentato di disabilitarlo.

Dopo aver usato :verbose set foper essere sicuro che provenisse da .vimrc, ho notato che il comportamento sembrava dipendere da dove inserivo le formattazioni nel mio file .vimrc. Ho scoperto che stava accadendo a causa di dove avevo inserito set nocompatiblenel mio file:

set formatoptions=qj
set nocompatible

:set fo?
  formatoptions=tcq

Si scopre che questo è specificamente chiamato in :help nocompatible:

                   'compatible' 'cp' 'nocompatible' 'nocp'
'compatible' 'cp'   boolean (default on, off when a |vimrc| or |gvimrc|
                    file is found, reset in |defaults.vim|)
            global
            {not in Vi}
    This option has the effect of making Vim either more Vi-compatible, or
    make Vim behave in a more useful way.

    This is a special kind of option, because when it's set or reset,
    other options are also changed as a side effect.
    NOTE: Setting or resetting this option can have a lot of unexpected
    effects: Mappings are interpreted in another way, undo behaves
    differently, etc.  If you set this option in your vimrc file, you
    should probably put it at the very start.

Dopo aver seguito questo buon consiglio, i miei formatoptionssono stati preservati come desiderato. Non so se OP stava incontrando questo esatto problema o se si trattasse di qualche altra interazione, ma ero felice di scoprire cosa lo stava causando. Speriamo che questo aiuti qualcun altro a capire cosa (inizialmente inspiegabilmente) sta cambiando le proprie impostazioni.

Mi piace anche l'autocd di theonlygusti: ci sono alcune opzioni che non voglio mai impostare, indipendentemente dal tipo di file. Sto guardando voi, t.


2

Dato che molti di noi utenti di Vim soffrono di questo, sono andato a indagare un po 'di più.

La mia soluzione è quella di creare $HOME/.vim/after/ftplugin.vimcome suggerito da @ abcq2 solo per rendersi conto, non cambierà nulla. Dato l'elenco fornito da :scriptnames, quel file è sorgente troppo presto. Tuttavia, il secondo suggerimento di creare un $HOME/.vim/after/ftplugin/lua.vimfile per LUA aiuta.

Con l' straceing, ho appreso che i post-plug-in generici di tipo file vengono forniti prima del plug-in di tipo e file specifici dopo il tipo di file. Non molto intuitivo, ma funziona così.

Ci sono più informazioni nel mio blog su questo.


Non sono sicuro del motivo per cui pensi che after/ftpluginsarebbe di aiuto. Piuttosto, il modo migliore è usare le sostituzioni specifiche del tipo di file (usando un comando automatico FileType o un after/<filetype>.vimfile specifico ). Vedi anche l'aiuto a:h ftplugin-overrule
Christian Brabandt,

Sto pensando che sarebbe di aiuto, perché @ abcq2 lo ha suggerito nella sua risposta sopra. Penso che sto usando after/<filetype>.vimnella mia risposta.
Jari Turkia,

0

Ho guardato per vedere quali file / percorsi che hanno vimtentato di caricare, usando strace(come descritto qui ), quindi ~/.vim/after/plugin/ho creato una directory (era l'ultima posizione di configurazione che ha vimtentato di caricare), quindi ho linkato il mio ~/.vimrcin quella posizione:

mkdir -p ~/.vim/after/plugin/
ln -s ~/.vimrc ~/.vim/after/plugin/ 

Cosa ho fatto con strace:

Fondamentalmente, ho corso:

strace -o ~/vim_strace vim

... quindi immediatamente esci vim( :q!). Successivamente, ho caricato su ~/vim_strace( $ vim ~/vim_strace) e sono andato alla fine ( :$). Poi ho iniziato a leggere dal basso cercando le righe che iniziano con openat(AT_FDCWD, "/home/karl/......

La prima cosa che vedo è:

openat(AT_FDCWD, "/home/karl/.viminfo", O_RDONLY) = 3

Ma non è qui che voglio le mie opzioni di configurazione. La riga successiva, proprio sopra la .viminforiga, era:

openat(AT_FDCWD, "/home/karl/.vim/after/plugin/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)

... "Nessun file o directory", eh? Sembra un vincitore. Quindi, quello è quello che ho scelto.

Ora funziona perfettamente.

Spero che questo aiuti qualcuno da qualche parte.


1
Siamo spiacenti, ma non riesco a vedere come questa sia una risposta a questa domanda. Potete per favore chiarire e spiegare perché questo risolverà il problema con formatiptions?
filbranden

Perché in realtà arriva vima onorare le opzioni nel .vimrcfile. Rileggi e assicurati di comprendere sia la domanda che la mia risposta.
Karl Wilbur,

1) Il tuo (intero) vimrc non dovrebbe essere eseguito nel contesto di un plugin. 2) Qualcosa di simile all'aggiunta di una riga ~/.vim/after/plugin/formatoptions.vimcon set fo-=oè più appetibile ... Ma non funziona ancora quando un plug-in di tipo di file lo sostituisce. Ad esempio, apri Vim (senza file o un file non correlato), quindi utilizza :eper aprire o creare un *.vimfile. Vedrai che il formatoptions è odi nuovo in esso, dal momento che è stato impostato per quel buffer ftplugin/vim.vime il tuo after/pluginfile non sarà in grado di sovrascriverlo.
filbranden

In ogni caso ... La tua risposta non è del tutto chiara su ciò che stai cercando di realizzare qui. Posso vedere (ora?) Che stai cercando di caricare vimrc per ultimo nel processo di avvio, dopo tutti i plug-in. La tua risposta non lo afferma davvero, sarebbe utile se tu iniziassi spiegando che ... Inoltre, mentre strace è bello e tutto, rispondere "quale directory è ultima" è abbastanza facile, solo guardando :set rtp?vedrai che ~/.vim/afterè scorso. Ma, come accennato in precedenza, questo non funziona davvero poiché foverrà ripristinato dai plugin ft e questo è davvero il problema qui.
filbranden

Lo fa assolutamente e funziona assolutamente. Sono stato aventi lo esatto stesso problema della OP dopo l'aggiornamento a Ubuntu 20.04. La mia soluzione l'ha "riparata", in quanto ha caricato il mio ~/.vimrc dopo che erano stati caricati gli altri plugin, permettendo così al mio ~/.vimrcdi ignorare le impostazioni predefinite, come previsto.
Karl Wilbur,
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.