Thema dieser Seite

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.

Mein initiales Setup von Atom

Einstellungen

Nach der Installation von Atom nehme ich folgende Einstellungen vor:

Packages

Beim Installieren von Packages geht man wie folgt vor:

Die folgenden Packages habe ich installiert:

Warum suchte ich einen weiteren Editor?

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.

Welche zusätzlichen Features suchte ich für meinen Editor?

Unter anderem war ich an folgenden Verbesserungen interessiert:

Vergleich Atom zu Notepad++

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.:
  • Show Invisibles anhaken
  • Tab Length -> Default 2
  • Tab Type: Auto + Soft Tabs anhaken
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.


Fazit

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.

Verbesserungen

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:

Umstellen von Shortcuts

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:

Der Aufbau der Syntax eines solchen Shortcut-Eintrags ist wie folgt:
'<Bereich>': '<Shortcut>': '<Befehl>'

Weitere vorgenommene Einstellungen

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:

Diese Lösung habe ich hier gefunden!

Hilfreiche Add-Ons (Packages)

Die Funktionalität des Editors kann leicht mit Add-ons oder sogenannten Packages erweitert oder verändert werden. Dafür sind folgende Schritte notwendig:

Die folgenden Packages fand ich bis jetzt sehr hilfreich:

open-recent

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.

highlight-selected

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.

autoclose-html

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:

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.

close-tags

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

Diese Verbesserungen habe ich wie folgt erreichen können:

  1. Die Datei 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.)

    Die bestehenden 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'
            
  2. Die Datei 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.)
    • Methode 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 "/"
                  
    • Methode insertClosingTag ändern von
      
        insertClosingTag: (selection, tag) ->
          selection.insertText ""
                  
      auf
      
        insertClosingTag: (selection, tag, editor) ->
          selection.insertText "/#{tag}>"
          editor.autoIndentBufferRow editor.selections[0].getBufferRange().end.row
                  

todo-show

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 TODOs zu suchen. Es erscheint dann ein Fenster, wo alle TODOs 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.)

atom-change-case-menu

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.

advanced-open-file

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.

atom-ide-ui

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.

ide-java

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.

Bisherige Probleme

ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT=false auf Ubuntu

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.