Beiträge aus der Kategorie: neovim

Ein anderer Datei-Explorer muss her

Mit `:Explore` kommt man ja schon weit, aber wenn man seine Verzeichnisse und Dateien schön in einer Sidebar zur Verfügung hat, macht es einem den Umzug schon leichter. Also: ein neuer Datei-Explorer muss her. Und zwar in Form von nvim-tree.

In der Datei lua/kaffdaddy/plugins/nvim-tree.lua lege ich eine grundlegende Konfiguration ab:

return {
 "nvim-tree/nvim-tree.lua",
 dependencies = {
   “nvim-tree/nvim-web-devicons”
 },
 config = function()
   -- disable netrw at the very start of your init.lua
   vim.g.loaded_netrw = 1
   vim.g.loaded_netrwPlugin = 1
-- set termguicolors to enable highlight groups vim.opt.termguicolors = true
require("nvim-tree").setup({ sort_by = "case_sensitive", view = { width = 30, }, renderer = { group_empty = true, }, filters = { dotfiles = true, }, })
local keymap = vim.keymap keymap.set("n", "<leader>eo", "<cmd>NvimTreeOpen<CR>", { desc = "Opens up file explorer" }) keymap.set("n", "<leader>et", "<cmd>NvimTreeToggle<CR>", { desc = "Toggle file explorer" }) keymap.set("n", "<leader>ecf", "<cmd>NvimTreeFindFile<CR>", { desc = "Toggle file explorer on current file" }) end, }

Ich merke jetzt schon, dass das Projekt neovim sehr komplex wird. Da die Steuerung komplett über Keyboard-Shortcuts funktioniert und man diese selber definieren kann, werde ich im nächsten Schritt Shortcuts definieren und in der Readme dokumentieren.

Als erstes habe ich den sogenannten Leader-Key von Backslash auf ein Komma geändert, was in der Datei lua/kaffdaddy/core/keymaps.lua geschieht. Auf einem deutschen Tastatur-Layout ist der Backslash etwas umständlich zu erreichen. Ich ahne schon, dass, wenn ich irgendwie mit dem Switch auf neovim Erfolg haben werde, der Umzug auf ein QWERTY-Keyboard-Layout folgen wird.

Die geänderten Keymaps für nvim-tree sind nicht in diese globale Konfiguration gerutscht, da sie nur erfolgen sollen, wenn nvim-tree geladen wurde. Da weiß ich aber noch nicht, ob das so eine gute Idee ist. Wenn ich das für jedes Plugin so machen werde, muss ich selber den Überblick behalten, in welcher Datei Keymaps-Bindings stehen, um mir nicht selber in die Quere zu kommen und eventuell schon bestehende Konfigurationen zu überschreiben.

Der aktuelle Stand der Konfiguration mit nvim-tree als Datei-Explorer ist hier zu finden.

Colors, colors, colors

Frei nach Ice-T brauche ich auch andere Farben. Eine Übersicht über die sogenannten colorschemes kann man sich hier verschaffen.
Für die Integration erstelle ich eine Datei colorscheme.lua unterhalb von lua/kaffdaddy/plugins mit folgendem Inhalt

return {
{
"bluz71/vim-nightfly-guicolors",
priority = 1000,
config = function()
vim.cmd([[colorscheme nightfly]])
end,
}
}

Hier kommt auch zum ersten Mal eine Funktion von Lazy ins Spiel und zwar kann man die Ladereihenfolge von Plugins über den Parameter priority steuern. Plugins, die bei Bedarf nachgeladen werden sollen, bekommen den Parameter lazy verpasst.

In der Datei lua/kaffdaddy/lazy.lua ändert man dann noch die Setup-Methode von Lazy folgendermaßen um:

require("lazy").setup(
{ import = "kaffdaddy.plugins" },
{
install = {
colorscheme = { "nightfly" }
}
}
)

Und schon sieht alles gar nicht mehr ganz so schlimm aus. Aktueller Stand des Repos: https://github.com/KaffDaddy/nvim-config/tree/0.2.0

Meine Reise mit neovim

Wenn man doch mal gezwungen wird, sich auf fremden Servern herumzutreiben und dort in irgendwelchen Konfigurationsdateien herumzustöbern kommt man um den Editor vi nicht herum. Und irgendwie bin ich darauf gestoßen, dass es Entwickler gibt, die die weiterentwickelte Version vim beziehungsweise dessen Fork neovim als eine Art IDE verwenden. Und das möchte ich auch. Weil man es kann. Mehr gibt es dazu einfach nicht zu sagen.

Und ich will mal schauen, ob ich soweit komme. Denn ein vorgefertigtes Paket dafür gibt es nicht. Das gesamte Ökosystem um vim/neovim besteht aus einer unüberschaubaren Zahl an Erweiterungen und einer noch viel größeren Anzahl an Wegen, sein Ziel zu erreichen. Also so ähnlich wie mit TYPO3, wenn man "nur" eine Website umsetzen möchte.

Man mag mir verzeihen, wenn ich neovim und seine ganzen Plugins und Erweiterungen noch falsch bezeichne. Ich werde auf dem bestimmt sehr steinigen Weg eine Menge Fehler machen, aber wenn ihr das Kopfschütteln beendet habt: helft mir! Wirklich, ich will den ganzen Kram lernen und für mich hier und in einem Repository dokumentieren. Vielleicht hilft es dem ein oder anderen, seine Konfiguration für neovim zu finden.

Zur Zeit verwende ich PhpStorm zum Entwickeln von PHP, der Integration von TYPO3-Extensions und ab und zu immer noch ein wenig Frontend in Form von Vanilla-JavaScript und SCSS. Bis auf ein paar Begebenheiten benutze ich PhpStorm aber wie einen Texteditor und genau deshalb möchte ich versuchen, alles in und mit neovim zu ersetzen.

Meine Anforderungen sind folgende:

  • Komplette Unterstützung von PHP, HTML, JavaScript, SCSS, Fluid und TypoScript
  • Auto-Vervollständigung
  • Debugging mit xDebug
  • Code-Qualitätstools wie PHP-CodeSniffer, CS-Fixer, Psalm und PHPStan
  • Integration von Test-Frameworks wie PHPUnit und Codeception
  • Konfiguration mittels editorconfig usw.

Die letzten Tage habe ich damit verbracht, mich in die Materie einzulesen, was sich erst einmal als sehr schwierig erwiesen hat. Eine Anlaufstelle für verzweifelte Menschen wie mich scheint es nicht zu geben. Zwar scheint sich die Community um vim/neovim und seine Plugins sehr anständig zu verhalten und ein nettes Klima zu pflegen, aber die Einstiegshürde ist phänomenal. Ich glaube, das letzte Mal, das ich vor so einem Berg stand, war damals, als ich mit TYPO3 angefangen habe (FC BigFeet anyone?).

Fangen wir also an und als erstes steht die Auswahl eines Plugin-Managers an. Und ich habe mich für Lazy entschieden, da Plugins, wie der Name schon vermuten lässt, nachgeladen werden und nicht alle beim Systemstart zur Verfügung stehen müssen.
Was ich auch bei vielen Konfigurationen gesehen habe und was ich dreist kopieren werde, ist die Aufteilung der Konfigurationen in einzelne Dateien.

Fangen wir also im Verzeichnis

~/.config/nvim

an, denn da gehört unter macOS oder Linux die Konfiguration hinein. Darunter erstelle ich mir das Unterverzeichnis lua und darunter noch das Verzeichnis kaffdaddy. Das kann ja jeder nennen, wie er möchte. In diesem untersten Verzeichnis kommt in die Datei lazy.lua der Bootstrap-Code für Lazy herein, wie er hier zu finden ist. Dann nur noch unter

~/.config/nvim/init.lua

per

require("kaffdaddy.lazy")

diese Datei laden und nach einem beherzten Schließen und Öffnen von neovim kann per

:Lazy

die wunderschöne Oberfläche von Lazy angeschaut werden.

Ich glaube, der nächste Schritt wird sein, dem Ganzen ein paar schönere Farben zu verpassen. Meine Konfiguration kann man jedenfalls hier Schritt für Schritt nachvollziehen.
Der aktuelle Stand für diesen Blogpost ist hier und alle Blogposts zu meiner Reise werden in der Kategorie neovim erscheinen. Muss man halt rückwärts lesen.