Verändern von Plugin-Variablen in Neovim in der init.lua

Hallo Leute,

ich würde gerne in Neovim eine durch ein Plugin eingeführte Variable X, ein Dictionary, (Der Vollständigkeit halber: Plugin=vimtex, X=vimtex_syntax_conceal) in der init.lua ändern, um das Plugin entsprechend zu konfigurieren, da ich leider keine Möglichkeit gefunden habe das über die Mechaniken des Plugins zu realisieren. Wie man das prinzipiell macht, weiß ich prinzipiell und während einer laufenden Sitzung klappt das auch – nur eben nicht von Beginn an. Da ich weder lua noch vimscript beherrsche, könnte von mir gezeigter Code vllt nicht optimal sein.

Meine init.lua:

vim.cmd("let g:vimtex_syntax_conceal['sections'] = 0")

Allerdings erhalte ich beim start von Neovim folgende Fehlermeldung:

  • Ob g: dabei steht, spielt keine Rolle (das bedeutet, soweit ich weiß, global)

In einer laufenden Sitzung kann ich den Wert (wie erwähnt) per

let g:vimtex_syntax_conceal['sections'] = 0

ändern aber die entsprechende Einstellung wird nicht aktiv.

Ich würde euch deswegen gerne fragen, woran das liegen kann. Ich vermute, dass der Fehler recht simpel ist, wenn man sich mit vimscript, lua und der Programmierung von Plugins auskennt aber da ich eigentlich nur ein bisschen rumspielen möchte um Neovim besser kennenzulernen, hatte und habe ich keine Lust mich erst in diese Themen einzuarbeiten.

Der Fehler wird wahrscheinlich deswegen ausgegeben, da das dict vimtex_syntax_conceal noch nicht definiert wurde als du vim.cmd aufrufst (Ich kenne mich mit vimtex nicht aus, aber ich vermute Mal, dass die Variable vom Plugin definiert wird).
Je nachdem wie du das Plugin installiert hast, kannst du die Variable definieren, nachdem vimtex initialisiert wurde. Wenn du keinen Plugin-Manager verwendest kannst du das glaube ich einfach in $XDG_CONFIG_HOME/nvim/after/plugin/vimtex.lua packen (siehe :h after-directory). (Ich persönlich verwende einen Plugin-Manager also bin mir nicht 100% sicher ob das genau so geht)

Du kannst übrigens auch mit lua direkt auf vimtex_syntax_control zugreifen:

vim.g.vimtex_syntax_control['sections'] = 0

(:h vim.g)

TLDR: Keine Lust mehr, der Computer hat gewonnen, ich hardcode die Werte einfach in der entsprechenden vimtex-Datei.

Falls es von Interesse ist, die weitere Entwicklung:
Irgendwie bekomme ich das nicht hin (leider habe ich deinen Beitrag irrtümlich als Lösung markiert).
Dazu kommt, dass ich je nach Befehl unterschiedliche Meldungen erhalten.
Wenn ich

vim.cmd("let g:vimtex_syntax_conceal['sections'] = 0")

nutze, kommt „Undefined variable“:


und bei

vim.g.vimtex_syntax_conceal['sections'] = 0

Beide Zeilen stehen in vimtex.lua aber die Datei habe ich aber nicht unter after/ gespeichert (wie man sieht). Ich nutze auch einen Plugin-Manager, nämlich packer. Da mich das ganz nervt und ich sowieso schon viel zu viel Zeit in diese Problematik gesteckt habe, habe ich mich dazu entschieden, die entsprechenden Werte einfach in die entsprechendenvimtex-Datei zu schreiben (schon geschehen). Da die Werte nur selten geändert werden sollten, ist das nicht so schlimm. Lieber spät als nie ausbrechen: Eskalierendes Commitment – Wikipedia.

Inzwischen habe ich die Lösung gefunden aber sie funktioniert vllt. nur für diesen bestimmten Fall:

Die Variable g:vimtex_syntax_conceal aus dem Plugin vimtex ist ein dictionary, vgl. :h g:vimtex_syntax_conceal, bzw. eine „Lua Table“, wenn man das Feld per vim.g.vimtex_syntax_conceal anspricht. Im Weiteren werde ich mich auf den Lua-Fall konzentrieren, weil ich VimScript leider nicht beherrsche.

Man kann zwar in der init.lua nicht einzelne Einträge per

vim.g.vimtex_syntax_conceal['sections'] = 2 -- Standardwert: 0

ändern aber die ganze Tabelle per se (aus :h g:vimtex_syntax_conceal kopiert), dh. man setzt einfach

vim.g.vimtex_syntax_conceal = {
  accents = 1,
  ligatures = 1,
  cites = 1,
  fancy = 1,
  spacing = 1,
  greek = 1,
  math_bounds = 1,
  math_delimiters = 1,
  math_fracs = 1,
  math_super_sub = 1,
  math_symbols = 1,
  sections = 2, -- Standardwert: 0
  styles = 1,
}

in seine init.lua und dann wird der neue Wert verwendet.