Diese Seite beschreibt meine Erfahrungen mit dem Editor
Atom, ein alternativer Editor zu
Notepadqq und
Notepad++.
Für einen Schnelleinstieg in das Thema Atom wird im nächsten Kapitel beschrieben, welche
Einstellungen ich bei dem Editor beim ersten Setup vornehme.
Danach folgen ausführliche Beschreibungen, warum ich Alternativen zu
Notepad++ suchte und Vergleiche zu Notepad++.
Leider wurde am 15. Dezember 2022 die Weiterentwicklung an Atom eingestellt. Genauere Informationen dazu gibt es
in dem Atom Sunset Blogpost. Darin wird erklärt
warum man das Projekt aufgegeben hat und wie Atom nach der Einstellung des Projekts noch verwendet werden kann.
Auf der englischen Wikipedia-Seite über Atom
war zu entnehmen, dass der Initiator von Atom ein neues Editor-Projekt namens Zed starten
will. Dieser Editor ist aber in Rust geschrieben und baut nicht mehr auf dem Electron Framework auf. Gleichzeitig wurde aber
auch der Pulsar-Editor aus der Taufe gehoben. Dieses Projekt hat im großen
und ganzen Atom übernommen und arbeitet daran wieder regelmäßig Relases des Editors zu erstellen.
Nach der Installation von Atom nehme ich folgende Einstellungen vor:
Strg+Shft+d
auf
Strg+d
, damit die Funktionalität gleich ist, wie bei Notepad++. (Genauer beschrieben
in dieser Anleitung)
Packages -> Settings View -> Open
gibt es einen Abschnitt Editor
.
Show Invisibles
anhaken
Tab Length
auf Default 2
belassen.
Tab Type
auf Soft
(= Spaces) setzen.
Packages -> Settings View -> Open
im Reiter System
die Checkbox
Show in file context menus
anhaken. (Auf Ubuntu war ein Kontextmenü-Eintrag im Nautilus sofort
ersichtlich.)
Packages -> Settings View -> Open
Core Settings
die Einstellung Allow Pending Pane Items
aushaken.
Beim Installieren von Packages geht man wie folgt vor:
Packages -> Settings View -> Open
öffnen und dann in den Settings den Reiter Install
öffnen.
Die folgenden Packages habe ich installiert:
open-recent
, um im File Menü einen Eintrag zu haben, in dem die zuletzt geschlossenen Dateien ersichtlich sind
und wieder geöffnet werden können (mehr Infos).
highlight-selected
, damit alle Vorkommen des aktuell markierten Wortes
im Editor auch sofort hervorgehoben werden (mehr Infos):
atom-change-case-menu
, damit der markierte Text via Kontextmenü in
kleinbuchstaben, GROSSBUCHSTABEN, CamelCase oder andere Schreibweisen umgewandelt werden kann
(mehr Infos).
todo-show
, damit Keywords wie TODO
oder FIXME
im Editor hervorgehoben werden bzw. damit in Projekten danach gesucht werden kann
(mehr Infos):
Status bar indicator
anhaken, damit
in der Statusleiste das TODO-Icon auf der linken Seite aufscheint, mit der man dann die Suche starten
kann.
close-tags
, damit beim Editieren von HTML code mit dem
Shortcut Strg+Alt+.
der letzte aktuell offene HTML Tag geschlossen wird.
(mehr Infos):
advanced-open-file
, damit man mit Strg+Alt+o
ein Fenster öffnen kann, mit dem man durch Texteingabe und Tab-Completion direkt durch
Verzeichnisse navigieren kann. Außerdem kann man neue Dateien gleich anlegen, in dem man
einen noch nicht vorhandenen Filenamen eingibt und mit Enter bestätigt.
(mehr Infos)
Ich bin grundsätzlich ein Freund der Nutzung von einfachen Editoren für das Schreiben von Webpages sowie
von Java und C# Anwendungen, weil sie schnell starten, einfach zu bedienen sind, und auch mich
als Programmierer anhalten, Code simpel zu halten.
Ich bin bis jetzt mit dem Setup gefahren, dass ich auf Windows Notepad++ verwendete und auf Linux
Notepadqq.
Mit der vermehrten Nutzung von Eclipse im Beruf, wurde ich in meiner Überzeugung bestärkt, dass ich für
meine privaten Projekte weiterhin auf Editoren setzen will. Allerdings könnte man die Editoren um einige
Features erweitern, um sich das Leben einfacher zu machen.
Daher hatte ich die Idee Plugins für meine beiden Editoren zu schreiben. Ich fand für Notepad++ auch
ein C# Projekt, das dafür geeignet war, aber egal, was ich auch tat, die Kompilierung endete damit,
dass mir Notepad++ beim Start anzeigte, dass das Plugin nicht mit der Unicode Version von Notepad++ zusammenpasst.
Bei Notepadqq könnte man zwar mit Hilfe von Node.js und NPM ein Addon schreiben
(Anleitung),
aber die Unterstützung ist nur experimentell und man muss den Pfad zu Node.js und zu NPM im Menü unter
Einstellungen - Erweiterungen im Notepadqq setzen.
Außerdem müsste ich zwei Addons mit der selben Funktionalität mit unterschiedlichen Technologien
realisieren, um auf Linux und auf Windows mit den Verbesserungen arbeiten zu können.
Unter anderem war ich an folgenden Verbesserungen interessiert:
</
getippt hat.
Durch einen Tipp von einem Freund bin ich auf den Browser Atom gestoßen. In der folgenden Tabelle will ich für mich relevante Kriterien und Funktionalitäten zwischen Atom und Notepad++ vergleichen.
Kriterium / Funktion | Atom | Notepad++ |
---|---|---|
Dateigröße des Windows Installers | 148 MB | 4,4 MB |
Startgeschwindigkeit | Etwas langsamer als Notepad++ aber viel flotter als Eclipse | Wirklich schnell |
Plattformen | Linux, Windows (auch andere, für mich aber derzeit nicht relevant.) | Nur Windows |
Plugins | Javascript- und CSS-like Plugin Generierung. (Aber noch nicht probiert!) Es gibt daher wahrscheinlich auch viel mehr Plugins, die man dazu installieren kann. | C++ bzw. auch C#, Ada, Delphi, aber C# Template wegen 64 bit Fehler nie lokal zum Laufen gebracht. |
Duplizieren von Zeilen und Wörtern |
Strg+Shift+d, konnte ich aber auf Strg+d umstellen.
(Siehe Umstellen von Shortcuts) Allerdings dupliziert dies nur Zeilen und nicht die markierten Bereich. |
Strg+d |
Methoden-Suche in Java-Dateien | Strg+r öffnet eine Suche mit Overlay, allerdings lädt diese in letzter Zeit bei mir ziemlich lange und man ist dann mit der Strg+f Suche schneller. | Es gibt eine einblendbare Methoden Übersicht, in der man auch suchen kann. Die ist aber dann fix anstatt einer Suche on Demand und nimmt somit Bildschirmplatz weg. Außerdem hat sie bei mir auf einem Rechner nicht funktioniert. |
Tabulatoren durch 2 Leerzeichen ersetzen und Leerzeichen anzeigen |
Im Menü Packages - Settings View - Open gibt es einen Abschnitt Editor.
Dort kann man folgende Einstellungen vorhnehmen.:
|
Im Menü Einstellungen - Optionen unter den Einstellungen für Sprache kann man die Tabulatoren Schrittweite
und die automatische Ersetzung durch Leerzeichen setzen.
Die Anzeige der Leerzeichen und Tabulatoren kann im Menü Ansicht - Nichtdruckbare Zeichen - Leerzeichen und Tab anzeigen eingestellt werden. |
Java Code Completion | Sehr intelligent. Viel besser als in Notepad++, aber leider keine Methoden-Beschreibungen wie in Eclipse, wobei aber Eclipse hier auch manchmal sehr bockig sein kann. | Nur vorhandene Wörter in File werden vorgeschlagen. |
Suchen und Ersetzen |
Mit Strg+f kommt nur die Suche únd das Ersetzen in aktueller Datei. Mit Strg+Shift+f wird die Suche im Projekt angezeigt. Dabei kann man auch File patterns einstellen, die man aber leider immer wieder neu eingeben muss. |
Funktion für mich übersichtlicher, mächtiger und einfacher handhabbar, weil alle Funktionen in einem Dialog.
Strg+f liefert Suchen + Ersetzen in Datei und in Verzeichnissen usw.
Außerdem behält Notepad++ die Einstellungen über einen Restart und hat ein Dropdown, wo man die
zuletzt verwendeten Settings wieder auswählen kann. Alleine diese Funktion ist Grund genug Notepad++ nach wie vor zu installieren. |
Zuletzt geöffnete Dateien |
Nur die zuletzt geschlossene Datei kann im Menü File wieder geöffnet werden.
Der Shortcut Strg+Shift+t kann dafür verwendet werden.
(Lösung siehe Hilfreiche Add-Ons) |
Im Datei-Menü gibt es eine Liste der letzten 10 zuletzt geschlossenen Dateien. |
Automatisches Highlighting von gleichen Wörtern |
Markiert man ein Wort, passiert nichts. Erst mit Strg+f werden alle anderen Vorkommen auch markiert.
(Lösung siehe Hilfreiche Add-Ons) |
Markiert man ein Wort, so werden gleich alle anderen Vorkommen dieses Wortes in der Datei hervorgehoben. |
Integration in die Plattformen |
Auf Linux in Nautilus kann man Textdateien über das Kontextmenü mit Atom öffnen. Damit das auch im Kontextmenü vom Windows File Explorer einen Eintrag für Atom gibt, muss man im Atom unter Packages -> Settings View -> Open im Reiter System
Die Checkbox "Show in file context menus" auswählen.
|
Im Windows Explorer findet man im Kontextmenü einer Datei den Eintrag Öffnen in Notepad++. Auf Linux kann man Notepad++ mit Wine installieren, aber diese Integration ist dabei nicht gegeben. (Außerdem ergeben sich dadurch einige Nachteile, die ich hier zusammengefasst habe.) |
In Großbuchstaben oder Kleinbuchstaben konvertieren | Dafür kann man das Add-On atom-change-case-menu installieren. | Markiert man ein Wort oder eine Text-Passage, so kann man mit dem Kontextmenü diese Passage gleich in Groß- oder in Kleinbuchstaben konvertieren. |
Notepad++ ist lightweight und sollte man sowieso auf Windows installieren, weil man viele einfache Tasks
(Suchen, Ersetzen, CSV Text-Dateien anschauen, kleine Skripte editieren) damit am schnellsten erledigen kann.
Für das Schreiben von Code in Java und das Schreiben von Webseiten bin ich aber derzeit auf Atom umgestiegen.
Natürlich gibt es für mich auch für Atom einige Verbesserungsvorschläge, die man eventuell durch ein bereits existierendes Plugin oder durch ein selbst geschriebenes Plugin umsetzen könnte:
Zum Verdoppeln von markierten Text bzw. von Zeilen verwendete ich in Notepad++ immer den Shortcut
Strg+d
. In Atom ist dafür aber der Shortcut Strg+Shift+D
vorgesehen, was ich aber
als mühseliger empfinde, weil ich dafür immer die zweite Hand von der Maus wegnehmen muss.
Daher ist hier die Anleitung, wie ich den Shortcut umgestellt habe:
Packages -> Settings View -> Show Keybindings
auswählen. (Alternativ geht auch das Menü Packages -> Settings View -> Open
, dann muss man aber
in den Settings den Reiter Keybindings
auswählen.)
File -> Keymap
Edit -> Keymap
'atom-workspace atom-text-editor:not([mini])':
'ctrl-shift-D': 'editor:duplicate-lines'
'atom-workspace atom-text-editor:not([mini])':
'ctrl-d': 'editor:duplicate-lines'
Der Aufbau der Syntax eines solchen Shortcut-Eintrags ist wie folgt:
'<Bereich>': '<Shortcut>': '<Befehl>'
Bei meinen Java-Projekten habe ich öfters mehrere Dateien nacheinander geöffnet, um den Code zu studieren. Dabei ist mir aufgefallen, dass der aktuelle Tab mit der neu geöffneten Datei belegt wurde und somit die zuvor geöffnete Datei geschlossen wurde, weil ich sie nicht editiert habe. Das war für mich kein Feature, daher habe ich dieses Verhalten ausgeschalten:
Packages -> Settings View -> Open
Core Settings
die Einstellung Allow Pending Pane Items
ausgehakt.
Diese Lösung habe ich hier gefunden!
Die Funktionalität des Editors kann leicht mit Add-ons oder sogenannten Packages erweitert oder verändert werden. Dafür sind folgende Schritte notwendig:
Packages -> Settings View -> Open
und dann in den Settings den Reiter Install
auswählen.
Die folgenden Packages fand ich bis jetzt sehr hilfreich:
Dieses Package fügt im File Menü von Atom einen Eintrag hinzu, in dem die zuletzt geschlossenen Dateien
ersichtlich sind. In den Einstellungen kann man festlagen wie lange diese Liste werden kann.
Damit wird auch ein Vorteil, den Notepad++ gegenüber Atom hat, eingestellt.
Wenn man ein Wort im Editor mit Doppelklick markiert, so werden sofort alle anderen Vorkommen des
Worts auch mit einem Highlight-Rahmen versehen. Ich habe in den Optionen noch das "Light Theme" angehakt, weil
es für mich optisch ansprechender war.
Damit wird auch ein Vorteil, den Notepad++ gegenüber Atom hat, eingestellt.
Nachdem im Editor ein HTML Tag geöffnet wurde, wird überprüft, ob es dazu schon einen schließenden Tag gibt.
Wenn nicht, dann wird er gleich angelegt.
Problem:
Allerdings habe ich ein Problem mit diesem Addon: Wenn ich ein <br/>
eingebe, dann wird es automatisiert
mit </ br/>
geschlossen.
Lösung:
Dies kann man lösen, indem man das Package editiert. Die Anleitung dazu:
autoclose-html.coffee
öffnen. Sowohl auf Windows als auch auf Linux
findet man diese Datei im Benutzerverzeichnis unter dem Pfad
.atom/packages/autoclose-html/lib
return if partial.substr(partial.length - 1, 1) is '/'
return if partial.substr(partial.length - 2, 1) is '/'
.
Letztlich verwende ich dieses Package aber trotzdem nicht mehr:
Ich habe dieses Package aber wieder deaktiviert, weil es den End-Tag gleich anlegt und danach muss man
erst wieder mit der Maus oder den Pfeiltasten nach den schließenden Tag navigieren. Ich habe letztlich
dieses Package gegen close-tags ersetzt.
Mit dem Shortcut Strg+Alt+.
wird der letzte noch offene HTML Tag geschlossen und der
Cursor wird danach platziert. Damit vermeidet man lästiges Navigieren im Gegensatz zu
autoclose-html, wo nach dem Cursor automatisch der schließende
Tag eingefügt wird.
Verbesserungen
</
automatisch der letzte offene Tag geschlossen werden könnte.
Diese Verbesserungen habe ich wie folgt erreichen können:
close-tags.cson
muss geändert werden, damit die Funktionalität nur für xml und html Dateien aufgerufen wirde,
sofern ein /
eingegeben wurde.
(Sowohl auf Windows als auch auf Linux
findet man diese Datei im Benutzerverzeichnis unter dem Pfad
.atom/packages/close-tags/keymaps
.)
'.platform-darwin atom-workspace atom-text-editor': 'alt-cmd-.': 'close-tags:close' '.platform-win32 atom-workspace atom-text-editor': 'alt-ctrl-.': 'close-tags:close' '.platform-linux atom-workspace atom-text-editor': 'alt-ctrl-.': 'close-tags:close'sind durch folgende Keymaps zu ersetzen:
'atom-text-editor[data-grammar~="html"]': '/': 'close-tags:close' 'atom-text-editor[data-grammar~="xml"]': '/': 'close-tags:close'
close-tags.coffee
müssen 2 Methoden geändert werden.
(Sowohl auf Windows als auch auf Linux
findet man diese Datei im Benutzerverzeichnis unter dem Pfad
.atom/packages/close-tags/lib
.)
closeCurrentTag
ändern von
closeCurrentTag: (editor, selection) -> buffer = editor.getBuffer() posi tion = selection.cursor.getBufferPosition().toArray() text = buffer.getTextInRange([[0, 0], position]) stack = @findTagsIn text if stack.length @insertClosingTag selection, stack.pop() else console.warn "Couldn't find closing tag." atom.beep()auf
closeCurrentTag: (editor, selection) -> buffer = editor.getBuffer() position = selection.cursor.getBufferPosition().toArray() text = buffer.getTextInRange([[0, 0], position]) if text.substr(text.length - 1, 1) is '<' stack = @findTagsIn text if stack.length @insertClosingTag selection, stack.pop(), editor else console.warn "Couldn't find closing tag." atom.beep() selection.insertText "/" else selection.insertText "/"
insertClosingTag
ändern von
insertClosingTag: (selection, tag) -> selection.insertText "#{tag}>"auf
insertClosingTag: (selection, tag, editor) -> selection.insertText "/#{tag}>" editor.autoIndentBufferRow editor.selections[0].getBufferRange().end.row
Hebt Schlagwörter wie TODO
oder FIXME
farblich hervor.
Wenn man in den Settings zu diesem Package die Checkbox Status bar indicator
anhakt,
wird in der Statusleiste zusätzlich ein Icon in Form eines Zettels mit Haken angezeigt,
das man anklicken kann, um nach allen TODO
s zu suchen. Es erscheint dann ein Fenster,
wo alle TODO
s gelistet werden.
Wichtig: Damit in der Suche das TODO
gefunden wird,
muss ein Doppelpunkt und ein Leerzeichen danach folgen! (Das Highlighting funktioniert auch ohne
Doppelpunkt und Leerzeichen.)
Fügt zum Kontext-Menü den Menüeintrag "Change Case Menu" dazu.
Wenn man Text markiert hat, dann kann man den Text in GROSSBUCHSTABEN
oder kleinbuchstaben konvertieren.
Aber es stehen auch andere Versionen wie CamelCase oder snake_case zur Verfügung.
In den Settings des Addons kann festgelegt werden, welche Cases gelistet
werden sollen.
Damit wird auch ein Vorteil, den Notepad++ gegenüber Atom hat, eingestellt.
Damit kann man mit dem Shortcut Strg+Alt+o
ein Fenster öffnen, mit dem man durch Texteingabe und Tab-Completion direkt durch
Verzeichnisse navigieren kann. Außerdem kann man neue Dateien gleich anlegen, in dem man
einen noch nicht vorhandenen Filenamen eingibt und mit Enter bestätigt.
(Das ist besonders bei Java-Projekten für mich sehr hilfreich!)
In den Einstellungen könnte man auch aktivieren, dass man neue Verzeichnisse auf diesen
Weg anlegen kann. Auch ein Fuzzy-Filename-Matching kann aktiviert werden.
Damit kommt man meiner Anforderung für Java Projekte näher, dass man schnell bestimmte
Java-Files findet. Aber die Wunschvorstellung wäre, dass man einen Typ-Namen eingibt und
es wird das gesamte Source-Verzeichnis durchsucht und man findet dann die entsprechende
Datei.
User-Interface für sprachrelevante IDE Erweiterungen. Wenn dieses Package installiert ist,
kann für java ide-java für TypeScript & JavaScript ide-typescript
und für
c# ide-csharp
installiert werden.
Leider wurde hier im Dezember 2018 bekannt gegeben,
dass keine weiteren Entwicklungen an diesem Package vorgenommen werden.
Dieses Package bringt folgende Vorteile für die Java-Programmierung mit sich:
Damit dieses Package funktioniert, muss zunächst das Package atom-ide-ui
installiert werden.
In den Settings zum Package muss der Pfad zu einem Java Home der Version 8 oder höher angegeben werden.
Auf meinem Windows-Setup war folgende Eingabe erfolgreich:
C:\Program Files\Java\jdk1.8.0_152
Bei der Installation des Packages sollte man durchgehend online sein, weil auch nach der
eigentlichen Package-Installation Daten heruntergeladen und konfiguriert werden. (Dies wird durch ein
eigenes Icon in der Statusleiste angezeigt.)
Sollte dann bei einer Java-Datei noch immer nicht die Funktionalität des Packages aktiviert werden,
so empfiehlt es sich zunächst mit dem Shortcut Strg+Shift+i
die Developer-Tools zu öffnent.
Dort kann man im Reiter Console
Fehler zu einem Package einsehen.
Bei meinen Projekten wird derzeit immer die Fehlermeldung
Classpath is incomplete. Only syntax errors will be reported
angezeigt.
Der Link weist darauf hin, dass eine gültige pom.xml
im Root-Verzeichnis des
Projekts liegen muss. Dies habe ich aber noch nicht ausprobiert. Vielleicht werden dadurch
weitere Features möglich, wie beispielsweise das Springen zu Methoden von anderen Klassen.
Auf meinem Ubuntu-Rechner öffnete Atom nicht mehr die zuletzt geöffneten Dateien sondern eine neue Datei namens
ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT=false
.
Die Lösung zu diesem Problem habe ich in
Stackoverflow-Artikel
gefunden. Man muss im Terminal folgendes Skript ausführen:
sudo sed -i 's/Exec=env BAMF_DESKTOP_FILE_HINT=\/var\/lib\/snapd\/desktop\/applications\/atom_atom.desktop \/snap\/bin\/atom ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT=false \/usr\/bin\/atom %F/Exec=env BAMF_DESKTOP_FILE_HINT=\/var\/lib\/snapd\/desktop\/applications\/atom_atom.desktop ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT=false \/snap\/bin\/atom %F/' /var/lib/snapd/desktop/applications/atom_atom.desktop
Der Grund dafür ist, dass in der Datei /var/lib/snapd/desktop/applications/atom_atom.desktop
die Umgebungsvariable ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT=false
nach der ausführbaren Datei angeführt wird.
Somit verwendet Atom die Umgebungsvariable als Datei, die geöffnet werden soll.