set formatoptions in vimrc wird ignoriert

9

Vim setzt automatisch einen Kommentar fort, wenn ich im Einfügemodus die Eingabetaste drücke, was ich hilfreich finde.

Ich möchte jedoch nicht, dass der Kommentar fortgesetzt wird, nachdem im normalen Modus 'o' gedrückt wurde, um eine neue Zeile unter dem Ende des Kommentars einzufügen.

Ich habe gelesen, dass ich die Option oaus meiner entfernen muss formatoptions, also setze ich diese Zeile direkt am Ende meiner vimrc-Datei:

set formatoptions-=o

Aber es hat nichts geändert, und wenn ich :set formatoptionsvon iside of vim ausführe , zeigt es mir, dass meine Formatoptionen sind croql.

Wie werde ich das 'o' los?

Bearbeiten:

Ich habe einige Schritte befolgt, auf die in den Kommentaren von Sato Katsura hingewiesen wurde:

Die Lösung beginnt mit der Ausführung :verb set fo, um festzustellen, wo die Formatoptionen zuletzt geändert wurden.

Hier ist die Ausgabe an verb set fo:

  formatoptions=croql
        Last set from /usr/share/vim/vim73/ftplugin/vim.vim
theonlygusti
quelle
1
@DJMcMayhem Das löst mein Problem nicht. Wie Sie sehen, habe ich die in den Antworten auf diese Frage empfohlenen Ansätze gewählt, und das Verhalten von vim hat sich nicht geändert.
Theonlygusti
1
Ja ich sehe es. Ich war zu voreilig mit meiner engen Abstimmung, also habe ich mich jetzt zurückgezogen. Jetzt klingt es jedoch nach einem Problem mit Ihrem .vimrc, sodass wir erst dann helfen können, wenn Sie es veröffentlichen. Ich vermute, ein Plugin ändert es oder es ist nicht die richtige Quelle.
James
2
Grundsätzlich ist die Frage "Warum funktioniert die Zeile set formatoptions-=oin meinem vimrc nicht?", Dass dies Kommentare deaktiviert, wenn das Drücken ozufällig ist :-)
Martin Tournoij
@Carpetsmoker ja so ziemlich ... muss es bearbeitet werden?
Theonlygusti

Antworten:

8

Beim vimStart wird ausgeführt, $VIMRUNTIME/ftdetect.vimum herauszufinden, welchen Dateityp Sie bearbeiten. Wenn Sie dann 'ftplugin'festgelegt haben, werden $VIMRUNTIME/ftplugin.vimdie Quellen ermittelt $VIMRUNTIME/ftplugin/&filetype.vim(siehe :help startupweitere Einzelheiten).

Sie können ändern oder außer Kraft setzen $VIMRUNTIME/ftplugin.vimoder $VIMRUNTIME/ftplugin/&filetype.vim. Erstellen Sie einen Ordner und einen Unterordner in Ihrem Home-Verzeichnis mit dem Namen .vim/after.

Wenn Sie Formatoptionen für alle Dateityp-Plugins überschreiben möchten, bearbeiten Sie sie, bearbeiten Sie sie $HOME/.vim/after/ftplugin.vimanderweitig $HOME/.vim/after/ftplugin/lua.vim(oder ersetzen Sie sie luadurch eine beliebige Sprache - in Ihrem Fall vim). Eine genaue Erklärung der Funktionsweise finden Sie unter :help 'runtimepath'(und :help :runtime).

Fügen Sie den folgenden Inhalt in die Datei ein:

set formatoptions-=o

Sie können sehen, ob es funktioniert, indem Sie laufen :scriptnames. Sie sollten eine Liste wie die folgende erhalten:

  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

Beachten Sie die Zeilen 11 und 12. Ihre Dateipfade sehen etwas anders aus.

abcq2
quelle
1
Dies könnte für jemanden hilfreich sein. In meiner Situation benutze ich vim-plug und einige Plugins (ich weiß nicht welche) haben das geändert formatoptions, aber meine werden .vim/afternach diesen Plugins bezogen ...
voldikss
Ich denke der richtige Befehl ist :scriptnames.
Jari Turkia
Durch Versuch und Irrtum, habe ich gelernt , dass der Versuch zu zwingen , formatoptionsin der ~/.vim/after/ftplugins.vimArbeit nicht - dann begegnete ich dieses Argument , die Art-of erklärt , warum.
Stabledog
3

Ich fand heraus, dass ich mit einem Autobefehl eine provisorische Lösung bereitstellen kann.

Die folgende Zeile in Ihrer .vimrcDatei sollte die neuen Formatoptionen überall anwenden:

autocmd FileType * set formatoptions-=o

Dies löst das Problem jedoch nicht wirklich. Ich verstehe immer noch nicht, warum ein einfaches setnicht genug war, und wie in den Kommentaren ausgeführt wurde, ist diese Lösung nicht ideal.

theonlygusti
quelle
1
Das mag funktionieren , ist aber sehr klobig und nicht die Lösung, die ich empfehlen würde.
James
@DJMcMayhem hmm, auf welche möglichen Probleme könnte ich mit dieser Lösung stoßen? Bitte
zögern
1
Warum nicht @DJMcMayhem? Das Problem liegt mit ziemlicher Sicherheit darin, dass einer der Dateitypen festgelegt ist formatoptions(z. B. Perl, Ruby und mehrere andere). Dies scheint eine akzeptable Lösung zu sein?
Martin Tournoij
@ Carpetsmoker Ich denke, das ist fair. Daran hatte ich nicht gedacht. Es scheint nur seltsam, eine Einstellung in einem Autocmd zu ändern, anstatt sie nur direkt festzulegen.
James
2
@SatoKatsura Kommt darauf an, was du willst, denke ich. Einige oBenutzer ziehen es möglicherweise vor, bei der Verwendung unabhängig vom Dateityp niemals ein Kommentarzeichen hinzuzufügen. In diesem Fall erscheint dies angemessen.
Martin Tournoij
2

Ich hatte eine ähnliche Erfahrung wie OP.

Ich stellte fest, dass tdies zu meinem hinzugefügt wurde, formatoptionsobwohl ich absichtlich versucht hatte, es zu deaktivieren.

Nachdem :verbose set foich sichergestellt hatte, dass es von .vimrc stammt, bemerkte ich, dass das Verhalten davon abzuhängen schien, wo ich die Formatoptionen in meine .vimrc-Datei eingefügt hatte. Ich stellte fest, dass dies geschah, weil ich es set nocompatiblein meiner Datei abgelegt hatte:

set formatoptions=qj
set nocompatible

:set fo?
  formatoptions=tcq

Es stellt sich heraus, dass dies ausdrücklich erwähnt wird 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.

Nachdem ich diesen guten Rat befolgt hatte, wurden meine formatoptionswie gewünscht erhalten. Ich weiß nicht, ob OP genau auf dieses Problem gestoßen ist oder ob es sich um eine andere Interaktion handelt, aber ich war froh herauszufinden, was es verursacht hat. Hoffentlich hilft dies jemand anderem herauszufinden, was (anfangs unerklärlich) seine Einstellungen ändert.

Ich mag auch das Autocmd von theonlygusti - es gibt einige Optionen, die ich einfach nie einstellen möchte, unabhängig vom Dateityp. Ich sehe dich an t.

deZZed
quelle
2

Da viele von uns Vim-Benutzern darunter leiden, habe ich mich eingehender mit diesem Thema befasst.

Meine Lösung besteht darin, das $HOME/.vim/after/ftplugin.vimvon @ abcq2 vorgeschlagene zu erstellen, nur um zu erkennen, dass es nichts ändert. Angesichts der Liste von :scriptnamesist diese Datei viel zu früh als Quelle. Der zweite Vorschlag, eine $HOME/.vim/after/ftplugin/lua.vimfür LUA-Dateien zu erstellen, hilft jedoch.

Durch straceing habe ich gelernt, dass generische Nach-Plugins vom Dateityp bezogen werden, bevor der Dateityp und datentypspezifische Nach-Plugins nach dem Dateityp bezogen werden. Nicht sehr intuitiv, aber so funktioniert es.

In meinem Blog gibt es mehr Informationen dazu.

Jari Turkia
quelle
Ich bin mir nicht sicher, warum du denkst, dass ein after/ftpluginhelfen würde. Der bessere Weg ist vielmehr, datentypspezifische Überschreibungen zu verwenden (entweder mit einem FileType-Autobefehl oder einer bestimmten after/<filetype>.vimDatei). Siehe auch die Hilfe bei:h ftplugin-overrule
Christian Brabandt
Ich denke, es würde helfen, weil @ abcq2 es in seiner Antwort oben vorgeschlagen hat. Ich denke, ich benutze after/<filetype>.vimin meiner Antwort.
Jari Turkia
0

Ich habe nachgesehen, welche Dateien / Pfade vimbeim Laden versucht haben strace(wie hier beschrieben ), dann ein ~/.vim/after/plugin/Verzeichnis erstellt (es war der letzte Konfigurationsspeicherort, der vimversucht hat zu laden) und dann meine ~/.vimrcmit diesem Speicherort verknüpft :

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

Was ich gemacht habe mit strace:

Grundsätzlich lief ich:

strace -o ~/vim_strace vim

... dann sofort beenden vim( :q!). Als nächstes lud ich ~/vim_strace( $ vim ~/vim_strace) und ging zum Ende ( :$). Dann fing ich an, von unten nach Zeilen zu lesen, die mit beginnen openat(AT_FDCWD, "/home/karl/......

Das erste was ich sehe ist:

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

Aber hier möchte ich meine Konfigurationsoptionen nicht. Die nächste Zeile direkt über der .viminfoZeile war:

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

... "Keine solche Datei oder kein solches Verzeichnis", oder? Scheint wie ein Gewinner. Also, das ist der, den ich gewählt habe.

Funktioniert jetzt perfekt.

Hoffe das hilft jemandem irgendwo.

Karl Wilbur
quelle
1
Entschuldigung, aber ich verstehe nicht, wie dies eine Antwort auf diese Frage ist. Können Sie bitte klarstellen und erklären, warum dies das Problem mit Formatoptionen löst?
filbranden
Weil es tatsächlich vimdie Optionen in der .vimrcDatei berücksichtigt. Bitte lesen Sie die Frage und meine Antwort noch einmal durch und stellen Sie sicher, dass Sie sie verstehen.
Karl Wilbur
1) Ihr (ganzes) vimrc soll eigentlich nicht im Kontext eines Plugins laufen. 2) Etwas wie das Hinzufügen einer Zeile ~/.vim/after/plugin/formatoptions.vimmit set fo-=oist schmackhafter ... Aber das funktioniert immer noch nicht, wenn ein Dateityp-Plug-In dies überschreibt. Öffnen Sie beispielsweise Vim (ohne Datei oder eine nicht verwandte Datei) und :eöffnen oder erstellen Sie dann eine *.vimDatei. Sie werden sehen, dass Formatoptionen owieder enthalten sind, da dies für diesen Puffer von festgelegt wird ftplugin/vim.vimund Ihre after/pluginDatei ihn nicht überschreiben kann.
filbranden
Auf jeden Fall ... Ihre Antwort ist nicht ganz klar, was Sie hier erreichen wollen. Ich kann (jetzt?) Sehen, dass Sie versuchen, vimrc zuletzt im Startvorgang zu laden, nach allen Plug-Ins. Ihre Antwort ist nicht wirklich fest , dass, es würde helfen , wenn Sie das mit der Erklärung ... auch begonnen, während Strace schön und alle, zu beantworten „ das Verzeichnis zuletzt ist“ ist ziemlich einfach, nur auf der Suche :set rtp?Sie werden sehen , dass ~/.vim/afterist letzte. Aber wie bereits erwähnt, funktioniert dies nicht wirklich, da foes durch ft-Plugins zurückgesetzt wird und das ist hier wirklich das Problem.
filbranden
Es funktioniert absolut und es funktioniert absolut. Nach dem Upgrade auf Ubuntu 20.04 hatte ich genau das gleiche Problem wie das OP. Meine Lösung hat es "behoben", indem sie meine geladen hat, ~/.vimrc nachdem die anderen Plugins geladen wurden, wodurch ich ~/.vimrcdie Standardeinstellungen wie beabsichtigt überschreiben konnte.
Karl Wilbur