définir les options de format dans vimrc est ignoré

9

Vim continue automatiquement un commentaire lorsque j'appuie sur Entrée en mode Insertion, ce que je trouve utile.

Cependant, je ne veux pas que le commentaire se poursuive après avoir appuyé sur «o» en mode normal pour insérer une nouvelle ligne sous la fin du commentaire.

J'ai lu que je dois supprimer l'option ode mon formatoptions, alors j'ai mis cette ligne juste à la fin de mon fichier vimrc:

set formatoptions-=o

Mais cela n'a rien changé, et lorsque :set formatoptionsj'exécute depuis iside of vim, cela me montre que mes options de format sont croql.

Comment puis-je me débarrasser du «o»?

Éditer:

J'ai suivi certaines étapes indiquées dans les commentaires de Sato Katsura:

La solution commence par l'exécution :verb set fopour voir où les options de format ont été modifiées pour la dernière fois.

Voici la sortie vers verb set fo:

  formatoptions=croql
        Last set from /usr/share/vim/vim73/ftplugin/vim.vim
theonlygusti
la source
1
@DJMcMayhem Cela ne résout pas mon problème. Comme vous pouvez le voir, j'ai adopté les approches recommandées par les réponses à cette question, et le comportement de vim n'a pas changé.
theonlygusti
1
Oui je vois ça. J'ai été trop précipité avec mon vote serré, alors je me suis rétracté maintenant. Cependant, cela ressemble maintenant à un problème avec votre .vimrc, nous ne pouvons donc pas vous aider tant que vous ne l'aurez pas publié. Je suppose qu'un plugin le modifie ou qu'il n'est pas correctement source.
James
2
Fondamentalement, la question est "pourquoi la ligne set formatoptions-=odans mon vimrc ne fonctionne-t-elle pas?", Que cela désactive les commentaires lorsque la pression oest fortuite :-)
Martin Tournoij
@Carpetsmoker ouais à peu près ... faut-il le modifier?
theonlygusti

Réponses:

8

Au vimdémarrage, il s'exécute $VIMRUNTIME/ftdetect.vimpour savoir quel type de fichier vous modifiez; puis, si vous l'avez 'ftplugin'défini, il source $VIMRUNTIME/ftplugin.vimquelles sources $VIMRUNTIME/ftplugin/&filetype.vim(voir :help startuppour plus de détails).

Vous pouvez modifier ou remplacer $VIMRUNTIME/ftplugin.vimou $VIMRUNTIME/ftplugin/&filetype.vim. Créez un dossier et un sous-dossier dans votre répertoire personnel appelé .vim/after.

Si vous souhaitez remplacer les options de format pour tous les plugins de type de fichier, modifiez $HOME/.vim/after/ftplugin.vim, sinon modifiez $HOME/.vim/after/ftplugin/lua.vim(ou remplacez luapar la langue de votre choix - dans votre cas, c'est vim). Pour une explication appropriée de la façon dont cela fonctionne, voir :help 'runtimepath'(et :help :runtime).

Mettez le contenu suivant dans le fichier:

set formatoptions-=o

Vous pouvez voir si cela fonctionne en exécutant :scriptnames. Vous devriez obtenir une liste comme celle-ci:

  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

Notez les lignes 11 et 12. Vos chemins d'accès aux fichiers seront un peu différents.

abcq2
la source
1
Cela pourrait être utile pour quelqu'un. Dans ma situation, j'utilise vim-plug, et certains plugins (je ne sais pas lequel) ont changé le formatoptions, cependant mon .vim/afterest originaire après ces plugins ...
voldikss
Je pense que la bonne commande est :scriptnames.
Jari Turkia
Par essais et erreurs, j'ai appris que d' essayer de forcer formatoptionsà ~/.vim/after/ftplugins.vimne fonctionne pas - je rencontrais cet argument qui tri de explique pourquoi.
Stabledog
3

J'ai découvert que je peux fournir une solution de fortune en utilisant une autocommande.

La ligne suivante de votre .vimrcfichier doit appliquer les nouvelles options de format partout:

autocmd FileType * set formatoptions-=o

Cependant, cela ne permet pas vraiment de résoudre le problème; Je ne comprends toujours pas pourquoi un simple setn'était pas suffisant, et comme cela a été souligné dans les commentaires, cette solution n'est pas idéale.

theonlygusti
la source
1
Cela peut fonctionner , mais c'est très délicat et ce n'est pas la solution que je recommanderais.
James
@DJMcMayhem hmm, quels problèmes possibles pourrais-je rencontrer en utilisant cette solution? N'hésitez pas à poster une réponse fournissant une meilleure solution, je préfère évidemment la :):
theonlygusti
1
Pourquoi pas @DJMcMayhem? Le problème est presque certainement dû à l'un des ensembles de types de fichiers formatoptions(par exemple Perl, Ruby et plusieurs autres). Cela semble être une solution acceptable?
Martin Tournoij
@Carpetsmoker Je suppose que c'est juste. Je n'y avais pas pensé. Il semble juste étrange de modifier un paramètre dans un autocmd, plutôt que de le définir directement.
James
2
@SatoKatsura Dépend de ce que vous voulez, je suppose. Certaines personnes pourraient préférer ne jamais ajouter de caractère de commentaire lors de l'utilisation oquel que soit le type de fichier, auquel cas cela semble approprié.
Martin Tournoij
2

J'ai eu une expérience similaire à celle d'OP.

J'ai trouvé que cela ts'ajoutait à mon formatoptionsmalgré la tentative délibérée de le désactiver.

Après avoir utilisé :verbose set fopour être certain qu'il provenait de .vimrc, j'ai remarqué que le comportement semblait dépendre de l'endroit où je mettais les options de format dans mon fichier .vimrc. J'ai découvert que cela se produisait à cause de l'endroit où j'avais placé set nocompatibledans mon dossier:

set formatoptions=qj
set nocompatible

:set fo?
  formatoptions=tcq

Il s'avère que cela est spécifiquement mentionné dans :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.

Après avoir suivi ce bon conseil, mes formatoptionsont été conservés comme souhaité. Je ne sais pas si OP rencontrait ce problème exact ou s'il s'agissait d'une autre interaction, mais j'étais heureux de découvrir la cause. Espérons que cela aide quelqu'un d'autre à comprendre ce qui (initialement inexplicablement) change ses paramètres.

J'aime aussi l'autocmd de theonlygusti - il y a des options que je ne veux jamais définir quel que soit le type de fichier. Je vous regarde, t.

déZZé
la source
2

Comme beaucoup d'entre nous utilisateurs de Vim souffrent de cela, je suis allé enquêter un peu plus.

Ma solution est de créer le $HOME/.vim/after/ftplugin.vimcomme suggéré par @ abcq2 juste pour réaliser, cela ne changera rien. Étant donné la liste donnée par :scriptnames, ce fichier est source bien trop tôt. Cependant, la deuxième suggestion de créer un $HOME/.vim/after/ftplugin/lua.vimfichier LUA aide.

En straceing, j'ai appris que les post-plugins génériques de type de fichier sont sourcés avant le type de fichier et que les plug-in spécifiques de type de fichier sont sourcés après le type de fichier. Pas très intuitif, mais c'est comme ça que ça marche.

Il y a plus d'informations dans mon blog à ce sujet.

Jari Turkia
la source
Je ne sais pas pourquoi vous pensez qu'une after/ftpluginaide serait utile. La meilleure façon est plutôt d'utiliser des remplacements spécifiques au type de after/<filetype>.vimfichier (en utilisant soit une autocommande FileType ou un fichier spécifique ). Voir aussi l'aide sur:h ftplugin-overrule
Christian Brabandt
Je pense que cela aiderait, car @ abcq2 l'a suggéré dans sa réponse ci-dessus. Je pense que j'utilise after/<filetype>.vimdans ma réponse.
Jari Turkia
0

J'ai regardé quels fichiers / chemins ont vimtenté de charger, en utilisant strace(comme décrit ici ), puis j'ai créé un ~/.vim/after/plugin/répertoire (c'était le dernier emplacement de configuration qui a vimtenté de charger), puis j'ai créé un lien symbolique ~/.vimrcvers cet emplacement:

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

Ce que j'ai fait avec strace:

Fondamentalement, j'ai couru:

strace -o ~/vim_strace vim

... puis quittez immédiatement vim( :q!). Ensuite, j'ai chargé up ~/vim_strace( $ vim ~/vim_strace) et suis allé à la fin ( :$). Ensuite, j'ai commencé à lire à partir du bas à la recherche de lignes commençant par openat(AT_FDCWD, "/home/karl/......

La première chose que je vois est:

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

Mais ce n'est pas là que je veux mes options de configuration. La ligne suivante, juste au-dessus de la .viminfoligne, était:

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

... "Pas un tel fichier ou répertoire", hein? On dirait un gagnant. C'est donc celui que j'ai choisi.

Maintenant, fonctionne parfaitement.

J'espère que cela aidera quelqu'un quelque part.

Karl Wilbur
la source
1
Désolé, mais je ne vois pas comment c'est une réponse à cette question. Pouvez-vous clarifier et expliquer pourquoi cela résoudra le problème des options de format?
filbranden
Parce que cela permet vimd'honorer les options du .vimrcfichier. Veuillez relire et assurez-vous de bien comprendre à la fois la question et la réponse.
Karl Wilbur
1) Votre vimrc (entier) n'est pas vraiment censé fonctionner sur le contexte d'un plugin. 2) Quelque chose comme l'ajout d'une ligne ~/.vim/after/plugin/formatoptions.vimavec set fo-=oest plus acceptable ... Mais cela ne fonctionne toujours pas lorsqu'un plug-in de type de fichier l'emporte. Par exemple, ouvrez Vim (sans fichier ou sans fichier), puis utilisez :epour ouvrir ou créer un *.vimfichier. Vous verrez que les options de formatage sont oà nouveau présentes, car elles sont définies pour ce tampon par ftplugin/vim.vimet votre after/pluginfichier ne pourra pas le remplacer.
filbranden
En tout cas ... Votre réponse n'est pas totalement claire sur ce que vous essayez d'accomplir ici. Je peux voir (maintenant?) Que vous essayez de charger vimrc en dernier dans le processus de démarrage, après tous les plug-ins. Votre réponse ne dit pas vraiment cela, il serait utile que vous commenciez par expliquer que ... De plus, bien que strace soit agréable et tout, répondre à "quel répertoire est le dernier" est assez facile, il suffit de regarder :set rtp?vous verrez que ~/.vim/afterc'est dernier. Mais, comme mentionné précédemment, cela ne fonctionne pas vraiment car foil sera réinitialisé par les plugins ft et c'est vraiment le problème ici.
filbranden
C'est absolument le cas et cela fonctionne absolument. J'avais exactement le même problème que l'OP après la mise à niveau vers Ubuntu 20.04. Ma solution l'a "corrigé", en ce sens qu'il m'a chargé ~/.vimrc après le chargement des autres plugins, ce qui m'a permis ~/.vimrcde remplacer les valeurs par défaut, comme prévu.
Karl Wilbur