Neovim: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
KKeine Bearbeitungszusammenfassung
 
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 34: Zeile 34:
}}
}}


[[Datei:Neovim unicode_listchars.png|thumbnail|250px|Neovim zeigt die angepassten ''Listchars'' (in grau) aus dem erweiterten Beispiel an.]]
[[Datei:Neovim_unicode_listchars.png|thumbnail|250px|Neovim zeigt die angepassten ''Listchars'' (in grau) aus dem erweiterten Beispiel an.]]
Einige Tables können auch durch Append-Aufrufe erweitert oder angepasst werden.
Einige Tables können auch durch Append-Aufrufe erweitert oder angepasst werden.


Zeile 79: Zeile 79:


Damit wird das Plugin beim laden direkt konfiguriert. Welche Parameter ein Plugin interpretieren kann, geht aus der jeweiligen Plugindokumentation hervor.
Damit wird das Plugin beim laden direkt konfiguriert. Welche Parameter ein Plugin interpretieren kann, geht aus der jeweiligen Plugindokumentation hervor.
=== Manuelle Installation ===
{{unvollständig|inline=1}}


=== Pluginmanager (am Beispiel von ''lazy.nvim'') ===
=== Pluginmanager (am Beispiel von ''lazy.nvim'') ===
Zeile 94: Zeile 97:
-- Falls lazy.nvim nicht installiert ist ...
-- Falls lazy.nvim nicht installiert ist ...
if not vim.loop.fs_stat(lazypath) then
if not vim.loop.fs_stat(lazypath) then
    vim.fn.system({'git', 'clone',
  vim.fn.system({'git', 'clone',
      '--branch=stable', '--filter=blob:none',
    '--branch=stable', '--filter=blob:none',
      '<nowiki>https://github.com/folke/lazy.nvim.git</nowiki>',
    '<nowiki>https://github.com/folke/lazy.nvim.git</nowiki>',
      lazypath
    lazypath
    })
  })
end
end
}}
}}


Damit wird der Pluginmanager initial installiert falls er nicht vorhanden sein sollte. Will man auch noch das letzte bisschen Performance rauskitzeln, so kann man die {{ic|if not}}-Abfrage ersatzlos entfernen, nachdem lazy.nvim installiert wurde, die Konfiguration ist dann allerdings nicht mehr komplett portabel, da Neovim ein installiertes lazy.nvim voraussetzt.
Damit wird der Pluginmanager initial installiert falls er nicht vorhanden sein sollte. Will man auch noch das letzte bisschen Performance rauskitzeln, so kann man die {{ic|if not}}-Abfrage ersatzlos entfernen, nachdem lazy.nvim installiert wurde, die Konfiguration ist dann allerdings nicht mehr komplett portabel, da Neovim ein installiertes lazy.nvim voraussetzt.
Wenn Pluginkonfigurationsdateien anlegt werden, werden die konfigurierten Plugins von lazy.nvim als Git-Repositorys unter {{ic|~/.local/share/nvim/lazy/}} abgelegt und von dort auch geladen. Man sollte hier nichts verändern. Unter {{ic|~/.cache/nvim/luac/}} werden mittels luac kompilierte Varianten der Plugins abgelegt, was das Laden der Plugins beschleunigt.


==== Konfiguration ====
==== Konfiguration ====
[[Datei:Neovim_lazy_dialog_installation.png|thumbnail|300px|Der Pluginmanager ''lazy.nvim'' hat das Plugin ''nvim-treesitter'' erkannt und automatisch installiert.]]
[[Datei:Neovim_lazy_dialog_installation.png|thumbnail|300px|Der Pluginmanager ''lazy.nvim'' hat das Plugin ''nvim-treesitter'' erkannt und automatisch installiert.]]


Nachdem lazy.nvim installiert wurde, muss es einmalig geladen werden. Hier bietet sich gleich an, die Plugins im Verzeichnis {{ic|~/.config/nvim/plugins}} zu verwalten. In diesem Verzeichnis liegende Lua-Dateien werden durch den Pluginmanager als Pluginkonfigurationsdateien interpretiert und geladen.
Nachdem lazy.nvim installiert wurde, muss es einmalig geladen werden. Hier bietet sich gleich an, die Plugins im Verzeichnis {{ic|~/.config/nvim/lua/plugins}} zu verwalten. In diesem Verzeichnis liegende Lua-Dateien werden durch den Pluginmanager als Pluginkonfigurationsdateien interpretiert und geladen.


  require('lazy').setup('plugins')
  require('lazy').setup('plugins')


Sofern im Verzeichnis {{ic|~/.config/nvim/plugins}} keine Dateien liegen, kommt es zu einer Fehlermeldung über nicht gefundene Spezifikationen für das Modul {{ic|plugins}}. Zuerst sollte also ein Plugin geladen werden. Hier bietet sich das Treesitter-Plugin an, um über den integrierten Parser ''Tree-sitter'' semantisches Syntaxhighlighting zu erhalten.
Sofern im Verzeichnis {{ic|~/.config/nvim/lua/plugins}} keine Dateien liegen, kommt es zu einer Fehlermeldung über nicht gefundene Spezifikationen für das Modul {{ic|plugins}}.
 
===== Plugin-Installation (Syntaxhighlighting) =====
Zuerst sollte also ein Plugin geladen werden. Hier bietet sich das Treesitter-Plugin an, um über den in Neovim integrierten Parser ''Tree-sitter'' semantisches Syntaxhighlighting zu erhalten.


{{hc|1=~/.config/nvim/plugins|2=
{{hc|1=~/.config/nvim/lua/plugins/treesitter.lua|2=
return {
return {
    'nvim-treesitter/nvim-treesitter',
  'nvim-treesitter/nvim-treesitter',
    build = ':TSUpdate',
  build = ':TSUpdate',
    event = { 'BufRead' },
  event = { 'BufRead' },
    main = 'nvim-treesitter.configs',
  main = 'nvim-treesitter.configs',
    opts = {
  opts = { -- Das Plugin bietet noch diverse weitere Optionen, hier seien also nur die wichtigsten genannt.
        indent = { enable = true },
    indent = { enable = true },   -- Automatische Einrückungen mit Tree-sitter
        highlight = { enable=true },
    highlight = { enable=true }, -- Das Syntax-Highlighting einschalten
        auto_install = true,
    auto_install = true,         -- Highlighting-Daten automatisch installieren
    }
  }
}
}
}}
}}


Darüber wird das Treesitter-Plugin geladen. Der erste Eintrag im Table definiert,m von wo das Plugin geladen wird. Wenn die Angabe im Schema {{ic|author/pluginname}} ist, wird Versucht, das Plugin von GitHub zu laden. Bei Angabe eines vollständigen URLs von eben jenem URL. Wenn man {{ic|1=dir = '/pfad/zum/plugin'}} benutzt, wird das Plugin ohne Download direkt vom angegebenen Pfad geladen.  
Darüber wird das Treesitter-Plugin geladen. Der erste Eintrag im Table definiert, von wo das Plugin geladen wird. Wenn die Angabe im Schema {{ic|author/pluginname}} ist, wird Versucht, das Plugin von GitHub zu laden. Bei Angabe eines vollständigen URLs von eben jenem URL. Wenn man {{ic|1=dir = '/pfad/zum/plugin'}} benutzt, wird das Plugin ohne Download direkt vom angegebenen Pfad geladen.


Wenn Neovim nun gestartet wird, erkennt der Pluginmanager automatisch die Plugindatei und lädt das entsprechende Plugin herunter. Verlassen wird der Dialog mit {{taste|Q}}. Man kann den Dialog jederzeit mittels {{ic|:Lazy}} öffnen. Die Einzelnen Dialogreiter werden mittels {{taste|Shift}}+{{taste|H}}, {{taste|I}}, {{taste|U}}, etc. aufgerufen und stellen diverse Informationen und Aktionen bereit.
Wenn Neovim nun gestartet wird, erkennt der Pluginmanager automatisch die Plugindatei und lädt das entsprechende Plugin herunter. Verlassen wird der Dialog mit {{taste|Q}}. Man kann den Dialog jederzeit mittels {{ic|:Lazy}} öffnen. Die Einzelnen Dialogreiter werden mittels {{taste|Shift}}+{{taste|H}}, {{taste|I}}, {{taste|U}}, etc. aufgerufen und stellen diverse Informationen und Aktionen bereit.
Es wird beim öffnen anderer Dateien nun zudem automatisch geprüft, ob Tree-sitter die Syntax der Datei erkennt, und wenn ja – und wenn noch nicht geschehen – werden automatisch die Syntaxhighlightinginformationen heruntergeladen und angewendet.
===== Colorscheme-Installation (Theme) =====
[[Datei:Neovim colorscheme example.png|thumbnail|250px|Neovim zeigt eine [[Systemd|Systemd-Unit]] an. Oben mit dem Colorscheme aus dem Beispiel, unten mit dem Original-Colorscheme.]]
Das Standard-Theme von Neovim ist sehr minimalistisch. Es wird dank des {{ic|nvim-treesitter}}-Plugins dieses zwar richtig angewendet, aber es wird nur wenig farblich unterschieden. Im Internet lassen sich viele Colorschemes finden, die sich einfach als Plugin installieren lassen, und mittels lazy.nvim aktiviert werden können.
Es wird empfohlen, das Colorscheme sofort zu laden, und dies auch mit hoher Priorität zu tun, so dass das Colorscheme auf jeden Fall geladen ist, bevor der Pluginmanager irgendetwas anderes lädt oder Neovim mit der Anzeige beginnt.
{{hc|1=~/.config/nvim/lua/plugins/colorscheme.lua|2=
return {
  'sainnhe/everforest',  -- Repository
  lazy = false,          -- Colorscheme sofort laden
  priority = 1000,      -- Mit hoher Priorität laden
  config = function ()
    vim.opt.background = 'light'          -- Hellen Hintergrund definieren
    vim.g.everforest_background = 'soft'  -- Hintergrundvariante bestimmen
    vim.cmd.colorscheme('everforest')    -- Das Colorscheme setzen
  end
}
}}
Hier wird das Colorscheme [https://github.com/sainnhe/everforest everforest] {{sprache|en}} in einer hellen Variante mit sanftem Hintergrund geladen. Colorschemes können – wie alle anderen Plugins – verschiedene Konfigurationsoptionen besitzen, die in den jeweiligen Readmes zu finden sind.


== Siehe auch ==
== Siehe auch ==
Zeile 139: Zeile 170:
* [https://tree-sitter.github.io/tree-sitter/ Der Parser Tree-sitter] {{sprache|en}}
* [https://tree-sitter.github.io/tree-sitter/ Der Parser Tree-sitter] {{sprache|en}}
* [https://github.com/folke/lazy.nvim Repository von lazy.nvim] {{sprache|en}}
* [https://github.com/folke/lazy.nvim Repository von lazy.nvim] {{sprache|en}}
* [https://dotfyle.com/neovim/colorscheme/top Sammlung vieler Colorschemes] {{sprache|en}}
[[Kategorie:Konsole]]
[[Kategorie:Editor]]
[[en:Neovim]]

Aktuelle Version vom 16. Januar 2025, 22:55 Uhr

„Neovim“ wurde von Dirk (Diskussion) als in Bearbeitung markiert. Um Bearbeitungskonflikte zu vermeiden, kontaktiere Dirk (Diskussion) bitte, bevor du den Artikel bearbeitest.


Die Standard-„Startseite“ von Neovim Version 0.10.3 ohne weitergehende Konfiguration

Neovim ist ein Vim-Fork mit dem Ziel, die Codebase zu verbessern und zu modernisieren, die Implementierung von APIs zu vereinfachen, und den Editor leicht mittels Lua zu Konfigurieren und zu scripten.

Installation

Das Programm ist als neovim in extra verfügbar, und kann von dort mittels Pacman installiert werden.

pacman -S neovim

Neovim lässt sich mittels seines Kurznamens nvim starten.

Vergleich zu Vim

Neovim ist vollständig kompatibel zum modalen Bearbeitungs-Workflow von Vim, sowie zu Vimscript v1, unterscheidet sich aber in einigen Punkten.

  • APIs stehen bei Neovim an erster Stelle, sie können von externen Programmen untersucht werden, sind dokumentiert, und es können verschiedene Versionen der APIs angeboten werden.
  • Die Kommunikation innerhalb Neovims wird über MessagePack realisiert, das es ermöglicht, Erweiterung in beliebigen Programmiersprachen zu entwickeln.
  • Neovim kann sehr einfach als Editor oder als Scripthost in andere Programme eingebettet werden.
  • Als Konfigurations- und Plugin-Sprache steht Lua an erster Stelle.
  • Der Parser generiert einen AST, Syntaxhighlighting und Fehleranalyse sind daher semantisch möglich, und nicht nur basierend auf regulären Ausdrücken.
  • Eingebauter LSP-Client

Es werden Vim-Plugins bis Version 8.x unterstützt. Es ist nicht geplant, Vimscript 9.x zu unterstützen.

Konfiguration

Neovim in der einfachen Beispielkonfiguration zeigt in der Datei wikibeispiel die relativen Zeilennummern, die hervorgehobene Cursorzeile, und den Rechtschreibfehler an.

Die Konfiguration erfolgt standardmäßig innerhalb des Verzeichnisses ~/.config/nvim. Von dort wird die Datei init.lua geladen und der in ihr vorhandene Lua-Code zur Konfiguration geladen.

Die Konfiguration von Neovim wird durch das Verändern von Lua-Tables vorgenommen. Tables sind eine flexible Datenstruktur, die verwendet wird, um Arrays, Listen, Dictionaries oder Objekte zu speichern und zu verwalten. Der am meisten benutzte Table ist vim.opt. Über diesen Table wird Neovim generell konfiguriert.

Da die Konfiguration sehr schnell sehr individuell wird, sei hier nur auf zwei gängige Varianten der Konfiguration eingegangen.

~/.config/nvim/init.lua
vim.opt.cursorline     = true  -- Aktuelle Zeile des Cursors hervorheben
vim.opt.spell          = true  -- Rechtschreibprüfung aktivieren
vim.opt.spelllang      = 'de'  -- Sprache der Rechtschreibprüfung einstellen
vim.opt.relativenumber = true  -- Zeige relative Zeilennummern an
Neovim zeigt die angepassten Listchars (in grau) aus dem erweiterten Beispiel an.

Einige Tables können auch durch Append-Aufrufe erweitert oder angepasst werden.

~/.config/nvim/init.lua
vim.opt_local.wrap = false  -- Führe keinen Zeilenumbruch aus
vim.opt.list       = true   -- Zeige Listchars an

vim.opt.listchars:append({
  tab      = '┏━┓',  -- Drei Zeichen aus denen das Tab gebaut wird
  trail    = '␣',    -- Leerzeichen am Zeilenende
  nbsp     = '▂',    -- Schmales geschütztes Leerzeichen
  precedes = '❰',    -- Langer Text, der nach links aus dem Buffer läuft
  extends  = '❱'     -- Langer Text, der nach rechts aus dem Buffer läuft
})

Dieses Beispiel definiert einige der Listchars um, Sonderzeichen die Standardmäßig nicht angezeigt werden. Normaler weise benutzt Neovim dafür gewöhnliche ASCII-Zeichen. Hierdurch werden Unicode-Zeichen definiert.

Plugins

Plugins werden automatisch geladen, wenn sich die Plugin-Dateien in einem Unterverzeichnis eines im runtimepath Vorhandenen Verzeichnisses befinden. Man kann sich diesen Table innerhalb Neovims anzeigen lassen.

:lua print(vim.inspect(vim.opt.runtimepath:get()))
{
  "/home/USERNAME/.config/nvim",
  "/home/USERNAME/.local/share/nvim/site",
  "/home/USERNAME/.config/nvim/after",
  "/usr/share/nvim/site",
  "/usr/share/nvim/runtime",
  [...]
}

Plugins, die dort liegen, lassen sich mittels Lua direkt als Module laden.

require('mein_plugin')          -- Plugin aus dem Verzeichnis `mein_plugin`
require('weitere_plugins.foo')  -- Plugin aus dem Verzeichnis `weitere_plugins/foo`

Die Konfiguration der Plugins ist abhängig davon, was die Plugins an Konfiguration unterstützen. Zum Beispiel kann man ein Plugin wie folgt laden:

require('mein_plugin').setup({
  option_A = true,
  option_b = 'foobar'
})

Damit wird das Plugin beim laden direkt konfiguriert. Welche Parameter ein Plugin interpretieren kann, geht aus der jeweiligen Plugindokumentation hervor.

Manuelle Installation

Dieser Artikel oder Artikelabschnitt ist noch nicht vollständig!

Pluginmanager (am Beispiel von lazy.nvim)

Für die Installation, Konfiguration, und das Laden von Plugins, ohne jedes mal manuell das Plugin herunterzuladen und einzurichten, haben sich Pluginmanager etabliert. Diese fassen den gesamten Prozess zusammen und bieten auch meist eine entsprechende Schnittstelle zur Überprüfung und Wartung der Plugins.

Der am weitesten verbreitete und funktionsreichste Pluginmanager ist lazy.nvim. Dieser ist sehr auf Performance ausgelegt und bietet zudem die Möglichkeit, Plugins erst dann zu laden, wenn sie erstmalig benutzt werden. So kann zum Beispiel ein Textformatierplugin erst dann geladen werden, wenn die entsprechende Tastenkombination gedrückt wird, anstatt immer direkt bei jedem starten von Neovim geladen zu werden, was die Startzeit insgesamt gesehen deutlich verbessert.

Installation

lazy.nvim benötigt Git, dies muss also installiert sein. Dann lädt man die Plugin-Dateien herunter und stellt sie dem runtimepath voran. Um die Konfiguration in sich geschlossen zu halten, kann man dies innerhalb der Neovim-Konfiguration erledigen, und muss auf dem Zielsystem beim Verteilen der Konfiguration nur sicherstellen, dass Git (und eben Neovim) installiert sind.

~/.config/nvim/init.lua
local lazypath = vim.fn.stdpath('data')..'/lazy/lazy.nvim'  -- Zielpfad definieren
vim.opt.rtp:prepend(lazypath)                               -- Zielpfad voranstellen

-- Falls lazy.nvim nicht installiert ist ...
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({'git', 'clone',
    '--branch=stable', '--filter=blob:none',
    'https://github.com/folke/lazy.nvim.git',
    lazypath
  })
end

Damit wird der Pluginmanager initial installiert falls er nicht vorhanden sein sollte. Will man auch noch das letzte bisschen Performance rauskitzeln, so kann man die if not-Abfrage ersatzlos entfernen, nachdem lazy.nvim installiert wurde, die Konfiguration ist dann allerdings nicht mehr komplett portabel, da Neovim ein installiertes lazy.nvim voraussetzt.

Wenn Pluginkonfigurationsdateien anlegt werden, werden die konfigurierten Plugins von lazy.nvim als Git-Repositorys unter ~/.local/share/nvim/lazy/ abgelegt und von dort auch geladen. Man sollte hier nichts verändern. Unter ~/.cache/nvim/luac/ werden mittels luac kompilierte Varianten der Plugins abgelegt, was das Laden der Plugins beschleunigt.

Konfiguration

Der Pluginmanager lazy.nvim hat das Plugin nvim-treesitter erkannt und automatisch installiert.

Nachdem lazy.nvim installiert wurde, muss es einmalig geladen werden. Hier bietet sich gleich an, die Plugins im Verzeichnis ~/.config/nvim/lua/plugins zu verwalten. In diesem Verzeichnis liegende Lua-Dateien werden durch den Pluginmanager als Pluginkonfigurationsdateien interpretiert und geladen.

require('lazy').setup('plugins')

Sofern im Verzeichnis ~/.config/nvim/lua/plugins keine Dateien liegen, kommt es zu einer Fehlermeldung über nicht gefundene Spezifikationen für das Modul plugins.

Plugin-Installation (Syntaxhighlighting)

Zuerst sollte also ein Plugin geladen werden. Hier bietet sich das Treesitter-Plugin an, um über den in Neovim integrierten Parser Tree-sitter semantisches Syntaxhighlighting zu erhalten.

~/.config/nvim/lua/plugins/treesitter.lua
return {
  'nvim-treesitter/nvim-treesitter',
  build = ':TSUpdate',
  event = { 'BufRead' },
  main = 'nvim-treesitter.configs',
  opts = { -- Das Plugin bietet noch diverse weitere Optionen, hier seien also nur die wichtigsten genannt.
    indent = { enable = true },   -- Automatische Einrückungen mit Tree-sitter
    highlight = { enable=true },  -- Das Syntax-Highlighting einschalten
    auto_install = true,          -- Highlighting-Daten automatisch installieren
  }
}

Darüber wird das Treesitter-Plugin geladen. Der erste Eintrag im Table definiert, von wo das Plugin geladen wird. Wenn die Angabe im Schema author/pluginname ist, wird Versucht, das Plugin von GitHub zu laden. Bei Angabe eines vollständigen URLs von eben jenem URL. Wenn man dir = '/pfad/zum/plugin' benutzt, wird das Plugin ohne Download direkt vom angegebenen Pfad geladen.

Wenn Neovim nun gestartet wird, erkennt der Pluginmanager automatisch die Plugindatei und lädt das entsprechende Plugin herunter. Verlassen wird der Dialog mit Q. Man kann den Dialog jederzeit mittels :Lazy öffnen. Die Einzelnen Dialogreiter werden mittels ⇧ Shift+H, I, U, etc. aufgerufen und stellen diverse Informationen und Aktionen bereit.

Es wird beim öffnen anderer Dateien nun zudem automatisch geprüft, ob Tree-sitter die Syntax der Datei erkennt, und wenn ja – und wenn noch nicht geschehen – werden automatisch die Syntaxhighlightinginformationen heruntergeladen und angewendet.

Colorscheme-Installation (Theme)
Neovim zeigt eine Systemd-Unit an. Oben mit dem Colorscheme aus dem Beispiel, unten mit dem Original-Colorscheme.

Das Standard-Theme von Neovim ist sehr minimalistisch. Es wird dank des nvim-treesitter-Plugins dieses zwar richtig angewendet, aber es wird nur wenig farblich unterschieden. Im Internet lassen sich viele Colorschemes finden, die sich einfach als Plugin installieren lassen, und mittels lazy.nvim aktiviert werden können.

Es wird empfohlen, das Colorscheme sofort zu laden, und dies auch mit hoher Priorität zu tun, so dass das Colorscheme auf jeden Fall geladen ist, bevor der Pluginmanager irgendetwas anderes lädt oder Neovim mit der Anzeige beginnt.

~/.config/nvim/lua/plugins/colorscheme.lua
return {
  'sainnhe/everforest',  -- Repository
  lazy = false,          -- Colorscheme sofort laden
  priority = 1000,       -- Mit hoher Priorität laden
  config = function ()
    vim.opt.background = 'light'          -- Hellen Hintergrund definieren
    vim.g.everforest_background = 'soft'  -- Hintergrundvariante bestimmen
    vim.cmd.colorscheme('everforest')     -- Das Colorscheme setzen
  end
}

Hier wird das Colorscheme everforest in einer hellen Variante mit sanftem Hintergrund geladen. Colorschemes können – wie alle anderen Plugins – verschiedene Konfigurationsoptionen besitzen, die in den jeweiligen Readmes zu finden sind.

Siehe auch

  • Vi und Vim für die „Vorgänger“

Weblinks