- Lua 100%
| lua | ||
| spell | ||
| .gitignore | ||
| init.lua | ||
| lazy-lock.json | ||
| lazyvim.json | ||
| LICENSE | ||
| README.md | ||
NeoVim Installationsanleitung
Setup-Anleitung für Windows und Linux basierend auf der Konfiguration aus: https://git.dim-m.de/Kenthanar/nvim.git
Inhaltsverzeichnis
- Überblick über die Konfiguration
- Voraussetzungen
- Windows – Installation
- Linux – Installation
- Konfiguration klonen
- Plattformspezifische Anpassungen
- Erster Start & Verifikation
- Tastaturbefehle Übersicht
Überblick
Die Konfiguration basiert auf LazyVim und enthält folgende Plugins und Features:
| Bereich | Plugin / Feature |
|---|---|
| Plugin Manager | lazy.nvim (über LazyVim) |
| Colorscheme | kanagawa-paper |
| Startbildschirm | snacks.nvim Dashboard + alpha-nvim |
| Dateibaum | neo-tree.nvim |
| LSP C# / Razor | seblyng/roslyn.nvim + html-lsp |
| LSP allgemein | nvim-lspconfig + Mason |
| Syntax | nvim-treesitter + Textobjects + Context |
| Git | gitsigns.nvim + kdheepak/lazygit.nvim |
| Autopaare | nvim-autopairs |
| Statusleiste | lualine.nvim |
| Linting | nvim-lint (selene, shellcheck, hadolint, yamllint, …) |
| Notizen | obsidian.nvim (Vaults auf F:/Obsidian/) |
| Markdown | render-markdown.nvim |
| Keybinding-Hilfe | which-key.nvim |
| Rechtschreibung | Eingebaut (de + en_us, Dateien im Repo enthalten) |
Voraussetzungen
| Tool | Zweck | Mindestversion |
|---|---|---|
| NeoVim | Editor | >= 0.10 |
| Git | Repo klonen, Plugin-Manager | beliebig |
| Node.js LTS | LSP-Server (HTML, CSS, YAML, …) | >= 18 |
| .NET SDK | Roslyn C# LSP | >= 8.0 |
| GCC / Make | Treesitter-Parser kompilieren | beliebig |
| LazyGit | Git-TUI | beliebig |
| ripgrep | Telescope Volltext-Suche | beliebig |
| fd | Telescope Datei-Suche | beliebig |
| Nerd Font | Icons in UI-Elementen | beliebig |
Windows
1. Nerd Font installieren
Eine Nerd Font ist zwingend erforderlich, damit Icons in neo-tree, lualine und dem Dashboard korrekt angezeigt werden.
- nerdfonts.com/font-downloads aufrufen
- Eine Font herunterladen, z.B. JetBrainsMono Nerd Font
- ZIP entpacken, alle
.ttf-Dateien markieren, Rechtsklick, Für alle Benutzer installieren - Im verwendeten Terminal (z.B. Windows Terminal) die neue Font unter Einstellungen → Profil → Darstellung → Schriftart einstellen
2. Abhängigkeiten via winget installieren
PowerShell als Administrator öffnen:
# NeoVim
winget install Neovim.Neovim
# Git
winget install Git.Git
# Node.js LTS
winget install OpenJS.NodeJS.LTS
# ripgrep (Telescope Grep)
winget install BurntSushi.ripgrep.MSVC
# fd (Telescope Dateisuche)
winget install sharkdp.fd
# LazyGit
winget install JesseDuffield.lazygit
PowerShell danach neu starten, damit alle PATH-Einträge geladen sind.
3. .NET SDK installieren
winget install Microsoft.DotNet.SDK.8
4. MSYS2 + GCC (für Treesitter-Parser)
Treesitter-Parser müssen auf Windows nativ kompiliert werden und benötigen einen C-Compiler.
winget install MSYS2.MSYS2
Nach der Installation MSYS2 UCRT64 öffnen (nicht die normale MSYS2-Shell) und ausführen:
pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-make
GCC zum Windows-PATH hinzufügen (PowerShell als Admin):
[System.Environment]::SetEnvironmentVariable(
"PATH",
[System.Environment]::GetEnvironmentVariable("PATH", "Machine") + ";C:\msys64\ucrt64\bin",
"Machine"
)
PowerShell erneut neu starten und prüfen:
gcc --version
5. tree-sitter-cli installieren
npm install -g tree-sitter-cli
Linux
1. Nerd Font installieren (Linux)
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip
unzip JetBrainsMono.zip -d JetBrainsMono
fc-cache -fv
Danach im Terminal die neue Font auswählen.
2. Abhängigkeiten installieren
Ubuntu / Debian:
sudo apt update && sudo apt install -y \
git gcc make curl unzip \
nodejs npm \
ripgrep fd-find
# fd hat auf Ubuntu einen anderen Binary-Namen
mkdir -p ~/.local/bin
ln -sf $(which fdfind) ~/.local/bin/fd
Arch Linux:
sudo pacman -S neovim git gcc make nodejs npm ripgrep fd lazygit
Fedora:
sudo dnf install -y neovim git gcc make nodejs npm ripgrep fd-find
3. NeoVim (aktuelle Version)
Paketquellen enthalten oft veraltete NeoVim-Versionen. Empfohlen wird das offizielle Release:
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.appimage
chmod +x nvim-linux-x86_64.appimage
sudo mv nvim-linux-x86_64.appimage /usr/local/bin/nvim
NeoVim-Version prüfen (muss >= 0.10 sein):
nvim --version
4. LazyGit installieren
LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" \
| grep '"tag_name":' | sed -E 's/.*"v*([^"]+)".*/\1/')
curl -Lo lazygit.tar.gz \
"https://github.com/jesseduffield/lazygit/releases/download/v${LAZYGIT_VERSION}/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
tar xf lazygit.tar.gz lazygit
sudo install lazygit /usr/local/bin
rm lazygit lazygit.tar.gz
5. .NET SDK installieren
# Ubuntu 22.04
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update && sudo apt install -y dotnet-sdk-8.0
rm packages-microsoft-prod.deb
Für andere Distributionen: https://learn.microsoft.com/de-de/dotnet/core/install/linux
Konfiguration klonen
Windows (Konfig)
# Eventuell vorhandene Konfiguration sichern
$nvimConfig = "$env:LOCALAPPDATA\nvim"
$nvimData = "$env:LOCALAPPDATA\nvim-data"
if (Test-Path $nvimConfig) { Rename-Item $nvimConfig "$nvimConfig.bak" }
if (Test-Path $nvimData) { Rename-Item $nvimData "$nvimData.bak" }
# Repo klonen
git clone https://git.dim-m.de/Kenthanar/nvim.git "$env:LOCALAPPDATA\nvim"
Linux (Konfig)
# Eventuell vorhandene Konfiguration sichern
[ -d ~/.config/nvim ] && mv ~/.config/nvim ~/.config/nvim.bak
[ -d ~/.local/share/nvim ] && mv ~/.local/share/nvim ~/.local/share/nvim.bak
[ -d ~/.local/state/nvim ] && mv ~/.local/state/nvim ~/.local/state/nvim.bak
# Repo klonen
git clone https://git.dim-m.de/Kenthanar/nvim.git ~/.config/nvim
Plattformspezifische Anpassungen
Nach dem Klonen müssen auf Linux einige Einstellungen angepasst werden, da die Konfiguration primär für Windows entwickelt wurde.
Clipboard (Linux)
In lua/config/options.lua ist gesetzt:
opt.clipboard:append("unnamedplus")
unnamedplus funktioniert auf Linux nur, wenn ein Clipboard-Tool installiert ist:
# X11
sudo apt install xclip
# oder
sudo apt install xsel
# Wayland
sudo apt install wl-clipboard
Obsidian Vault-Pfade (Linux)
In lua/plugins/obsidian.lua sind Windows-Pfade hinterlegt:
path = "F:/Obsidian/Personal notes",
path = "F:/Obsidian/Arbeit",
Diese müssen auf die tatsächlichen Linux-Pfade geändert werden:
path = "~/Obsidian/Personal notes",
path = "~/Obsidian/Arbeit",
Obsidian URL-Öffner (Linux)
In lua/plugins/obsidian.lua ist der Windows-Opener konfiguriert:
open = {
func = function(uri)
vim.ui.open(uri, { cmd = { "cmd", "/c", "start", "", uri } })
end,
},
Für Linux ersetzen durch:
open = {
func = function(uri)
vim.ui.open(uri) -- verwendet xdg-open automatisch
end,
},
Undo-Verzeichnis
Die Konfiguration erstellt ~/.vim/undodir automatisch beim ersten Start – kein manueller Eingriff nötig.
Erster Start & Verifikation
1. NeoVim starten
nvim
Beim ersten Start lädt lazy.nvim automatisch alle Plugins herunter. Das dauert beim ersten Mal 2–5 Minuten. Der Fortschritt wird in einem Fenster angezeigt.
2. Plugin-Sync abschließen
:Lazy sync
3. Mason-Pakete
Die Konfiguration installiert folgende Pakete automatisch beim Start (definiert in mason.lua):
roslyn– C# LSP (über crashdummyy/mason-registry)html-lsp– Für Razor Co-Hostingcss-lsp– CSS Sprachservertailwindcss-language-server– Tailwind CSS
Zur Überprüfung und manuellen Installation:
:Mason
4. Treesitter-Parser
Die konfigurierten Parser werden automatisch installiert (auto_install = true). Zur manuellen Installation aller Parser:
:TSInstall all
Auf Windows sicherstellen dass gcc im PATH erreichbar ist (MSYS2-Schritt weiter oben).
5. Gesundheitscheck
:checkhealth
| Bereich | Befehl |
|---|---|
| Allgemein | :checkhealth |
| Treesitter | :checkhealth nvim-treesitter |
| LSP (in .cs-Datei) | :LspInfo |
| Mason | :Mason |
| Plugins | :Lazy |
6. Verzeichnisstruktur
~/.config/nvim/ (Windows: %LOCALAPPDATA%\nvim\)
├── init.lua
├── lazy-lock.json <- Plugin-Versionen (nicht bearbeiten)
├── lazyvim.json <- LazyVim-Extras Tracking
├── lua/
│ ├── config/
│ │ ├── autocmds.lua <- Format-on-save, Yank-Highlight, Razor
│ │ ├── keymaps.lua <- Alle Keybindings
│ │ ├── lazy.lua <- Plugin-Manager Setup + LazyVim Extras
│ │ └── options.lua <- Editor-Einstellungen
│ └── plugins/
│ ├── alpha.lua <- Startbildschirm (alpha-nvim)
│ ├── autopares.lua <- Auto-Klammern
│ ├── colorscheme.lua <- kanagawa-paper
│ ├── dashboard.lua <- Snacks Dashboard mit DIM-M ASCII-Art
│ ├── gitsigns.lua <- Git-Zeichen im Gutter + Keymaps
│ ├── lazygit.lua <- LazyGit Integration (<leader>lg)
│ ├── lsp.lua <- lua_ls Konfiguration
│ ├── lualine.lua <- Statusleiste
│ ├── mason-lspconfig.lua <- Mason <-> lspconfig Bridge
│ ├── mason.lua <- LSP/Tool Installer inkl. crashdummyy Registry
│ ├── neo-tree.lua <- Dateibaum (- = navigate_up, . = root setzen)
│ ├── nvim-lint.lua <- Linter für alle Dateitypen
│ ├── obsidian.lua <- Obsidian Vault Integration
│ ├── render-markdown.lua <- Markdown Rendering mit Icons
│ ├── roslyn.lua <- C#/Razor LSP mit Inlay Hints
│ ├── treesitter-context.lua <- Kontext-Anzeige am oberen Rand
│ ├── treesitter.lua <- Parser + Textobjects + Context
│ └── witch-key.lua <- Keybinding-Hilfe
└── spell/
├── de.utf-8.add <- Eigene deutsche Wörter (im Repo)
├── de.utf-8.add.spl
├── de.utf-8.spl <- Deutsches Wörterbuch (im Repo)
├── de.utf-8.sug
├── en.utf-8.spl <- Englisches Wörterbuch (im Repo)
└── en.utf-8.sug
Die Wörterbuchdateien sind bereits im Repo enthalten – kein separater Download nötig.
Tastaturbefehle Übersicht
Allgemein
| Kürzel | Aktion |
|---|---|
<Space> |
Leader-Taste |
<leader>c |
Suche ausblenden |
<leader>a |
Startbildschirm öffnen |
<leader>td |
Diagnose ein-/ausschalten |
<leader>pa |
Vollständigen Dateipfad kopieren |
<leader>z |
Rechtschreib-Vorschläge |
Navigation & Fenster
| Kürzel | Aktion |
|---|---|
<C-h/j/k/l> |
Zwischen Fenstern wechseln |
<leader>sv |
Vertikal splitten |
<leader>sh |
Horizontal splitten |
<C-Pfeil> |
Fenstergröße anpassen |
<C-d> / <C-u> |
Halbe Seite runter/hoch (zentriert) |
n / N |
Suchergebnis vor/zurück (zentriert) |
Buffer
| Kürzel | Aktion |
|---|---|
<leader>bn |
Nächster Buffer |
<leader>bp |
Vorheriger Buffer |
Bearbeiten
| Kürzel | Aktion |
|---|---|
<Alt-j/k> |
Zeile/Auswahl nach unten/oben |
<leader>p (Visual) |
Einfügen ohne Yank-Register zu überschreiben |
<leader>x |
Löschen ohne Yank-Register zu überschreiben |
J |
Zeilen verbinden (Cursor bleibt) |
> / < (Visual) |
Einrücken und Auswahl beibehalten |
Git (gitsigns + lazygit)
| Kürzel | Aktion |
|---|---|
]h / [h |
Nächster/Vorheriger Hunk |
<leader>gs |
Hunk stagen |
<leader>gr |
Hunk zurücksetzen |
<leader>gS |
Ganzen Buffer stagen |
<leader>gp |
Hunk-Vorschau |
<leader>gb |
Blame anzeigen |
<leader>gd |
Diff anzeigen |
<leader>gtb |
Line Blame ein-/ausschalten |
<leader>gtd |
Gelöschte Zeilen anzeigen |
<leader>lg |
LazyGit öffnen |
LSP (C# / Roslyn)
| Kürzel | Aktion |
|---|---|
gd |
Zur Definition |
gD |
Zur Deklaration |
gi |
Zur Implementierung |
gr |
Referenzen anzeigen |
gt |
Zur Typdefinition |
K |
Hover-Dokumentation |
gK |
Signatur-Hilfe |
<leader>ca |
Code Actions |
<leader>cr |
Umbenennen |
<leader>cf |
Buffer formatieren |
<leader>cd |
Diagnose anzeigen |
]d / [d |
Nächste/Vorherige Diagnose |
<leader>cq |
Diagnosen in Quickfix-Liste |
<leader>ws |
Workspace-Symbol suchen |
Treesitter Textobjects
| Kürzel | Aktion |
|---|---|
af / if |
Äußere/Innere Funktion |
ac / ic |
Äußere/Innere Klasse |
al / il |
Äußere/Innere Schleife |
ai / ii |
Äußeres/Inneres If/Else |
]f / [f |
Zur nächsten/vorherigen Funktion |
]c / [c |
Zur nächsten/vorherigen Klasse |
[x |
Zum äußeren Treesitter-Kontext springen |
<leader>ut |
Treesitter-Kontext ein-/ausschalten |
Linting
| Kürzel | Aktion |
|---|---|
<leader>cl |
Aktuellen Buffer linten |
<leader>cL |
Aktive Linter für Dateityp anzeigen |
Obsidian
| Kürzel | Aktion |
|---|---|
<leader>on |
Neue Notiz |
<leader>oo |
In Obsidian öffnen |
<leader>of |
Notiz schnell finden |
<leader>os |
Notizen durchsuchen |
<leader>ol |
Links anzeigen |
<leader>ob |
Backlinks anzeigen |
<leader>ot |
Tags anzeigen |
<leader>od |
Daily Notes |
<leader>oT |
Template einfügen |