Neovim: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{inuse|[[Benutzer:Dirk|Dirk]] ([[Benutzer Diskussion:Dirk|Diskussion]])}}
{{inuse|[[Benutzer:Dirk|Dirk]] ([[Benutzer Diskussion:Dirk|Diskussion]])}}
Neovim ist ein [[Vim|Vim-Fork]] mit dem Ziel, die Codebase zu verbessern und zu modernisieren, die implementierung von APIs zu vereinfachen, und den Editor leicht mittels {{wikipedia|Lua}} zu Konfigurieren und zu scripten.
[[Datei:Neovim standard.png|thumbnail|300px|Die Standard-„Startseite“ von Neovim Version 0.10.3 ohne weitergehende Konfiguration]]
Neovim ist ein [[Vim|Vim-Fork]] mit dem Ziel, die Codebase zu verbessern und zu modernisieren, die Implementierung von APIs zu vereinfachen, und den Editor leicht mittels {{wikipedia|Lua}} zu Konfigurieren und zu scripten.


{{installation|paket=neovim}}
{{installation|paket=neovim}}
Zeile 12: Zeile 13:
* Die Kommunikation innerhalb Neovims wird über MessagePack realisiert, das es ermöglicht, Erweiterung in beliebigen Programmiersprachen zu entwickeln.
* 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.
* Neovim kann sehr einfach als Editor oder als Scripthost in andere Programme eingebettet werden.
* Als Konfigurations- und Plugin-Sprache steht Lua an erster Stelle
* Als Konfigurations- und Plugin-Sprache steht Lua an erster Stelle.
* Der Parser generiert einen {{wikipedia|Syntaxbaum#Abstrakte_Syntaxb%C3%A4ume|AST}}, Syntaxhighlighting und Fehleranalyse sind daher semantisch möglich, und nicht nur basierend auf regulären Ausdrücken.
* Der Parser generiert einen {{wikipedia|Syntaxbaum#Abstrakte_Syntaxb%C3%A4ume|AST}}, Syntaxhighlighting und Fehleranalyse sind daher semantisch möglich, und nicht nur basierend auf regulären Ausdrücken.
* Eingebauter {{wikipedia|Language_Server_Protocol|LSP-Client}}
* Eingebauter {{wikipedia|Language_Server_Protocol|LSP-Client}}
Zeile 19: Zeile 20:


== Konfiguration ==
== Konfiguration ==
[[Datei:Neovim simple config.png|thumbnail|250px|Neovim in der einfachen Beispielkonfiguration zeigt in der Datei {{ic|wikibeispiel}} die relativen Zeilennummern, die hervorgehobene Cursorzeile, und den Rechtschreibfehler an.]]
Die Konfiguration erfolgt standardmäßig innerhalb des Verzeichnisses {{ic|~/.config/nvim}}. Von dort wird die Datei {{ic|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 {{ic|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.
{{hc|1=~/.config/nvim/init.lua|2=
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
}}
[[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.
{{hc|1=~/.config/nvim/init.lua|2=
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 ==
Plugins werden automatisch geladen, wenn sich die Plugin-Dateien in einem Unterverzeichnis eines im {{ic|runtimepath}} Vorhandenen Verzeichnisses befinden. Man kann sich diesen ''Table'' innerhalb Neovims anzeigen lassen.
{{hc|1=:lua print(vim.inspect(vim.opt.runtimepath:get()))|2=
{
  "/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.


=== Pluginmanager ===
=== Pluginmanager ===

Version vom 16. Januar 2025, 20:40 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.

Pluginmanager

Pluginkonfiguration

Siehe auch

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

Weblinks