Der Helix Editor¶
(Update am 2024-10-24)
Vor kurzem habe ich den „Helix“ Editor https://helix-editor.com [1] entdeckt. Es
ist ein Vim-ähnlicher, nicht-grafischer Editor der in Rust geschrieben ist. Man
lädt einfach die ausführbare Datei herunter und schon ist der Editor startklar.
Das Programm heisst hx
, in den Tutor geht es mit hx --tutor
. Alles was den
Anfänger bei Vim erst mal vor grössere Rätsel stellt wie die .vimrc
und
die vielen Erweiterungsmöglichkeiten sind bei Helix nicht notwendig. Es gibt
durchaus Anpassungsmöglichkeiten bei Helix, aber diese können übersichtlich und
verständlich in den beiden TOML Dateien config.toml
und languages.toml
im Verzeichnis ~/.config/helix
erledigen werden (siehe [2]). Dieses
Verzeichnis muss von Hand angelegt werden (mkdir ~/.config/helix
).
Meine Konfiguration unter ~/.config/helix
habe ich im folgenden Repo
abgelegt (gerne Änderungen daran machen):
https://gitlab.informatik.hs-augsburg.de/config/helix
Das aktuelle Helix Binary ist unter https://github.com/helix-editor/helix/releases.
zu finden. Aktuell ist das helix-24.07-x86_64-linux.tar.xz
. Nach dem Entpacken schiebt man
hx
z.B. in ~/.local/bin/
und das Runtime Verzeichnis runtime/
in ~/.config/helix/
.
Auf der Release-Seite gibt es ausserdem Helix als AppImage, aktuell
helix-24.07-x86_64.AppImage
. In dieser Datei ist auch die Runtime
enthalten. Man muss die Datei nur mit chmod 755 helix-24.07-x86_64.AppImage
ausführbar machen, nach Geschmack einen symbolischen Link hx
drauf setzen,
schon kann z.B. der Tutor mit hx --tutor
aufgerufen werden.
Im WSL2 Linux (Linux Subsystem von Windows) war noch folgende Umgebungsvariable nötig:
export COLORTERM=truecolor
. Diese am besten dauerhaft in ~/.bashrc
setzen.
Ein sehr starkes Argument für die Verwendung von Helix als Programmiereditor ist seine eingebaute Unterstützung für das „Language Server Protocol“ (LSP) [3]. Mit dem Kommando
$ hx --health
wird eine lange Liste aller unterstützten Sprachen ausgegeben, so dass gleich sichtbar ist wie der jeweilige Language Server heisst, ob er installiert ist und welche Features unterstützt werden.
Im folgenden gebe ich kurz an, was ich zum Editieren von Code in Rust, C und Python tun musste.
Hinweis zu Tastenkürzeln
Ein praktisches Tastenkürzel ist in Helix bei allen Sprachen gd
(goto
definition). Zurück geht es wieder mit Strg-o
.
„goto“ Kürzel: https://docs.helix-editor.com/keymap.html#goto-mode
Alle Tastenkürzel: https://docs.helix-editor.com/keymap.html
Rust
Der Language Server für Rust heisst rust-analyzer
. Am besten holt man
sich die aktuelle vorkompilierte Version von Github Releases und führt sie
aus ~/.local/bin/
aus. Falls das Programm auch in ~/.cargo/bin
ist, dann sollte man es dort entfernen oder dafür sorgen, dass die aktuelle
Version früher im Suchpfad (PATH) steht . Aufgerufen auf der Kommandozeile
gibt er mit mit --version
z.B. die Version aus
$ rust-analyzer --version
rust-analyzer 0.3.2020-standalone
Das ist schon alles was zu tun ist. Damit der Language Server „anspringt“, muss
man den Quelltext in einem Rust Crate editieren, es muss also ein Verzeichnis
mit Cargo.toml
und src/
vorhanden sein.
Sourcecode: https://github.com/rust-lang/rust-analyzer
Releases: https://github.com/rust-lang/rust-analyzer/releases
C/C++
Es gibt mehrere C/C++ Language Server, z.B. clangd
und ccls
. Aktuell verwende
ich meist den clangd
. Es gibt ein Linux Paket, das einfach
mit sudo apt install clangd
installiert wird. Der Sprachserver funktioniert für
„normale“ Programme die nativ auf dem PC laufen als auch für crosskompilierte
Embedded Programme, die z.B. die arm-none-eabi-gcc
Toolchain verwenden.
Folgende Konfiguration ist nötig:
In
languages.toml
:[[language]] name = "c" auto-format = false language-servers = [ "clangd" ] [language-server.clangd] command = "clangd" config = { clangd.fallbackFlags = [ "-std=gnu11" ] } args = []
In dem C/C++ Projekt muss es eine „Compilation Database“ geben, in der Informationen zum Kompilieren des Projekts abgelegt werden. Zum Anlegen der Compilation Database gibt es Hilfsprogramme, z.B.
compiledb
oderbear
. Ich habe mich zunächst mal fürcompiledb
entschieden. Da es ein Python Programm ist erfolgt die Installation mitpip install compiledb
. Falls das C/C++ Projekt mit einem Makefile zum Bauen ausgestattet ist, dann ist die Anwendung sehr einfach. Der Aufruf$ compiledb make
legt die „Datenbank“ in Form der Dateicompile_commands.json
an. Dazu wird das Projekt einmal unter der Herrschaft voncompiledb
kompiliert und der Output festgehalten.Bear liefert im wesentlichen die gleichen Ergebnisse, es wird mit
sudo apt install bear
installiert. Der Aufruf ist dannbear -- make
.Sollte ein Projekt mit CMake https://cmake.org organisiert sein, dann ist es sogar noch einfacher, da cmake bereits von sich aus eine Compilation Database erstellen kann.
Nun öffnet man Helix in dem Verzeichnis in dem auch
compile_commands.json
liegt und kann danach komfortabel Quelltextdateien editieren und darin navigieren.
clangd: https://clangd.llvm.org
compiledb: https://pypi.org/project/compiledb
Compilation Database: https://clang.llvm.org/docs/JSONCompilationDatabase.html
Python
Der Sprachserver für Python heisst pylsp
, er wird mit
pip install -U python-lsp-server
installiert. Mein Eintrag in languages.toml
lautet:
[[language]]
name = "python"
diagnostic-severity = "Warning"
auto-format = true
language-servers = [ "pylsp" ]
[language-server.pylsp]
command = "pylsp"
args = []
—
Alle Spracheinstellungen sind unter https://docs.helix-editor.com/languages.html zusammengefasst.
Links¶
[2] https://docs.helix-editor.com/configuration.html
[3] https://microsoft.github.io/language-server-protocol
—
Comments
comments powered by Disqus