staging.inyokaproject.org

2023 Woche 37

17. September 2023

Synologys DiskStation Manager (DSM) ist eine letztlich eine Linux-Distribution mit einer Mischung aus Open-Source-Software und proprietären Eigenentwicklungen. Diese Basis ist dabei recht konventionell zusammen gesetzt und nicht sonderlich aktuell.

Die Basis habe ich hier schon mal beschrieben. Der DSM ist eine ziemlich herkömmliche Linux-Distribution mit Kernel, Paketverwaltung, systemd-Initsystem und einigen Basispaketen. Wenn man sich per SSH aufschaltet kann man sich die Struktur sehr leicht ansehen und relevante Versionsinformationen abfragen.

Trotz der aktuellen DSM Version 7.2-64570 Update 3 ist die zu ermittelnde Basis ziemlich veraltet. Das ist wenig überraschend, da DSM 7 schon bei Veröffentlichung nicht aktuell war. Einige Versionsstände als Beispiel:

SoftwareVersion
Kernel 4.4.302+
systemd219
dpkg1.19.0.5
PHP (es gibt separate Versionsstände in der Paket-Zentrale8.1.9
PostgreSQL11.11
NGINX1.23.1
Sudo1.9.5p2
GPG2.2.39
Python3.8.15

Ich tippe daher darauf, dass der Disk Station Manager zuletzt 2015 generalüberholt wurde. Der Linux Kernel und die systemd Version sprechen dafür und seitdem wird nur noch punktuell gepflegt und gewartet. Ob es eine Mutterdistribution gibt, von der sich DSM ableitet, oder ob es ein Linux From Scratch ist, vermag ich nicht zu beurteilen. Zumindest einige Komponenten und Eigenheiten sprechen für eine Nähe zu Debian.

Eine alte Basis ist zunächst kein Problem, da Synologys DSM nur auf wenigen und ausgewählten Hardwarekomponenten laufen muss und dies natürlich von Synology getestet wird. Allerdings werfen die langen Entwicklungszyklen und die im Kern sehr alte Distribution ein Schlaglicht auf die Leistungsfähigkeit der Entwicklungsabteilung, die ihre Ressourcen offensichtlich eher in die Apps steckt. Da Synology nach außen hin recht intransparent ist, sind dies meiner Meinung nach zumindest einige interessante Einblicke.

Der Artikel Synologys alternde Basis erschien zuerst auf Curius

In den letzten Jahren habe ich immer wieder über Synology und die verschiedenen Funktionen des Disk Station Manager (DSM) geschrieben. Aber was davon benutze ich selbst? Manches testet man schließlich nur, ohne es anschließend produktiv einsetzen zu können.

Ich benutze immer noch das Synology NAS DSD218 mit zwei Festplatten. Es läuft klaglos und ich werde es erst ersetzen, wenn es aus dem Support fällt (oder vorher kaputt geht). Ich habe mich damals für ein Modell entschieden, das Btrfs unterstützt, aber mit einem ARM-Prozessor läuft, weil mir die Intel-Prozessoren im Leerlauf zu viel Strom verbrauchen. Diese Einschränkung bedeutet, dass ich keine Docker-Container laufen lassen kann und auf die nativen Synology-Apps angewiesen bin.

Genutzte Dienste

In diesem Rahmen nutze ich Synology aber weitestgehend aus:

  • Personal Information Management (PIM): Synology organisiert meine Kalender und Kontakte, die ich dann via CalDAV und CardDAV auf meine Geräte synchronisiere.
  • Mail Archiv: Ich betreibe keinen dezidierten Mailserver, weil Aufwand und Ertrag hier in keinem Verhältnis mehr stehen. Allerdings betreibe ich einen internen Mailserver als Mailarchiv. In regelmäßigen Abständen archiviere ich die Mails von meinem Dienstleister auf die Synology.
  • Cloud: Bei Clouds fahre ich zweigleisig. Über meinen Arbeitgeber nutze ich eine Nextcloud, privat verwende ich Synology Drive, um Cloud-Funktionalitäten nutzen zu können.
  • Notizen: Die Bedeutung einer Notizverwaltung ist bei mir stark rückläufig. Ich habe mal mit einer Migration geliebäugelt, weil Synology die Note Station stark vernachlässigt, aber habe die Migration bis heute nicht vollzogen. Meine Notizen liegen daher immer noch auf dem Synology NAS in der Note Station.
  • Backup: Mittels Borg und Vorta sichere ich meine Geräte auf das Synology NAS.
  • Fotos: Seit kurzem verwalte ich über Synology Photos auch meine Bildersammlung.

Dazu gibt es noch einige interne Finessen, die ich gerne nutze. Mittels Backup Replication lässt sich die Btrfs-Schnappschuss-Funktionalität hervorragend ausnutzen, um sich gegen Bitrot oder eigene Dummheit abzusichern. Backups des NAS erledigt das Hyper Backup.

Theoretisch bietet Synology alles, um einen vollwertigen Webserver zu betreiben. Ich habe diese Funktionalität jedoch nicht aktiviert, da der hohe Wartungsaufwand für solche installierten Anwendungen den primären Vorteil der Synology konterkariert: Keine aufwändige Wartung notwendig.

Alles proprietär oder was?

Synologys Disk Station Manager ist proprietäre Software, basiert aber auf einem freien Kern. Letztendlich ist der DSM nur eine angepasste Linux-Distribution und die Anwendungen sind zum größten Teil ebenfalls im Kern freie Software. Besonders extrem ist das bei der Mail-Lösung. Diese ist letztlich ein Devocot-Server ohne viele Anpassungen.

Andere Implementierungen wie die Backup-Replikation oder die Freigaben-Verschlüsselung sind lediglich grafische Oberflächen für die Open-Source-Lösungen Btrfs-Snapshots bzw. eCryptFS.

In andere Anwendungen hat Synology mehr Arbeit investiert. Kalender und Kontakte sind selbst entwickelte WebApps, die lediglich freie Protokolle implementiert haben.

Allen gemeinsam ist, dass als Datenbanklösung PostgreSQL verwendet wird und der Webserver mit NGINX läuft.

Welche Probleme gibt es?

Ein Kernproblem teilt Synology mit den meisten Anbietern von Embedded-Linux-Systemen. Wird man einen Blick auf die Basis, so ist diese extrem alt und man kann und sollte sich immer fragen, ob Synology mit den seltenen Updates wirklich immer alle relevanten Sicherheitslücken geschlossen bekommt.

Die Entwicklungen bei Synology sind zudem sprunghaft. Manche Anwendungen werden aus der Taufe gehoben und dann kaum weiterentwickelt. Bei anderen gibt es unerwartete Entwicklungssprünge und manchmal lösen neue Apps alte ab, ohne den gleichen Funktionsumfang bieten zu können. Diese Problematik teilt Synolog natürlich mit allen anderen Entwicklerschmieden, seien es proprietäre Softwarehersteller oder Open-Source-Entwickler.

Der Artikel Wofür ich mein Synology NAS nutze erschien zuerst auf Curius

15. September 2023

Firefox Send war ein Filesharing-Dienst von Mozilla, der zwischen März 2019 und Juli 2020 betrieben und dann eingestellt wurde. Wie die MZLA Technologies Corporation in seinem Podcast bekannt gegeben hat, wird Firefox Send zurückkommen – als Teil von Thunderbird.

Was war Firefox Send?

Firefox Send war ein Filesharing-Dienst, den Mozilla im März 2019 offiziell gestartet hatte. Die Nutzung von Firefox Send war kostenlos und erfolgte durch eine Ende-zu-Ende-Verschlüsselung sicher. Durch die Festlegung einer Maximal-Dauer sowie einer Maximal-Anzahl an Downloads löschten sich die Dateien nach kurzer Zeit wieder von selbst vom Mozilla-Server.

Im Juli 2020 hatte Mozilla den Dienst wieder offline genommen, nachdem dieser zunehmend für Cyberkriminalität missbraucht worden war. Ursprünglich sollte es sich dabei nur um eine temporäre Auszeit handeln, während Mozilla im Hintergrund an Verbesserungen arbeitete. Nicht zuletzt durch die finanziellen Auswirkungen von COVID-19 sowie Kommerzialisierungsplänen anderer Produkte, die nicht wie erhofft aufgingen, kam es dann allerdings zu einer Umstrukturierung innerhalb Mozillas, welche auch die Kündigung von 250 Mitarbeitern zur Folge hatte. Im Zuge dieser Umstrukturierung wurde dann im September beschlossen, Firefox Send aus Kostengründen nicht wieder online zu schalten.

Thunderbird-Projekt bringt Firefox Send zurück

Wie die MZLA Technologies Coporation, die Tochtergesellschaft der Mozilla Foundation, welche Thunderbird entwickelt, vor kurzem in seinem Podcast verraten hat, wird „Firefox Send innerhalb der Thunderbird-Familie wiedergeboren“.

Wie das genau aussehen wird, ist zu diesem Zeitpunkt noch nicht bekannt. Das Ganze geschieht jedenfalls mit der Zielsetzung, E-Mails besser zu machen, indem nicht nur Dinge genutzt werden, die auf dem Computer des Anwenders ausgeführt werden können, sondern durch Dienste, die das Thunderbird-Projekt für seine Nutzer bereitstellen kann.

Bereits im Februar hatte die MZLA Technologies Coporation angekündigt, zusätzliche Dienste in Entwicklung zu haben und damit neue Einnahmequellen zu schaffen. Denn bislang lebt Thunderbird fast ausschließlich von Spenden, während das Team immer größer wird und ambitionierte Pläne hat. So verändert sich nicht nur Thunderbird für Windows, macOS und Linux mit großen Schritten, auch befindet sich Thunderbird für Android seit der Übernahme von K-9 Mail in Entwicklung, während die Entwicklung von Thunderbird für Apple iOS noch in diesem Jahr starten soll.

Es ist also gut möglich, dass wir in Zukunft entweder einen vollständig kostenpflichtigen Dienst oder auch einen Dienst mit sowohl kostenloser sowie kostenpflichtiger Option in Thunderbird sehen werden, um Dateien sicher an andere Empfänger zu übermitteln, ohne die Maximalgröße des jeweiligen Postfachs zu belasten, möglicherweise auch wieder mit der Option der Selbstlöschung. Was genau das Team vorhat, ist noch nicht angekündigt.

Der Beitrag Firefox Send kommt zurück – als Teil von Thunderbird erschien zuerst auf soeren-hentzschel.at.

FOSS-Einsteiger werden oft zu "Distrohoppern". Hat das eigentlich nur Vorteile?



Als ich mich zuerst mit GNU/Linux beschäftigt habe, fiel die Wahl meiner ersten Distribution auf Linux Mint. Ich hatte damit einen wirklich tollen Einstieg in die Welt des freien Betriebssystems – und auch in die FOSS-Gemeinschaft. Mir hat das Konzept dahinter sogar so gut gefallen, dass ich mich immer mehr mit den verschiedenen Aspekten der Software und der zugehörigen Community befasst habe. Ich habe versucht, mir möglichst viel Wissen dazu anzulesen, weil mich die Ideen hinter freier Software begeistert haben. Irgendwann bin ich dann auf die vielen weiteren Distributionen neben Linux Mint gestoßen, und es war um mich geschehen.

Mit der Zeit habe ich immer mehr Distros ausprobiert: Von Debian bis Slackware, von Manjaro und openSUSE bis zu Fedora, selbst Arch habe ich mir irgendwann angeschaut, um hier mal ein paar Beispiele zu nennen. Über die Monate und Jahre hinweg, in denen ich bisher Linux-Betriebssysteme verwendet habe, hatte ich Gelegenheit, so einige Projekte kennenzulernen. Und diese Gelegenheit habe ich auch genutzt. Mit dieser Verhaltensweise bin ich sicherlich nicht der einzige in der Community: Gerade Einsteiger werden oft zu „Distrohoppern“, die ihr Betriebssystem ständig wechseln. Zumindest kann dieser Eindruck aufkommen, wenn man sich die Diskussionen in den einschlägen Linux-Foren, zum Beispiel in den GNU/Linux.ch-Matrix-Kanälen anschaut.

Bei mir war das im Grunde nicht anders, das habe ich ja bereits beschrieben: Mein Interesse an freier Software hat mich dazu veranlasst, immer mehr davon zu testen. Dadurch konnte ich einiges hinzulernen, und die Stärken und Schwächen verschiedener Projekte herausfinden. Ich habe feststellen können, welche Software mir besonders gut gefällt, und welche eher nichts für mich ist. Eigentlich klingt das doch ziemlich positiv, oder? Denn nur wer sich wirklich mit einem Projekt, einer Anwendung oder eben einer Distribution auseinandersetzt, kann auch tatsächlich darüber urteilen. Vielleicht lassen sich so sogar Vorurteile ausschließen, was die Diskussionskultur in der FOSS-Gemeinschaft wiederum verbessern könnte. Aber ist das Distrohopping als ständiger Distributionswechsel wirklich so positiv?

Ja, ich sehe durchaus positive Seiten. Wenn man so über das Thema nachdenkt, kommen einem diese vermutlich auch am ehesten in den Sinn. Freie Software ist für viele ein Hobby, in das sie sich wunderbar vertiefen können. Das möchte ich auch niemandem absprechen – aber trotzdem habe ich das Gefühl, dass es nicht wirklich sinnvoll ist, das Distrohopping so einseitig zu betrachten.

Für mich spielt hier zunächst ein ganz grundlegender Faktor eine Rolle: Distrohopping kostet Zeit. In einer euphorischen Begeisterung über die Ideen freier Software fällt das vielleicht gar nicht so sehr auf. Doch genau hier liegt die Krux, ein Problem, dass sich für mich schleichend immer größer angefühlt hat. Es lohnt sich, das Ganze einfach mal durchzurechnen: Mal angenommen, ein Installationsabbild für eine Distribution ist zwei Gigabyte groß. Je nach Downloadgeschwindigkeit kann es mit einer Wlan-Verbindung durchaus eine Viertelstunde dauern, bis das Installationsabbild überhaupt heruntergeladen ist. Danach muss diese ISO-Datei noch auf ein Installationsmedium, also zum Beispiel einen USB-Stick geschrieben werden – das dauert überschlagen auch eine Viertelstunde. Wenn die eigentliche Installation dann wieder eine halbe Stunde beansprucht, liegt ein Anwender bereits bei einer Stunde „investierter“ Zeit.

Aber hier hört es noch lange nicht auf: Denn wenn ein System einmal installiert ist, möchte es auch eingerichtet werden. Wieder vergeht eine Stunde, oder auch zwei. Auch Dateien und Webbrowser-Lesezeichen möchten importiert werden, das frisst auch wieder Zeit. Und was ist eigentlich, wenn auf dem neuen System auf einmal unerwartete Probleme auftreten, die gelöst werden wollen? Ich weiß nicht, ob ich meine Schätzungen hier zu hoch ansetze – aber im Grunde können Anwender bei einem Distributionswechsel mit mindestens zwei, vielleicht sogar drei oder mehr Stunden Arbeit rechnen. Wenn nun ein Distrohopper monatlich, vielleicht sogar alle zwei Wochen oder noch regelmäßiger das eigene System austauscht, kommen da wohl einige Augenblicke zusammen.

Natürlich macht man das als Linux-Anwender gerne, natürlich lernt man die neue Distribution dadurch besser kennen und sammelt Erfahrungen zu freier Software im Allgemeinen. Aber eine Frage muss doch erlaubt sein: Lohnt sich das wirklich? Ich kann hier nicht für alle sprechen, nur für mich selbst. Und für mich selbst muss ich leider feststellen, dass sich meine Eskapaden durch den den Linux-Dschungel nicht immer gelohnt haben, und das ich mir manchmal zu große Hoffnungen von einer Distribution gemacht habe.

Wenn auf dem eigenen Rechner eine Distribution die nächste überschreibt, oder die fünfte virtuelle Maschine der Woche angelegt wird, frage ich mich schon, ob das Distrohopping hier so wirklich positive Auswirkungen hat. Klar, man lernt dazu – aber muss man dazu wirklich immer ein neues Betriebssystem installieren? Im Grunde lässt sich mit den meisten Distributionen ohnehin ein Großteil jeglicher Arbeit erledigen, die man je von einem System abverlangen könnte. Trotzdem habe zumindest ich viele Distros ausprobiert. Manchmal habe ich mich sogar dabei erwischt, bei Distributionen explizit nach Gründen zu suchen, etwas anderes auszuprobieren. So kann Distrohopping doch auch keinen Spaß mehr machen, oder?

Im Grunde läuft die Diskussion, die ich hier anstoßen möchte, auf eine Frage hinaus: Wann wollen wir uns mit einer Distribution zufrieden geben? Denn es sind immer unsere eigenen Ansprüche, die hier im Vordergrund stehen, und erfüllt werden wollen. Ich würde aus heutiger Sicht nicht sagen, dass ich meine Distrohopping-Abenteuer bereue – aber manche waren vielleicht doch zu viel des Guten. Ja, ich weiß heute, welche Distributionen ich mehr oder weniger gern mag. Aber hätte ich das nicht auch anders herausfinden können?

Die meisten grafischen Oberflächen können unter den meisten bekannten Distributionen problemlos nachinstalliert und individuell konfiguriert werden. Trotzdem haben Distros, die diese Aufgaben übernehmen, einen Reiz. Kleine Distro-spezifische Hilfsprogramme klingen toll, wenn man in einem Artikel darüber ließt. Aber im Alltag braucht man sie vielleicht doch nur einmal im Monat. Jede Distribution findet mindestens eine Anhängerin, nämlich diejenige, die sie erstellt. Aber ob sie auch für die große Masse der Linux-Anwender eine Installation wert ist, bleibt eine ganz andere Frage. Und bei manchen Distributionen würde ich diese heute wohl ein bisschen anders beantworten, als noch vor ein paar Wochen oder Monaten.

Momentan läuft bei mir ein Debian GNU/Linux-System auf dem Hauptrechner – und ich bin sehr zufrieden damit. Ich habe mir diese Installation genau so konfiguriert, wie ich sie gerne hätte, und habe eigentlich keinen Grund, noch über andere Distributionen nachzudenken. Trotzdem weiß ich, dass mich die neue Ubuntu-Version interessieren wird, und dass ich beim nächsten Fedora-Release die Augen offen halten werde. Ob ich das wirklich sollte, oder müsste – da bin ich mir selbst nicht ganz so sicher.

Distrohopping kann Spaß machen, es kann ein interessanter Zeitvertreib sein. Freie Software ist ein Hobby, und es ist auch mein Hobby. Aber ständig das eigene System zu tauschen, keiner Distribution treu zu bleiben – das kann auch auf die Nerven gehen. Zumindest ging es mir so. Momentan habe ich eher Lust, mich tiefgehender mit einer Distribution zu befassen. Meine Wahl fällt dabei auf Debian – wenn das bei euch anders ist, ist das auch vollkommen in Ordnung. Den schleichenden Verdacht, mit dem Distrohopping eigentlich stets an der Oberfläche der Software zu kratzen, mit der man sich eigentlich auskennen möchte, den konnte ich mit der Zeit einfach nicht mehr ausblenden. Und das wollte ich irgendwann auch nicht mehr. Wie seht ihr das?

Bildnachweis: Christopher Michel, CC BY 2.0, via Wikimedia Commons


GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.

13. September 2023

Die MZLA Technologies Corporation hat mit Thunderbird 115.2.2 ein Sicherheits-Update für seinen Open Source E-Mail-Client veröffentlicht.

Neuerungen von Thunderbird 115.2.2

Mit dem Update auf Thunderbird 115.2.2 hat die MZLA Technologies Corporation ein Sicherheits-Update für seinen Open Source E-Mail-Client veröffentlicht. Dieses behebt eine schwerwiegende Sicherheitslücke im Code für das Dekodieren von WebP-Bildern, welche bereits aktiv ausgenutzt wird. Es handelt sich dabei um die gleiche Sicherheitslücke, welche unter anderem auch in Firefox 117.0.1 und dem gestern veröffentlichten Update von Google Chrome behoben worden ist.

Der Beitrag Sicherheits-Update Thunderbird 115.2.2 veröffentlicht erschien zuerst auf soeren-hentzschel.at.

12. September 2023

Mozilla hat Firefox 117.0.1 veröffentlicht. Neben anderen Korrekturen behebt Firefox 117.0.1 auch eine schwerwiegende Sicherheitslücke, welche bereits aktiv ausgenutzt wird.

Download Mozilla Firefox 117.0.1

Mit dem Update auf Firefox 117.0.1 behebt Mozilla eine Sicherheitslücke im Code für das Dekodieren von WebP-Bildern, welche bereits aktiv ausgenutzt wird. Es handelt sich dabei um die gleiche Sicherheitslücke, von welcher auch Google Chrome betroffen war, für den heute ebenfalls ein Update veröffentlicht worden ist. Auch andere auf Chromium basierende Browser dürften betroffen sein und entweder ein Update erhalten haben oder zeitnah erhalten. Sowohl der Zeitpunkt als auch die Beschreibung der Schwachstelle sowie Apple und Citizen Lab als erwähnte Reporter der Schwachstelle legen einen Zusammenhang zum sogenannten Blastpass-Exploit nahe: Apple veröffentlichte vor wenigen Tagen Sicherheits-Updates für macOS, iOS und iPadOS. Die damit behobene Schwachstelle wurde ausgenutzt, um über ein manipuliertes Bild die sogenannte Pegasus-Spyware einzuschleusen, ohne dass dazu eine weitere Interaktion durch den Angreifer notwendig gewesen ist.

Eine Änderung in Firefox 117.0 verursachte, dass Erweiterungen, welche länger andauernde Aufgaben im Hintergrund ausführten, nach 30 Sekunden stoppten. Dieses Problem wurde behoben. Auch meine Erweiterung Bookmarks Organizer wurde betroffen. Hierfür veröffentlichte ich allerdings bereits vor ein paar Tagen ein Update, welches das Problem umging. Aber auch andere Erweiterungen können potenziell betroffen gewesen sein.

Ein Fehler wurde behoben, der verursachte, dass Links, welche in einer anderen Anwendung angeklickt worden sind, einen bis dahin geschlossenen Firefox auf macOS nicht öffnen ließen.

Die Option, alle kürzlich geschlossenen Tabs mit einem Mal zu öffnen, hatte nicht mehr alle Tabs geöffnet.

Das Problem wurde behoben, dass das Lesezeichen-Menü manchmal teilweise sichtbar geblieben war, nachdem Firefox minimiert wurde.

Ein Problem mit dem Inspektor-Entwicklerwerkzeug beim Untersuchen von SVG-Elementen wurde behoben sowie ein Fehler in Zusammenhang mit Sourcemaps im Debugger.

Außerdem wurden drei Webkompatibilitätsprobleme behoben. Zum einen konnte URL.protocol seit Firefox 117.0 nicht mehr geändert werden. Diese war eine beabsichtigte Änderung gemäß Spezifikation, welche mit Firefox 117.0.1 temporär zurückgenommen worden ist. Sobald Google die gleiche Änderung in Chrome ausgeliefert hat (was nach aktuellem Plan am 10. Oktober sein wird) wird Firefox die Änderung final umsetzen. Des Weiteren wurden auf manchen Websites falsche Zeitzonen erkannt und Websites, welche WebAssembly-Ausnahmebehandlungen und Audio-Worklets verwenden, funktionierten nicht mehr.

Schließlich wurde noch in den Firefox-Einstellungen eine zu groß angezeigte Grafik verkleinert.

Der Beitrag Mozilla veröffentlicht Sicherheits-Update Firefox 117.0.1 erschien zuerst auf soeren-hentzschel.at.

Weitere Vim Artikel hier im Blog.

- [Vim Modi](#VimModi) - [Erklärung](#moduserkl) - [Normalmodus](#normalmodus) - [Einfügemodus](#Einfügemodus) - [Kommandomodus](#Kommandomodus) - [FAQ](#FAQ)
- [Normalmodus](#Normalmodus) - [Beenden](#vimend) - [Multiplikator](#Multiplikator) - [Navigieren](#Navigieren) - [Book(m)arks](#Bookmarks) - [Undo & Redo](#Undo) - [Copy n Paste](#Copy) - [~Groß/Klein](#Kleinschreibung) - ["Register](#Register) - [Makros](#Makros) - [Autovervollständigung](#Autovervollständigung) - [Markieren](#Markieren) - [Löschen](#entfernen) - [Suchen](#Suchen) - [Suchen mit Logik Operatoren](#SuchenLogik) - [Suchen und Ersetzen](#Sersetzen)
- [Kommandomodus](#Commandmodus) - [Datei laden](#Dateiladen)

## Vim Modi

Erklärung

Vim ist ein modaler Editor. Dies bedeutet, dass man in unterschiedlichen Modi arbeitet, was Einsteigern oft Probleme bereitet, andererseits aber eine sehr große Zahl von Tastenkürzeln erlaubt, da sich diese an einzelne Modi binden und daher auch mehrfach belegen lassen.
Es gibt sechs Grundmodi. Zusätzlich gibt es noch fünf weitere Grundvarianten der Grundmodi.

Normalmodus ESC

Vim startet im Normalmodus, oft auch als Kommando- oder Befehlsmodus bezeichnet. Hier kann man über Tastenkürzel zum Beispiel Zeilen kopieren und verschieben oder Text formatieren. Dies ist der zentrale Modus, von dem in alle anderen Modi gewechselt wird. Durch das zweifache Drücken der Esc-Taste gelangt man immer in den Normalmodus zurück.

Der Punkt . wiederholt immer den letzten eingegebenen Befehl.

Einfügemodus / Insert

Im Einfügemodus verändern Tastatureingaben den editierten Text, so wie man es von anderen Editoren kennt. Man erreicht diesen Modus vom Normalmodus aus zum Beispiel über i (für engl. insert = einfügen).

Kommandomodus / Command

Vom Normalmodus ausgehend! Dieser Modus wird durch den einleitenden Doppelpunkt : erreicht. Hinter dem Doppelpunkt können dann komplexe Kommandos wie beispielsweise zum Suchen und Ersetzen eingegeben werden. Nach dem abschließenden Enter “Eingabetaste” wird der Befehl ausgeführt und man befindet sich wieder im Normalmodus. Zu diesem Modus zählen des Weiteren die Kommandos / (Textmuster vorwärts suchen), ? (Textmuster rückwärts suchen) und das Filter-Kommando !, mit dem die UNIX-Kommandos “UNIX-Kommandos” (zum Beispiel sort) aufgerufen und auf den Text angewandt werden können.

Vim Normalmodus ESC ESC

Vim beenden & speichern (Kommandomodus)

  • :q beenden (quit)
  • :q! , :cq, SHIFT + ZQ beenden ohne zu speichern trotz Änderungen (cancel)
  • :wq , SHIFT + zz speichern (write) und beenden
  • :w aktueller Inhalt in Datei speichern
  • :w FILE.TXT speichert den Inhalt des Editors in die Datei FILE.TXT
  • :w !sudo tee FILE.TXT speichert die Datei mit dem vorangehenden sudo Aufruf

Multiplikator

:help motion-count-multiplied

Zu einem Befehl kann noch eine Zahl eingegeben werden, dann wird der Befehl entsprechend oft wiederholt.
Beispiele

  1. Wurde eine Zeile mit yy (yank) in den Zwischenspeicher kopiert, dann wird sie mit 5p 5x darunter eingefügt.
  2. Sollen die nächsten 7 Zeichen rechts gelöscht werden : 7x
  3. Sollen ab der aktuellen Position die nächsten 3 Wörter gelöscht werden: 3dw
  4. Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden: 3diw (3x Delete Include Word)
  5. Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden und gleich in den Eingabemodus gewechselt werden: 3ciw (3x Change Include Word)
  6. Die nächsten 10 Zeilen löschen: 10dd

Navigieren / Motion

:help motion
:help scroll-cursor
  • Pfeiltasten , hjkl links, runter, hoch, rechts . Die Pfeiltasten hjkl sind sehr wichtig bei der Nutzung von Multiplikatoren.
  • j und k bei diesen runter und hoch “Movement” Bewegungs-Tasten ist noch wichtig zu wissen, dass sie immer Zeilenweise interpretiert werden. Wenn also eine Multiline, also eine Zeile, die wegen ihrer Länge mehrfach umgebrochen wird, vorhanden ist, dann springt der Cursor visuell mehrere Zeilen runter oder hoch! Aber soll der Cursor visuell zwischen den Zeilen bewegt werden und damit im Prinzip innerhalb EINER Zeile, so geht das mit der zusätzlichen Taste g und damit mit gj und gk . Hier ist visuell nicht mit dem VISUAL Mode von vim zu verwechseln.
  • gj / gk Zeilenweise runter oder Zeilenweise hoch bei umgebrochenen Zeilen. Beispiel: g4j springt 4 visuelle Zeilen runter und g7k springt 7 visuelle Zeilen hoch
  • g0 / g$ analog zum an den Anfang / Ende der visuellen Zeile zu springen
  • Bild hoch , Bild runter Eine Seite hoch / runter
  • Pos1 , 0 an den Zeilenanfang springen
  • ^ springt an den Zeilenanfang auf das erste Zeichen, das kein Leerzeichen oder Tab ist
  • Ende , $ an das Zeilenende springen
  • w ein Wort nach rechts springen (Wortanfang)
  • SHIFT +w also groß W springt bis zum nächsten Wort (Ausdruck), der durch ein Leerzeichen zum vorherigen Wort (Ausdruck) getrennt ist. z.B. springt W hier vom Anfang von Let.me.out() Thanks direkt auf das T von Thanks.
  • e an das Ende eines Wortes, auf den letzten Buchstaben springen (Wortende)
  • b ein Wort nach links springen (Wortanfang)
  • ) einen Satz vorwärts springen
  • ( einen Satz rückwärts springen
  • SHIFT + h zur ersten Zeile des aktuellen Fensters springen
  • SHIFT + m in die Mitte des aktuellen Fensters springen
  • SHIFT + l in die letzte Zeile des aktuellen Fensters springen
  • STRG + d einen halben Bildschirm runter blättern (down)
  • STRG + u einen halben Bildschirm hoch blättern (up)
  • gg an den Datei Anfang springen
  • SHIFT + g an das Datei Ende springen
  • : + ZAHL springt in die Zeile ZAHL
  • f + ZEICHEN springt zum nächsten Vorkommen des Zeichens
  • SHIFT+ f + ZEICHEN springt zum vorherigen Vorkommen des Zeichens
  • z + ENTER oder zt aktuelle Zeile in die erste Zeile des Displays scrollen (top)
  • zz oder z. aktuelle Zeile in die Mitte des Bildschirms scrollen
  • z- oder zb aktuelle Zeile an den unteren Rand scrollen (bottom)

Marks (Bookmarks)

:help bookmark

Bookmarks sind einzelne Zeichen von a-z und A-Z die im Text gesetzt werden können, um schnell hin und her zu springen.

  • m + ZEICHEN einen Marker setzen. z.B. mb setzt den Marker b
  • ' + ZEICHEN zu einem Marker springen . z.B. 'b springt zum Marker b
    • Das ' ist das Zeichen auf einer deutschen Tastatur auf dem #

Undo & Redo

:help undo
  • u Undo (Rückgängig machen)
  • SHIFT + u Undo alle Änderungen, die zuletzt in der aktuellen Zeile gemacht wurden
  • STRG + R Redo
  • :undolist zeigt den Verlauf der letzten Änderungen, die rückgängig gemacht werden können. Dabei zeigt die Nummer den Index der Veränderung, die direkt ausgewählt werden kann. Changes zeigt an, wieviele Veränderungen gemacht wurden und die Uhrzeit, wann die Veränderungen gemacht wurden.
  • NUMMER + STRG + r macht die Veränderung mit der Index NUMMER wieder rückgängig
  • Plugins wie undotree oder mundo machen das Undo & Redo sehr übersichtlich und einfacher

Copy & Paste

  • y Kopieren (yank)
  • yy Ganze Zeile kopieren
  • p vor dem aktuellen Cursor einfügen, oder Zeile
  • Shift + p nach dem aktuellen Cursor einfügen, oder Zeile
  • Zwischenablage / Clipboard (FAQ System Clipboard !)
  • "*y , "+y in den System Zwischenspeicher kopieren
  • "*p , "+p aus den System Zwischenspeicher einfügen. Analog "* oder "+ + SHIFT + p
  • Register / Vim interne Zwischenablage
    • Vim unterstützt von a-z 48 verschiedene Register (Zwischenablagen). So können unterschiedliche Dinge in verschiedene Register kopiert und an anderer Stelle in gleicher oder neuer Reihenfolge eingefügt werden.
    • Das Register wird mit " eingeleitet und der folgende Buchstabe a-z definiert in welchem Register der Inhalt gespeichert werden soll
  • "gyy kopiert die aktuelle Zeile ins Register g
  • "gp fügt den Inhalt aus dem Register ab dem aktuellen Cursor ein

Register / Zwischenspeicher 48 :registers

:help registers

  • Auszüge aus dem Hilfedokument
  • :registers zeigt alle Register an. :registers ZEICHEN zeigt das Register ZEICHEN an
  • STRG + r + REGISTER fügt im Insertmodus den Inhalt von REGISTER direkt ein.
  • "" (unnamed) Standardregister in das alles rein kopiert wird, was mit dcsx gelöscht oder mit y kopiert wurde
  • "a-z (named) mit einem großen A-Z wird das Kopierte an das a-z Register angehängt. Zusammen mit einem > wird vor dem Anhängen ein Zeilenumbruch eingefügt.
  • "0-9 (numbered) In Register 0 wird immer der zuletzt kopierte (yank) Inhalt. In Register 1 steht immer der zuletzt gelöschte Inhalt dc
  • "- Im Small Delete Register steht immer der zuletzt gelöschte Inhalt, wenn es weniger als eine Zeile war
  • Read-Only
    • ". enthält immer den zuletzt eingefügten Text
    • "% enthält den Dateinamen
    • ": enthält den zuletzt eingegeben Befehl
  • "* , "+ , "~ Zwischenspeicher / Clipboard . "~ ist der Inhalt des letzten Drag’n’Drop auf das Vim Fenster
  • "_ (black hole) bei einem Löschvorgang wird nichts in Register gespeichert
  • "/ (last search) enthält den Text der letzten Suche

Makros / Recording q

:help recording
  • MAKRO AUFZEICHNEN
    • q + a-z mit q wird das Recording gestartet und das nächste Zeichen z.b. a ist der Name des Makros. Also qa startet die Aufnahmen von Makro a
    • Mit dem erneuten Drücken der Taste q wird die Aufzeichnung des Makros beendet
  • MAKRO ABSPIELEN / AUFRUFEN
    • @ + a-z mit z.B. @a wird das Makro a abgespielt bzw ausgeführt
    • Mit @@ wird das Makro wiederholt
    • mit 10@a wird das Makro 10x hintereinander ausgeführt
  • MAKROS EDITIEREN
    • Makros werden als normaler Text in Registern gespeichert
    • Das REGISTER am besten in eine leere Zeile einfügen, weil nach dem Editieren einfach direkt die gesamte Zeile wieder im Register gespeichert werden kann " + REGISTERNUMMER + p z.B. "4p
    • Die Zeile editieren und (die gesamte Zeile) wieder zurück in das Register schreiben " + 4 + yy
    • Zur Kontrolle kann :registers oder :registers 4 eingegeben werden
    • Ein Makro kann einfach gelöscht werden, indem nichts aufgezeichnet wird. Z.b. Makro a = q4q
  • STEUERUNGZEICHEN EINGEBEN
    • Im Eingabemodus STRG + v + TASTE z.B. Enter/Return, ESC, F2, Backspace ….
  • REKURSIVE MAKROS
    • Im Makro selbst das Makro aufrufen
    • Läuft solange, bis es auf einen Fehler aufläuft

Autovervollständigung :abbr

  • :abbr + abkrz + AUSGESCHRIEBENER BEGRIFF wenn im Einfügemodus der Begriff abkrz und Leertaste (oder Enter, dann mit Zeilenumbruch) eingegeben wird, erscheint der AUSGESCHRIEBENER BEGRIFF
  • Beispiel: :abbr zb Zum Beispiel

Groß-/Kleinschreibung

  • ZEICHEN
    • ~ ändert das aktuelle Zeichen auf Groß oder Klein
  • WORT
    • g~w Invertiert die Groß-/Kleinschreibung des aktuellen Wortes
    • guw Ändert von der aktuellen Position bis zum Ende des Worts von Groß- auf Kleinschreibung
    • guaw Ändert das gesamte Wort auf Kleinschreibung. Egal auf welcher Position der Cursor ist
    • gUw Ändert von der aktuellen Position bis zum Ende des Worts von Klein- auf Großschreibung
    • gUaw Ändert das gesamte Wort auf Großschreibung. Egal auf welcher Position der Cursor ist
  • ZEILE
    • guu Ändert die aktuelle Zeile von Groß- auf Kleinschreibung
    • gUU Ändert die aktuelle Zeile von Klein- auf Großschreibung
    • g~~ Invertiert die Groß-/Kleinschreibung der gesamten Zeile
    • gU5jÄndert die darunter liegenden Zeilen zu Großschreibung
    • gu3k Ändert die darüber liegenden Zeilen zu Großschreibung
  • SATZ
    • gU)Ändert alles zu Großschreibung bis zum Ende des Satzes
  • SATZ alle Wörter am Anfang groß geschrieben
    • s/\<./\u&/g
      • s/ ... / Such Funktion
      • \< springt an den Anfang eines Wortes
      • . selektiert das erste Zeichen des Wortes
      • \u Befehl um das folgende Zeichen des Ersetzungs-Strings in der Variable & in Großschreibung umzuwandeln
      • & Variable für den String aus . der ersetzt werden soll.
      • g ersetzt alle gefundenen Treffer. Nicht nur den ersten Treffer.
  • ABSATZ
    • gu} Ändert alles bis zum Ende des Absatzes zu Kleinschreibung
  • DOKUMENT
    • guG Ändert alles zu Kleinschreibung bis zum Ende des Dokumentes
    • Alle Anfangsbuchstaben groß
      • s/\<./\u&/g ändert alle Anfangsbuchstaben im gesamten Dokument um in Großbuchstaben. Kann mit Visual Markierung oder anderen Markern lokal eingegrenzt werden.
        \< sucht den Anfang eines Wortes
        . positioniert den ersten Buchstaben eines Wortes
        \u der nachfolgende Buchstabe des “substition Strings” soll in einen Großbuchstaben umgewandelt werden (&)
        & der “Substition String” der gefunden wurde
        g soll ALLE gefundenen Treffer umwandeln und nicht nur den ersten

Auswählen/Markieren

  • v Zeichenweise
  • SHIFT + v + Pfeiltasten Zeilenweise
  • STRG + v + Pfeiltasten Vertikal
  • Beispiele: 10v markiert 10 Zeichen, 3wv markiert 3 Wörter, )vy markiert bis zum Ende des Satzes und kopiert ihn in den Zwischenspeicher/Register.

Löschen & entfernen

  • x Zeichen unter dem Cursor löschen
  • SHIFT + x Zeichen links vom Cursor löschen
  • DELETE & CHANGE
    • Gelöscht werden kann mit d (delete) oder c (change). Bei d bleibt Vim im Normalmodus und bei c wird nach dem Löschen in den Eingabemodus gewechselt und es kann direkt mit der Eingabe begonnen werden.
  • dd löscht die komplette Zeile
  • dw , cw löscht das Wort rechts
  • dip , cip Lösche nur den Absatz
  • dap , cap Lösche den Absatz und die nachfolgenden Leerzeilen
  • g/^$/d Lösche alle leeren Zeilen im Dokumente ^ Anfang und $ Ende der Zeile liegen “nebeneinander”
  • :5,20d/^$/ alle leeren Zeilen zwischen Zeile 5 und Zeile 20 löschen

Suchen

  • /Suchbegriff vorwärts suchen. Vim zeigt den ersten Fundort an. Soll der nächste Fundort angesprungen werden muss die Taste n (Next) oder * gedrückt werden mit Shift + n oder # wird die Suche rückwärts ausgeführt.
  • ?Suchbegriff rückwärts suchen
  • Das Wort suchen, auf dem gerade der Cursor steht mit * (Stern)

Suchen mit Logik Operatoren UND und ODER

  • \& UND Verknüpfung: Um eine Zeile zu finden, die zwei Suchbegriffe enthält, die aber nicht unbedingt nebeneinander stehen, also eine UND Verknüpfung wie zum Beispiel Herr und ins im Satz “Herr Müller geht gerne ins Schwimmbad” funktioniert folgendes Beispiel
    /.*Herr\&.*ins
    vor jedem Suchbegriff MUSS .* eingegeben werden und
  • \| ODER Verknüpfung: Um den einen ODER den anderen Suchbegriff in EINER Zeile zu finden, wird der Operator \| (das senkrechte Pipesymbol) benutzt. Zum Beispiel /.*Herr\&|.*ins in jeder Zeile nach Herr ODER ins
  • Wenn gleich GLOBAL in der gesamten Datei gesucht und gehighlighted werden soll, dann muss die Suche mit :g begonnen werden. Also zum Beispiel :g/.*Herr\&.*ins
  • Die Metacharakter + * . ? usw weiter im Artikel “ttrss Label, Filter & Strategien” genauer erklärt.

Suchen und Ersetzen

: [range]substitude/SUCHE/ERSETZE/[flags][count]

  • %s/SUCHE/ERSETZE/g Suche im ganzen (%) Dokument nach SUCHE und ersetze alle Vorkommen automatisch (g - global) mit ERSETZE
  • 3,40s/SUCHE/ERSETZE/g Suche von Zeile 3 bis Zeile 40 …
  • 23,$s/SUCHE/ERSETZE/g Suche von Zeile 23 bis Dateiende ($) …
  • %s/SUCHE/ERSETZE/ Suche und ersetze im ganzen Dokument und frage jedes Mal nach (fehlendes g am Schluß)
  • g/^$/d Lösche alle leeren Zeilen im Dokumente ^ Anfang und $ Ende der Zeile liegen “nebeneinander”
  • :5,20d/^$/ alle leeren Zeilen zwischen Zeile 5 und Zeile 20 löschen
  • Ausführlicher Artikel Suchen & Ersetzen mit Vim

Vim Command Modus

Datei laden

  • :e Öffnet den Dateibrowser. Bei Auswahl mit der Entertaste wird die Datei in das aktuelle Fenster geladen.
  • :e FILE.TXT öffnet direkt die Datei in das aktuelle Fenster
  • :Sex Teilt das Fenster horizontal in ein weiteres Fenster mit einem Dateibrowser
  • :Vex Teilt das Fenster vertikal in ein weiteres Fenster mit einem Dateibrowser

Fenstermanagement

  • :tabnew Neues Fenster in neuem Tab
    • :tabprev , gt gehe zum nächsten Tab
    • :tabnext , gT gehe zum vorherigen Tab
      • Bessere Lesbarkeit der Tabs
      • :hi tablinesel ctermbg=darkblue ctermfg=white
      • :hi tabline ctermbg=black ctermfg=green
    • Hilfe :help tabpage
  • :new Neues Fenster horizontal
  • :split Aktuelles Fenster horizontal teilen
  • :vsplit Aktuelles Fenster vertikal teilen
  • STRG + ww wechselt zum nächsten Fenster und rotiert bei Wiederholung durch alle Fenster
  • STRG + w mit sind die Pfeiltasten gemeint, oder auch hjkl mit denen direkt in das entsprechende Fenster gewechselt werden kann.
    Zum Beispiel
    • STRG + wl wechselt in das linke Fenster
    • STRG + wj in das untere Fenster
    • STRG + w in das linke Fenster.
    • :ls die offenen Buffer (Fenster/Tabs) anzeigen lassen

Session Management

  • vim -S startet Vim wieder mit der zuletzt gespeicherten Session (aus der Session.vim Datei)
  • :mks! speichert die aktuelle Session in der Session.vim Datei

FAQ

  1. Paste Modes (Einfüge Modi)
    :set paste deaktiviert einige Automatismen, so dass eingefügte Daten z.B. ihre Struktur erhalten und nicht umformatiert werden. :set nopaste deaktiviert dieses Verhalten wieder.
    Hilfen :help paste , :help pastetoggle
  2. System Clipboard (Zwischenablage) Copy&Paste - Interaktion
    Damit "* und "+ funktioniert, muss ein Vim Paket mit grafischer Unterstützung installiert sein, in das die Option +clipboard mit eincompiliert wurde.
    Unter Linux mit einem X11 System repräsentiert "* die Option, womit der Inhalt mit der mittleren Maustaste an die aktuelle Stelle eingefügt werden kann.
    Um zu prüfen, ob die aktuelle Vim Installation den Austausch mit dem System Clipboard unterstützt: Im Normalmodus :echo has('clipboard') und ENTER eingeben. Wenn als Ergebnis eine 0 heraus kommt, wird es nicht unterstützt.
    Durch die Installation des Paketes vim-gtk3 (Ubuntu) wird Copy&Paste unterstützt.
    Hilfen :help clipboard , :help registers , :help cb (Current Buffer)

Weitere Vim Artikel hier im Blog.

Quellen

  1. https://de.wikipedia.org/wiki/Vim
  2. https://wiki.ubuntuusers.de/VIM/
  3. Einführung zu Vim - Tutorials Deutsch https://www.youtube.com/playlist?list=PLZ0CUq-i3Io9dAIKsHNwNAnTeKXamcQ5N
  4. Vim Tricks Live Coding auf Deutsch mit Daniel Siepmann https://youtu.be/P5tAKRVYj4E
  5. Register und Makros in Vim (clt23) Info Seite / Video

Weitere Artikel hier zu vim

Weitere Vim Artikel hier im Blog.

- [Vim Modi](#VimModi) - [Erklärung](#moduserkl) - [Normalmodus](#normalmodus) - [Einfügemodus](#Einfügemodus) - [Kommandomodus](#Kommandomodus) - [FAQ](#FAQ)
- [Normalmodus](#Normalmodus) - [Beenden](#vimend) - [Multiplikator](#Multiplikator) - [Navigieren](#Navigieren) - [Book(m)arks](#Bookmarks) - [Undo & Redo](#Undo) - [Copy n Paste](#Copy) - [~Groß/Klein](#Kleinschreibung) - ["Register](#Register) - [Makros](#Makros) - [Autovervollständigung](#Autovervollständigung) - [Markieren](#Markieren) - [Löschen](#entfernen) - [Suchen](#Suchen) - [Suchen mit Logik Operatoren](#SuchenLogik) - [Suchen und Ersetzen](#Sersetzen)
- [Kommandomodus](#Commandmodus) - [Datei laden](#Dateiladen)

## Vim Modi

Erklärung

Vim ist ein modaler Editor. Dies bedeutet, dass man in unterschiedlichen Modi arbeitet, was Einsteigern oft Probleme bereitet, andererseits aber eine sehr große Zahl von Tastenkürzeln erlaubt, da sich diese an einzelne Modi binden und daher auch mehrfach belegen lassen.
Es gibt sechs Grundmodi. Zusätzlich gibt es noch fünf weitere Grundvarianten der Grundmodi.

Normalmodus ESC

Vim startet im Normalmodus, oft auch als Kommando- oder Befehlsmodus bezeichnet. Hier kann man über Tastenkürzel zum Beispiel Zeilen kopieren und verschieben oder Text formatieren. Dies ist der zentrale Modus, von dem in alle anderen Modi gewechselt wird. Durch das zweifache Drücken der Esc-Taste gelangt man immer in den Normalmodus zurück.

Der Punkt . wiederholt immer den letzten eingegebenen Befehl.

Einfügemodus / Insert

Im Einfügemodus verändern Tastatureingaben den editierten Text, so wie man es von anderen Editoren kennt. Man erreicht diesen Modus vom Normalmodus aus zum Beispiel über i (für engl. insert = einfügen).

Kommandomodus / Command

Vom Normalmodus ausgehend! Dieser Modus wird durch den einleitenden Doppelpunkt : erreicht. Hinter dem Doppelpunkt können dann komplexe Kommandos wie beispielsweise zum Suchen und Ersetzen eingegeben werden. Nach dem abschließenden Enter “Eingabetaste” wird der Befehl ausgeführt und man befindet sich wieder im Normalmodus. Zu diesem Modus zählen des Weiteren die Kommandos / (Textmuster vorwärts suchen), ? (Textmuster rückwärts suchen) und das Filter-Kommando !, mit dem die UNIX-Kommandos “UNIX-Kommandos” (zum Beispiel sort) aufgerufen und auf den Text angewandt werden können.

Vim Normalmodus ESC ESC

Vim beenden & speichern (Kommandomodus)

  • :q beenden (quit)
  • :q! , :cq, SHIFT + ZQ beenden ohne zu speichern trotz Änderungen (cancel)
  • :wq , SHIFT + zz speichern (write) und beenden
  • :w aktueller Inhalt in Datei speichern
  • :w FILE.TXT speichert den Inhalt des Editors in die Datei FILE.TXT
  • :w !sudo tee FILE.TXT speichert die Datei mit dem vorangehenden sudo Aufruf

Multiplikator

:help motion-count-multiplied

Zu einem Befehl kann noch eine Zahl eingegeben werden, dann wird der Befehl entsprechend oft wiederholt.
Beispiele

  1. Wurde eine Zeile mit yy (yank) in den Zwischenspeicher kopiert, dann wird sie mit 5p 5x darunter eingefügt.
  2. Sollen die nächsten 7 Zeichen rechts gelöscht werden : 7x
  3. Sollen ab der aktuellen Position die nächsten 3 Wörter gelöscht werden: 3dw
  4. Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden: 3diw (3x Delete Include Word)
  5. Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden und gleich in den Eingabemodus gewechselt werden: 3ciw (3x Change Include Word)
  6. Die nächsten 10 Zeilen löschen: 10dd

Navigieren / Motion

:help motion
:help scroll-cursor
  • Pfeiltasten , hjkl links, runter, hoch, rechts . Die Pfeiltasten hjkl sind sehr wichtig bei der Nutzung von Multiplikatoren.
  • j und k bei diesen runter und hoch “Movement” Bewegungs-Tasten ist noch wichtig zu wissen, dass sie immer Zeilenweise interpretiert werden. Wenn also eine Multiline, also eine Zeile, die wegen ihrer Länge mehrfach umgebrochen wird, vorhanden ist, dann springt der Cursor visuell mehrere Zeilen runter oder hoch! Aber soll der Cursor visuell zwischen den Zeilen bewegt werden und damit im Prinzip innerhalb EINER Zeile, so geht das mit der zusätzlichen Taste g und damit mit gj und gk . Hier ist visuell nicht mit dem VISUAL Mode von vim zu verwechseln.
  • gj / gk Zeilenweise runter oder Zeilenweise hoch bei umgebrochenen Zeilen. Beispiel: g4j springt 4 visuelle Zeilen runter und g7k springt 7 visuelle Zeilen hoch
  • g0 / g$ analog zum an den Anfang / Ende der visuellen Zeile zu springen
  • Bild hoch , Bild runter Eine Seite hoch / runter
  • Pos1 , 0 an den Zeilenanfang springen
  • ^ springt an den Zeilenanfang auf das erste Zeichen, das kein Leerzeichen oder Tab ist
  • Ende , $ an das Zeilenende springen
  • w ein Wort nach rechts springen (Wortanfang)
  • SHIFT +w also groß W springt bis zum nächsten Wort (Ausdruck), der durch ein Leerzeichen zum vorherigen Wort (Ausdruck) getrennt ist. z.B. springt W hier vom Anfang von Let.me.out() Thanks direkt auf das T von Thanks.
  • e an das Ende eines Wortes, auf den letzten Buchstaben springen (Wortende)
  • b ein Wort nach links springen (Wortanfang)
  • ) einen Satz vorwärts springen
  • ( einen Satz rückwärts springen
  • SHIFT + h zur ersten Zeile des aktuellen Fensters springen
  • SHIFT + m in die Mitte des aktuellen Fensters springen
  • SHIFT + l in die letzte Zeile des aktuellen Fensters springen
  • STRG + d einen halben Bildschirm runter blättern (down)
  • STRG + u einen halben Bildschirm hoch blättern (up)
  • gg an den Datei Anfang springen
  • SHIFT + g an das Datei Ende springen
  • : + ZAHL springt in die Zeile ZAHL
  • f + ZEICHEN springt zum nächsten Vorkommen des Zeichens
  • SHIFT+ f + ZEICHEN springt zum vorherigen Vorkommen des Zeichens
  • z + ENTER oder zt aktuelle Zeile in die erste Zeile des Displays scrollen (top)
  • zz oder z. aktuelle Zeile in die Mitte des Bildschirms scrollen
  • z- oder zb aktuelle Zeile an den unteren Rand scrollen (bottom)

Marks (Bookmarks)

:help bookmark

Bookmarks sind einzelne Zeichen von a-z und A-Z die im Text gesetzt werden können, um schnell hin und her zu springen.

  • m + ZEICHEN einen Marker setzen. z.B. mb setzt den Marker b
  • ' + ZEICHEN zu einem Marker springen . z.B. 'b springt zum Marker b
    • Das ' ist das Zeichen auf einer deutschen Tastatur auf dem #

Undo & Redo

:help undo
  • u Undo (Rückgängig machen)
  • SHIFT + u Undo alle Änderungen, die zuletzt in der aktuellen Zeile gemacht wurden
  • STRG + R Redo
  • :undolist zeigt den Verlauf der letzten Änderungen, die rückgängig gemacht werden können. Dabei zeigt die Nummer den Index der Veränderung, die direkt ausgewählt werden kann. Changes zeigt an, wieviele Veränderungen gemacht wurden und die Uhrzeit, wann die Veränderungen gemacht wurden.
  • NUMMER + STRG + r macht die Veränderung mit der Index NUMMER wieder rückgängig
  • Plugins wie undotree oder mundo machen das Undo & Redo sehr übersichtlich und einfacher

Copy & Paste

  • y Kopieren (yank)
  • yy Ganze Zeile kopieren
  • p vor dem aktuellen Cursor einfügen, oder Zeile
  • Shift + p nach dem aktuellen Cursor einfügen, oder Zeile
  • Zwischenablage / Clipboard (FAQ System Clipboard !)
  • "*y , "+y in den System Zwischenspeicher kopieren
  • "*p , "+p aus den System Zwischenspeicher einfügen. Analog "* oder "+ + SHIFT + p
  • Register / Vim interne Zwischenablage
    • Vim unterstützt von a-z 48 verschiedene Register (Zwischenablagen). So können unterschiedliche Dinge in verschiedene Register kopiert und an anderer Stelle in gleicher oder neuer Reihenfolge eingefügt werden.
    • Das Register wird mit " eingeleitet und der folgende Buchstabe a-z definiert in welchem Register der Inhalt gespeichert werden soll
  • "gyy kopiert die aktuelle Zeile ins Register g
  • "gp fügt den Inhalt aus dem Register ab dem aktuellen Cursor ein

Register / Zwischenspeicher 48 :registers

:help registers

  • Auszüge aus dem Hilfedokument
  • :registers zeigt alle Register an. :registers ZEICHEN zeigt das Register ZEICHEN an
  • STRG + r + REGISTER fügt im Insertmodus den Inhalt von REGISTER direkt ein.
  • "" (unnamed) Standardregister in das alles rein kopiert wird, was mit dcsx gelöscht oder mit y kopiert wurde
  • "a-z (named) mit einem großen A-Z wird das Kopierte an das a-z Register angehängt. Zusammen mit einem > wird vor dem Anhängen ein Zeilenumbruch eingefügt.
  • "0-9 (numbered) In Register 0 wird immer der zuletzt kopierte (yank) Inhalt. In Register 1 steht immer der zuletzt gelöschte Inhalt dc
  • "- Im Small Delete Register steht immer der zuletzt gelöschte Inhalt, wenn es weniger als eine Zeile war
  • Read-Only
    • ". enthält immer den zuletzt eingefügten Text
    • "% enthält den Dateinamen
    • ": enthält den zuletzt eingegeben Befehl
  • "* , "+ , "~ Zwischenspeicher / Clipboard . "~ ist der Inhalt des letzten Drag’n’Drop auf das Vim Fenster
  • "_ (black hole) bei einem Löschvorgang wird nichts in Register gespeichert
  • "/ (last search) enthält den Text der letzten Suche

Makros / Recording q

:help recording
  • MAKRO AUFZEICHNEN
    • q + a-z mit q wird das Recording gestartet und das nächste Zeichen z.b. a ist der Name des Makros. Also qa startet die Aufnahmen von Makro a
    • Mit dem erneuten Drücken der Taste q wird die Aufzeichnung des Makros beendet
  • MAKRO ABSPIELEN / AUFRUFEN
    • @ + a-z mit z.B. @a wird das Makro a abgespielt bzw ausgeführt
    • Mit @@ wird das Makro wiederholt
    • mit 10@a wird das Makro 10x hintereinander ausgeführt
  • MAKROS EDITIEREN
    • Makros werden als normaler Text in Registern gespeichert
    • Das REGISTER am besten in eine leere Zeile einfügen, weil nach dem Editieren einfach direkt die gesamte Zeile wieder im Register gespeichert werden kann " + REGISTERNUMMER + p z.B. "4p
    • Die Zeile editieren und (die gesamte Zeile) wieder zurück in das Register schreiben " + 4 + yy
    • Zur Kontrolle kann :registers oder :registers 4 eingegeben werden
    • Ein Makro kann einfach gelöscht werden, indem nichts aufgezeichnet wird. Z.b. Makro a = q4q
  • STEUERUNGZEICHEN EINGEBEN
    • Im Eingabemodus STRG + v + TASTE z.B. Enter/Return, ESC, F2, Backspace ….
  • REKURSIVE MAKROS
    • Im Makro selbst das Makro aufrufen
    • Läuft solange, bis es auf einen Fehler aufläuft

Autovervollständigung :abbr

  • :abbr + abkrz + AUSGESCHRIEBENER BEGRIFF wenn im Einfügemodus der Begriff abkrz und Leertaste (oder Enter, dann mit Zeilenumbruch) eingegeben wird, erscheint der AUSGESCHRIEBENER BEGRIFF
  • Beispiel: :abbr zb Zum Beispiel

Groß-/Kleinschreibung

  • ZEICHEN
    • ~ ändert das aktuelle Zeichen auf Groß oder Klein
  • WORT
    • g~w Invertiert die Groß-/Kleinschreibung des aktuellen Wortes
    • guw Ändert von der aktuellen Position bis zum Ende des Worts von Groß- auf Kleinschreibung
    • guaw Ändert das gesamte Wort auf Kleinschreibung. Egal auf welcher Position der Cursor ist
    • gUw Ändert von der aktuellen Position bis zum Ende des Worts von Klein- auf Großschreibung
    • gUaw Ändert das gesamte Wort auf Großschreibung. Egal auf welcher Position der Cursor ist
  • ZEILE
    • guu Ändert die aktuelle Zeile von Groß- auf Kleinschreibung
    • gUU Ändert die aktuelle Zeile von Klein- auf Großschreibung
    • g~~ Invertiert die Groß-/Kleinschreibung der gesamten Zeile
    • gU5jÄndert die darunter liegenden Zeilen zu Großschreibung
    • gu3k Ändert die darüber liegenden Zeilen zu Großschreibung
  • SATZ
    • gU)Ändert alles zu Großschreibung bis zum Ende des Satzes
  • SATZ alle Wörter am Anfang groß geschrieben
    • s/\<./\u&/g
      • s/ ... / Such Funktion
      • \< springt an den Anfang eines Wortes
      • . selektiert das erste Zeichen des Wortes
      • \u Befehl um das folgende Zeichen des Ersetzungs-Strings in der Variable & in Großschreibung umzuwandeln
      • & Variable für den String aus . der ersetzt werden soll.
      • g ersetzt alle gefundenen Treffer. Nicht nur den ersten Treffer.
  • ABSATZ
    • gu} Ändert alles bis zum Ende des Absatzes zu Kleinschreibung
  • DOKUMENT
    • guG Ändert alles zu Kleinschreibung bis zum Ende des Dokumentes
    • Alle Anfangsbuchstaben groß
      • s/\<./\u&/g ändert alle Anfangsbuchstaben im gesamten Dokument um in Großbuchstaben. Kann mit Visual Markierung oder anderen Markern lokal eingegrenzt werden.
        \< sucht den Anfang eines Wortes
        . positioniert den ersten Buchstaben eines Wortes
        \u der nachfolgende Buchstabe des “substition Strings” soll in einen Großbuchstaben umgewandelt werden (&)
        & der “Substition String” der gefunden wurde
        g soll ALLE gefundenen Treffer umwandeln und nicht nur den ersten

Auswählen/Markieren

  • v Zeichenweise
  • SHIFT + v + Pfeiltasten Zeilenweise
  • STRG + v + Pfeiltasten Vertikal
  • Beispiele: 10v markiert 10 Zeichen, 3wv markiert 3 Wörter, )vy markiert bis zum Ende des Satzes und kopiert ihn in den Zwischenspeicher/Register.

Löschen & entfernen

  • x Zeichen unter dem Cursor löschen
  • SHIFT + x Zeichen links vom Cursor löschen
  • DELETE & CHANGE
    • Gelöscht werden kann mit d (delete) oder c (change). Bei d bleibt Vim im Normalmodus und bei c wird nach dem Löschen in den Eingabemodus gewechselt und es kann direkt mit der Eingabe begonnen werden.
  • dd löscht die komplette Zeile
  • dw , cw löscht das Wort rechts
  • dip , cip Lösche nur den Absatz
  • dap , cap Lösche den Absatz und die nachfolgenden Leerzeilen
  • g/^$/d Lösche alle leeren Zeilen im Dokumente ^ Anfang und $ Ende der Zeile liegen “nebeneinander”
  • :5,20d/^$/ alle leeren Zeilen zwischen Zeile 5 und Zeile 20 löschen

Suchen

  • /Suchbegriff vorwärts suchen. Vim zeigt den ersten Fundort an. Soll der nächste Fundort angesprungen werden muss die Taste n (Next) oder * gedrückt werden mit Shift + n oder # wird die Suche rückwärts ausgeführt.
  • ?Suchbegriff rückwärts suchen
  • Das Wort suchen, auf dem gerade der Cursor steht mit * (Stern)

Suchen mit Logik Operatoren UND und ODER

  • \& UND Verknüpfung: Um eine Zeile zu finden, die zwei Suchbegriffe enthält, die aber nicht unbedingt nebeneinander stehen, also eine UND Verknüpfung wie zum Beispiel Herr und ins im Satz “Herr Müller geht gerne ins Schwimmbad” funktioniert folgendes Beispiel
    /.*Herr\&.*ins
    vor jedem Suchbegriff MUSS .* eingegeben werden und
  • \| ODER Verknüpfung: Um den einen ODER den anderen Suchbegriff in EINER Zeile zu finden, wird der Operator \| (das senkrechte Pipesymbol) benutzt. Zum Beispiel /.*Herr\&|.*ins in jeder Zeile nach Herr ODER ins
  • Wenn gleich GLOBAL in der gesamten Datei gesucht und gehighlighted werden soll, dann muss die Suche mit :g begonnen werden. Also zum Beispiel :g/.*Herr\&.*ins
  • Die Metacharakter + * . ? usw weiter im Artikel “ttrss Label, Filter & Strategien” genauer erklärt.

Suchen und Ersetzen

: [range]substitude/SUCHE/ERSETZE/[flags][count]

  • %s/SUCHE/ERSETZE/g Suche im ganzen (%) Dokument nach SUCHE und ersetze alle Vorkommen automatisch (g - global) mit ERSETZE
  • 3,40s/SUCHE/ERSETZE/g Suche von Zeile 3 bis Zeile 40 …
  • 23,$s/SUCHE/ERSETZE/g Suche von Zeile 23 bis Dateiende ($) …
  • %s/SUCHE/ERSETZE/ Suche und ersetze im ganzen Dokument und frage jedes Mal nach (fehlendes g am Schluß)
  • g/^$/d Lösche alle leeren Zeilen im Dokumente ^ Anfang und $ Ende der Zeile liegen “nebeneinander”
  • :5,20d/^$/ alle leeren Zeilen zwischen Zeile 5 und Zeile 20 löschen
  • Ausführlicher Artikel Suchen & Ersetzen mit Vim

Vim Command Modus

Datei laden

  • :e Öffnet den Dateibrowser. Bei Auswahl mit der Entertaste wird die Datei in das aktuelle Fenster geladen.
  • :e FILE.TXT öffnet direkt die Datei in das aktuelle Fenster
  • :Sex Teilt das Fenster horizontal in ein weiteres Fenster mit einem Dateibrowser
  • :Vex Teilt das Fenster vertikal in ein weiteres Fenster mit einem Dateibrowser

Fenstermanagement

  • :tabnew Neues Fenster in neuem Tab
    • :tabprev , gt gehe zum nächsten Tab
    • :tabnext , gT gehe zum vorherigen Tab
      • Bessere Lesbarkeit der Tabs
      • :hi tablinesel ctermbg=darkblue ctermfg=white
      • :hi tabline ctermbg=black ctermfg=green
    • Hilfe :help tabpage
  • :new Neues Fenster horizontal
  • :split Aktuelles Fenster horizontal teilen
  • :vsplit Aktuelles Fenster vertikal teilen
  • STRG + ww wechselt zum nächsten Fenster und rotiert bei Wiederholung durch alle Fenster
  • STRG + w mit sind die Pfeiltasten gemeint, oder auch hjkl mit denen direkt in das entsprechende Fenster gewechselt werden kann.
    Zum Beispiel
    • STRG + wl wechselt in das linke Fenster
    • STRG + wj in das untere Fenster
    • STRG + w in das linke Fenster.
    • :ls die offenen Buffer (Fenster/Tabs) anzeigen lassen

Session Management

  • vim -S startet Vim wieder mit der zuletzt gespeicherten Session (aus der Session.vim Datei)
  • :mks! speichert die aktuelle Session in der Session.vim Datei

FAQ

  1. Paste Modes (Einfüge Modi)
    :set paste deaktiviert einige Automatismen, so dass eingefügte Daten z.B. ihre Struktur erhalten und nicht umformatiert werden. :set nopaste deaktiviert dieses Verhalten wieder.
    Hilfen :help paste , :help pastetoggle
  2. System Clipboard (Zwischenablage) Copy&Paste - Interaktion
    Damit "* und "+ funktioniert, muss ein Vim Paket mit grafischer Unterstützung installiert sein, in das die Option +clipboard mit eincompiliert wurde.
    Unter Linux mit einem X11 System repräsentiert "* die Option, womit der Inhalt mit der mittleren Maustaste an die aktuelle Stelle eingefügt werden kann.
    Um zu prüfen, ob die aktuelle Vim Installation den Austausch mit dem System Clipboard unterstützt: Im Normalmodus :echo has('clipboard') und ENTER eingeben. Wenn als Ergebnis eine 0 heraus kommt, wird es nicht unterstützt.
    Durch die Installation des Paketes vim-gtk3 (Ubuntu) wird Copy&Paste unterstützt.
    Hilfen :help clipboard , :help registers , :help cb (Current Buffer)

Weitere Vim Artikel hier im Blog.

Quellen

  1. https://de.wikipedia.org/wiki/Vim
  2. https://wiki.ubuntuusers.de/VIM/
  3. Einführung zu Vim - Tutorials Deutsch https://www.youtube.com/playlist?list=PLZ0CUq-i3Io9dAIKsHNwNAnTeKXamcQ5N
  4. Vim Tricks Live Coding auf Deutsch mit Daniel Siepmann https://youtu.be/P5tAKRVYj4E
  5. Register und Makros in Vim (clt23) Info Seite / Video

Weitere Artikel hier zu vim

Weitere Vim Artikel hier im Blog.

Vim Modi

Erklärung

Vim ist ein modaler Editor. Dies bedeutet, dass man in unterschiedlichen Modi arbeitet, was Einsteigern oft Probleme bereitet, andererseits aber eine sehr große Zahl von Tastenkürzeln erlaubt, da sich diese an einzelne Modi binden und daher auch mehrfach belegen lassen.
Es gibt sechs Grundmodi. Zusätzlich gibt es noch fünf weitere Grundvarianten der Grundmodi.

Normalmodus ESC

Vim startet im Normalmodus, oft auch als Kommando- oder Befehlsmodus bezeichnet. Hier kann man über Tastenkürzel zum Beispiel Zeilen kopieren und verschieben oder Text formatieren. Dies ist der zentrale Modus, von dem in alle anderen Modi gewechselt wird. Durch das zweifache Drücken der Esc-Taste gelangt man immer in den Normalmodus zurück.

Der Punkt . wiederholt immer den letzten eingegebenen Befehl.

Einfügemodus / Insert

Im Einfügemodus verändern Tastatureingaben den editierten Text, so wie man es von anderen Editoren kennt. Man erreicht diesen Modus vom Normalmodus aus zum Beispiel über i (für engl. insert = einfügen).

Kommandomodus / Command

Vom Normalmodus ausgehend! Dieser Modus wird durch den einleitenden Doppelpunkt : erreicht. Hinter dem Doppelpunkt können dann komplexe Kommandos wie beispielsweise zum Suchen und Ersetzen eingegeben werden. Nach dem abschließenden Enter „Eingabetaste“ wird der Befehl ausgeführt und man befindet sich wieder im Normalmodus. Zu diesem Modus zählen des Weiteren die Kommandos / (Textmuster vorwärts suchen), ? (Textmuster rückwärts suchen) und das Filter-Kommando !, mit dem die UNIX-Kommandos „UNIX-Kommandos“ (zum Beispiel sort) aufgerufen und auf den Text angewandt werden können.

Vim Normalmodus ESC ESC

Vim beenden & speichern (Kommandomodus)

  • :q beenden (quit)
  • :q! , :cq, SHIFT + ZQ beenden ohne zu speichern trotz Änderungen (cancel)
  • :wq , SHIFT + zz speichern (write) und beenden
  • :w aktueller Inhalt in Datei speichern
  • :w FILE.TXT speichert den Inhalt des Editors in die Datei FILE.TXT
  • :w !sudo tee FILE.TXT speichert die Datei mit dem vorangehenden sudo Aufruf

Multiplikator

:help motion-count-multiplied

Zu einem Befehl kann noch eine Zahl eingegeben werden, dann wird der Befehl entsprechend oft wiederholt.
Beispiele

  1. Wurde eine Zeile mit yy (yank) in den Zwischenspeicher kopiert, dann wird sie mit 5p 5x darunter eingefügt.
  2. Sollen die nächsten 7 Zeichen rechts gelöscht werden : 7x
  3. Sollen ab der aktuellen Position die nächsten 3 Wörter gelöscht werden: 3dw
  4. Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden: 3diw (3x Delete Include Word)
  5. Soll ab der aktuellen Position mitten in einem Wort, insgesamt 3 Wörter gelöscht werden und gleich in den Eingabemodus gewechselt werden: 3ciw (3x Change Include Word)
  6. Die nächsten 10 Zeilen löschen: 10dd

Navigieren / Motion

:help motion
:help scroll-cursor
  • Pfeiltasten , hjkl links, runter, hoch, rechts . Die Pfeiltasten hjkl sind sehr wichtig bei der Nutzung von Multiplikatoren.
  • j und k bei diesen runter und hoch „Movement“ Bewegungs-Tasten ist noch wichtig zu wissen, dass sie immer Zeilenweise interpretiert werden. Wenn also eine Multiline, also eine Zeile, die wegen ihrer Länge mehrfach umgebrochen wird, vorhanden ist, dann springt der Cursor visuell mehrere Zeilen runter oder hoch! Aber soll der Cursor visuell zwischen den Zeilen bewegt werden und damit im Prinzip innerhalb EINER Zeile, so geht das mit der zusätzlichen Taste g und damit mit gj und gk . Hier ist visuell nicht mit dem VISUAL Mode von vim zu verwechseln.
  • gj / gk Zeilenweise runter oder Zeilenweise hoch bei umgebrochenen Zeilen. Beispiel: g4j springt 4 visuelle Zeilen runter und g7k springt 7 visuelle Zeilen hoch
  • g0 / g$ analog zum an den Anfang / Ende der visuellen Zeile zu springen
  • Bild hoch , Bild runter Eine Seite hoch / runter
  • Pos1 , 0 an den Zeilenanfang springen
  • ^ springt an den Zeilenanfang auf das erste Zeichen, das kein Leerzeichen oder Tab ist
  • Ende , $ an das Zeilenende springen
  • w ein Wort nach rechts springen (Wortanfang)
  • SHIFT +w also groß W springt bis zum nächsten Wort (Ausdruck), der durch ein Leerzeichen zum vorherigen Wort (Ausdruck) getrennt ist. z.B. springt W hier vom Anfang von Let.me.out() Thanks direkt auf das T von Thanks.
  • e an das Ende eines Wortes, auf den letzten Buchstaben springen (Wortende)
  • b ein Wort nach links springen (Wortanfang)
  • ) einen Satz vorwärts springen
  • ( einen Satz rückwärts springen
  • SHIFT + h zur ersten Zeile des aktuellen Fensters springen
  • SHIFT + m in die Mitte des aktuellen Fensters springen
  • SHIFT + l in die letzte Zeile des aktuellen Fensters springen
  • STRG + d einen halben Bildschirm runter blättern (down)
  • STRG + u einen halben Bildschirm hoch blättern (up)
  • gg an den Datei Anfang springen
  • SHIFT + g an das Datei Ende springen
  • : + ZAHL springt in die Zeile ZAHL
  • f + ZEICHEN springt zum nächsten Vorkommen des Zeichens
  • SHIFT+ f + ZEICHEN springt zum vorherigen Vorkommen des Zeichens
  • z + ENTER oder zt aktuelle Zeile in die erste Zeile des Displays scrollen (top)
  • zz oder z. aktuelle Zeile in die Mitte des Bildschirms scrollen
  • z- oder zb aktuelle Zeile an den unteren Rand scrollen (bottom)

Marks (Bookmarks)

:help bookmark

Bookmarks sind einzelne Zeichen von a-z und A-Z die im Text gesetzt werden können, um schnell hin und her zu springen.

  • m + ZEICHEN einen Marker setzen. z.B. mb setzt den Marker b
  • ' + ZEICHEN zu einem Marker springen . z.B. 'b springt zum Marker b
    • Das ' ist das Zeichen auf einer deutschen Tastatur auf dem #

Undo & Redo

:help undo
  • u Undo (Rückgängig machen)
  • SHIFT + u Undo alle Änderungen, die zuletzt in der aktuellen Zeile gemacht wurden
  • STRG + R Redo
  • :undolist zeigt den Verlauf der letzten Änderungen, die rückgängig gemacht werden können. Dabei zeigt die Nummer den Index der Veränderung, die direkt ausgewählt werden kann. Changes zeigt an, wieviele Veränderungen gemacht wurden und die Uhrzeit, wann die Veränderungen gemacht wurden.
  • NUMMER + STRG + r macht die Veränderung mit der Index NUMMER wieder rückgängig
  • Plugins wie undotree oder mundo machen das Undo & Redo sehr übersichtlich und einfacher

Copy & Paste

  • y Kopieren (yank)
  • yy Ganze Zeile kopieren
  • p vor dem aktuellen Cursor einfügen, oder Zeile
  • Shift + p nach dem aktuellen Cursor einfügen, oder Zeile
  • Zwischenablage / Clipboard (FAQ System Clipboard !)
  • "*y , "+y in den System Zwischenspeicher kopieren
  • "*p , "+p aus den System Zwischenspeicher einfügen. Analog "* oder "+ + SHIFT + p
  • Register / Vim interne Zwischenablage
    • Vim unterstützt von a-z 48 verschiedene Register (Zwischenablagen). So können unterschiedliche Dinge in verschiedene Register kopiert und an anderer Stelle in gleicher oder neuer Reihenfolge eingefügt werden.
    • Das Register wird mit " eingeleitet und der folgende Buchstabe a-z definiert in welchem Register der Inhalt gespeichert werden soll
  • "gyy kopiert die aktuelle Zeile ins Register g
  • "gp fügt den Inhalt aus dem Register ab dem aktuellen Cursor ein

Register / Zwischenspeicher 48 :registers

:help registers

  • Auszüge aus dem Hilfedokument
  • :registers zeigt alle Register an. :registers ZEICHEN zeigt das Register ZEICHEN an
  • STRG + r + REGISTER fügt im Insertmodus den Inhalt von REGISTER direkt ein.
  • "" (unnamed) Standardregister in das alles rein kopiert wird, was mit dcsx gelöscht oder mit y kopiert wurde
  • "a-z (named) mit einem großen A-Z wird das Kopierte an das a-z Register angehängt. Zusammen mit einem > wird vor dem Anhängen ein Zeilenumbruch eingefügt.
  • "0-9 (numbered) In Register 0 wird immer der zuletzt kopierte (yank) Inhalt. In Register 1 steht immer der zuletzt gelöschte Inhalt dc
  • "- Im Small Delete Register steht immer der zuletzt gelöschte Inhalt, wenn es weniger als eine Zeile war
  • Read-Only
    • ". enthält immer den zuletzt eingefügten Text
    • "% enthält den Dateinamen
    • ": enthält den zuletzt eingegeben Befehl
  • "* , "+ , "~ Zwischenspeicher / Clipboard . "~ ist der Inhalt des letzten Drag’n’Drop auf das Vim Fenster
  • "_ (black hole) bei einem Löschvorgang wird nichts in Register gespeichert
  • "/ (last search) enthält den Text der letzten Suche

Makros / Recording q

:help recording
  • MAKRO AUFZEICHNEN
    • q + a-z mit q wird das Recording gestartet und das nächste Zeichen z.b. a ist der Name des Makros. Also qa startet die Aufnahmen von Makro a
    • Mit dem erneuten Drücken der Taste q wird die Aufzeichnung des Makros beendet
  • MAKRO ABSPIELEN / AUFRUFEN
    • @q + a-z mit z.B. @qa wird das Makro a abgespielt bzw ausgeführt
    • Mit @@ wird das Makro wiederholt
    • mit 10@qa wird das Makro 10x hintereinander ausgeführt
  • MAKROS EDITIEREN
    • Makros werden als normaler Text in Registern gespeichert
    • Das REGISTER am besten in eine leere Zeile einfügen, weil nach dem Editieren einfach direkt die gesamte Zeile wieder im Register gespeichert werden kann " + REGISTERNUMMER + p z.B. "4p
    • Die Zeile editieren und (die gesamte Zeile) wieder zurück in das Register schreiben " + 4 + yy
    • Zur Kontrolle kann :registers oder :registers 4 eingegeben werden
    • Ein Makro kann einfach gelöscht werden, indem nichts aufgezeichnet wird. Z.b. Makro a = q4q
  • STEUERUNGZEICHEN EINGEBEN
    • Im Eingabemodus STRG + v + TASTE z.B. Enter/Return, ESC, F2, Backspace ….
  • REKURSIVE MAKROS
    • Im Makro selbst das Makro aufrufen
    • Läuft solange, bis es auf einen Fehler aufläuft

Autovervollständigung :abbr

  • :abbr + abkrz + AUSGESCHRIEBENER BEGRIFF wenn im Einfügemodus der Begriff abkrz und Leertaste (oder Enter, dann mit Zeilenumbruch) eingegeben wird, erscheint der AUSGESCHRIEBENER BEGRIFF
  • Beispiel: :abbr zb Zum Beispiel

Groß-/Kleinschreibung

  • ZEICHEN
    • ~ ändert das aktuelle Zeichen auf Groß oder Klein
  • WORT
    • g~w Invertiert die Groß-/Kleinschreibung des aktuellen Wortes
    • guw Ändert von der aktuellen Position bis zum Ende des Worts von Groß- auf Kleinschreibung
    • guaw Ändert das gesamte Wort auf Kleinschreibung. Egal auf welcher Position der Cursor ist
    • gUw Ändert von der aktuellen Position bis zum Ende des Worts von Klein- auf Großschreibung
    • gUaw Ändert das gesamte Wort auf Großschreibung. Egal auf welcher Position der Cursor ist
  • ZEILE
    • guu Ändert die aktuelle Zeile von Groß- auf Kleinschreibung
    • gUU Ändert die aktuelle Zeile von Klein- auf Großschreibung
    • g~~ Invertiert die Groß-/Kleinschreibung der gesamten Zeile
    • gU5jÄndert die darunter liegenden Zeilen zu Großschreibung
    • gu3k Ändert die darüber liegenden Zeilen zu Großschreibung
  • SATZ
    • gU)Ändert alles zu Großschreibung bis zum Ende des Satzes
  • ABSATZ
    • gu} Ändert alles bis zum Ende des Absatzes zu Kleinschreibung
  • DOKUMENT
    • guG Ändert alles zu Kleinschreibung bis zum Ende des Dokumentes
    • Alle Anfangsbuchstaben groß
      • s/\<./\u&/g ändert alle Anfangsbuchstaben im gesamten Dokument um in Großbuchstaben. Kann mit Visual Markierung oder anderen Markern lokal eingegrenzt werden.
        \< sucht den Anfang eines Wortes
        . positioniert den ersten Buchstaben eines Wortes
        \u der nachfolgende Buchstabe des „substition Strings“ soll in einen Großbuchstaben umgewandelt werden (&)
        & der „Substition String“ der gefunden wurde
        g soll ALLE gefundenen Treffer umwandeln und nicht nur den ersten

Auswählen/Markieren

  • v Zeichenweise
  • SHIFT + v + Pfeiltasten Zeilenweise
  • STRG + v + Pfeiltasten Vertikal
  • Beispiele: 10v markiert 10 Zeichen, 3wv markiert 3 Wörter, )vy markiert bis zum Ende des Satzes und kopiert ihn in den Zwischenspeicher/Register.

Löschen & entfernen

  • x Zeichen unter dem Cursor löschen
  • SHIFT + x Zeichen links vom Cursor löschen
  • DELETE & CHANGE
    • Gelöscht werden kann mit d (delete) oder c (change). Bei d bleibt Vim im Normalmodus und bei c wird nach dem Löschen in den Eingabemodus gewechselt und es kann direkt mit der Eingabe begonnen werden.
  • dd löscht die komplette Zeile
  • dw , cw löscht das Wort rechts
  • dip , cip Lösche nur den Absatz
  • dap , cap Lösche den Absatz und die nachfolgenden Leerzeilen

Suchen

  • /Suchbegriff<ENTER> vorwärts suchen. Vim zeigt den ersten Fundort an. Soll der nächste Fundort angesprungen werden muss die Taste n (Next) oder * gedrückt werden mit Shift + n oder # wird die Suche rückwärts ausgeführt.
  • ?Suchbegriff<ENTER> rückwärts suchen
  • Das Wort suchen, auf dem gerade der Cursor steht mit * (Stern)

Suchen mit Logik Operatoren UND und ODER

  • \& UND Verknüpfung: Um eine Zeile zu finden, die zwei Suchbegriffe enthält, die aber nicht unbedingt nebeneinander stehen, also eine UND Verknüpfung wie zum Beispiel Herr und ins im Satz „Herr Müller geht gerne ins Schwimmbad“ funktioniert folgendes Beispiel
    /.*Herr\&.*ins
    vor jedem Suchbegriff MUSS .* eingegeben werden und
  • \| ODER Verknüpfung: Um den einen ODER den anderen Suchbegriff in EINER Zeile zu finden, wird der Operator \| (das senkrechte Pipesymbol) benutzt. Zum Beispiel /.*Herr\&|.*ins in jeder Zeile nach Herr ODER ins
  • Wenn gleich GLOBAL in der gesamten Datei gesucht und gehighlighted werden soll, dann muss die Suche mit :g begonnen werden. Also zum Beispiel :g/.*Herr\&.*ins

Vim Command Modus

Datei laden

  • :e Öffnet den Dateibrowser. Bei Auswahl mit der Entertaste wird die Datei in das aktuelle Fenster geladen.
  • :e FILE.TXT öffnet direkt die Datei in das aktuelle Fenster
  • :Sex Teilt das Fenster horizontal in ein weiteres Fenster mit einem Dateibrowser
  • :Vex Teilt das Fenster vertikal in ein weiteres Fenster mit einem Dateibrowser

Fenstermanagement

  • :tabnew Neues Fenster in neuem Tab
    • :tabprev , gt gehe zum nächsten Tab
    • :tabnext , gT gehe zum vorherigen Tab
      • Bessere Lesbarkeit der Tabs
      • :hi tablinesel ctermbg=darkblue ctermfg=white
      • :hi tabline ctermbg=black ctermfg=green
    • Hilfe :help tabpage
  • :new Neues Fenster horizontal
  • :split Aktuelles Fenster horizontal teilen
  • :vsplit Aktuelles Fenster vertikal teilen
  • STRG + ww wechselt zum nächsten Fenster und rotiert bei Wiederholung durch alle Fenster
  • STRG + w<N> mit <N> sind die Pfeiltasten gemeint, oder auch hjkl mit denen direkt in das entsprechende Fenster gewechselt werden kann.
    Zum Beispiel
    • STRG + wl wechselt in das linke Fenster
    • STRG + wj in das untere Fenster
    • STRG + w<Pfeiltaste links> in das linke Fenster.
    • :ls die offenen Buffer (Fenster/Tabs) anzeigen lassen

Session Management

  • vim -S startet Vim wieder mit der zuletzt gespeicherten Session (aus der Session.vim Datei)
  • :mks! speichert die aktuelle Session in der Session.vim Datei

FAQ

  1. Paste Modes (Einfüge Modi)
    :set paste deaktiviert einige Automatismen, so dass eingefügte Daten z.B. ihre Struktur erhalten und nicht umformatiert werden. :set nopaste deaktiviert dieses Verhalten wieder.
    Hilfen :help paste , :help pastetoggle
  2. System Clipboard (Zwischenablage) Copy&Paste – Interaktion
    Damit "* und "+ funktioniert, muss ein Vim Paket mit grafischer Unterstützung installiert sein, in das die Option +clipboard mit eincompiliert wurde.
    Unter Linux mit einem X11 System repräsentiert "* die Option, womit der Inhalt mit der mittleren Maustaste an die aktuelle Stelle eingefügt werden kann.
    Um zu prüfen, ob die aktuelle Vim Installation den Austausch mit dem System Clipboard unterstützt: Im Normalmodus :echo has('clipboard') und ENTER eingeben. Wenn als Ergebnis eine 0 heraus kommt, wird es nicht unterstützt.
    Durch die Installation des Paketes vim-gtk3 (Ubuntu) wird Copy&Paste unterstützt.
    Hilfen :help clipboard , :help registers , :help cb (Current Buffer)

Weitere Vim Artikel hier im Blog.

Quellen

  1. https://de.wikipedia.org/wiki/Vim
  2. https://wiki.ubuntuusers.de/VIM/
  3. Einführung zu Vim – Tutorials Deutsch https://www.youtube.com/playlist?list=PLZ0CUq-i3Io9dAIKsHNwNAnTeKXamcQ5N
  4. Vim Tricks Live Coding auf Deutsch mit Daniel Siepmann https://youtu.be/P5tAKRVYj4E
  5. Register und Makros in Vim (clt23) Info Seite / Video

Weitere hyperblog Artikel zum Thema

vim

Views: 145

The post Vim Cheat Sheet first appeared on Dem hoergen Blog.

11. September 2023

Mozilla hat die Release-Termine des kommenden Jahres für Firefox gegeben. Dieser Artikel fasst alle Termine für Firefox und Firefox ESR im Jahr 2024 übersichtlich zusammen.

Neue Major-Releases von Firefox erscheinen in der Regel alle vier Wochen. Auf diese Weise erreichen Neuerungen schneller den Endnutzer, der nicht viele Monate auf bereits implementierte Funktionen warten muss.

Mittlerweile hat Mozilla die Veröffentlichungstermine von Firefox für das Jahr 2024 offiziell bekannt gegeben.

Das sind die Firefox Release-Termine 2024

Firefox 122, Firefox ESR 115.7
23. Januar 2024 (5 Wochen nach Firefox 121)

Firefox 123, Firefox ESR 115.8
20. Februar 2024 (4 Wochen nach Firefox 122)

Firefox 124, Firefox ESR 115.9
19. März 2024 (4 Wochen nach Firefox 123)

Firefox 125, Firefox ESR 115.10
16. April 2024 (4 Wochen nach Firefox 124)

Firefox 126, Firefox ESR 115.11
14. Mai 2024 (4 Wochen nach Firefox 125)

Firefox 127, Firefox ESR 115.12
11. Juni 2024 (4 Wochen nach Firefox 126)

Firefox 128, Firefox ESR 128.0, Firefox ESR 115.13
09. Juli 2024 (4 Wochen nach Firefox 127)

Firefox 129, Firefox ESR 128.1, Firefox ESR 115.14
06. August 2024 (4 Wochen nach Firefox 128)

Firefox 130, Firefox ESR 128.2, Firefox ESR 115.15
03. September 2024 (4 Wochen nach Firefox 129)

Firefox 131, Firefox ESR 128.3
01. Oktober 2024 (4 Wochen nach Firefox 130)

Firefox 132, Firefox ESR 128.4
29. Oktober 2024 (4 Wochen nach Firefox 131)

Firefox 133, Firefox ESR 128.5
26. November 2024 (4 Wochen nach Firefox 132)

Firefox 134, Firefox ESR 128.6
07. Januar 2025 (6 Wochen nach Firefox 133)

Firefox 135, Firefox ESR 128.7
04. Februar 2025 (4 Wochen nach Firefox 134)

Der Beitrag Firefox: Release-Termine 2024 erschien zuerst auf soeren-hentzschel.at.

Die MZLA Technologies Corporation hat mit Thunderbird 115.2.1 ein Update für seinen Open Source E-Mail-Client veröffentlicht.

Neuerungen von Thunderbird 115.2.1

Mit dem Update auf Thunderbird 115.2.1 hat die MZLA Technologies Corporation ein Update für seinen Open Source E-Mail-Client veröffentlicht und behebt damit mehrere Probleme, welche sich in den Release Notes (engl.) nachlesen lassen.

Der Beitrag Thunderbird 115.2.1 veröffentlicht erschien zuerst auf soeren-hentzschel.at.

Im siebten Teil meiner losen Reihe über die RHEL System Roles stelle ich die Rolle rhc vor, mit welcher sich RHEL-Systeme (Version >= 8.6) in der Hybrid Cloud Console, Insights und dem RHSM registrieren lassen.

Das Tool rhc selbst habe ich bereits im Artikel Red Hat Remote Host Configuration ausführlich vorgestellt.

Anwendungsfall

Möchte man ein oder mehrere RHEL-Systeme in der Hybrid Cloud Console registrieren, kann man dazu die RHEL System Role rhc verwenden.

Die Rolle

Durch die Installation des Pakets rhel-system-roles existiert die Rolle rhc bereits auf meinem System und muss nur noch konfiguriert werden. Die Rolle selbst findet man im Pfad /usr/share/ansible/roles/rhel-system-roles.rhc/ und die Dokumentation in /usr/share/doc/rhel-system-roles/rhc/README.md.

Das Playbook

- name: Register systems
  hosts: all
  vars:
    rhc_auth:
      activation_keys:
        keys: ["key-1", ...]
    rhc_organization: "your-organization"
  roles:
    - rhel-system-roles.rhc
  • key-1 ist durch den eigenen Activation Key zu ersetzen
  • your-organization ist durch die eigene Org-ID zu ersetzen
  • Mit diesem Playbook werden die Hosts im RHSM und der Hybrid Cloud Console registriert
  • Die Systeme werden bei Insights registriert und laden regelmäßig aktuelle Daten hoch
  • Die Systeme werden für die Ausführung von Remediation Playbooks konfiguriert

Fazit

Mit dieser System Role ist es einfach möglich, eine große Anzahl Systeme in die Hybrid Cloud Console aufzunehmen. Dabei lässt sich konfigurieren, ob Funktionen wie Insights und Remediation Playbooks genutzt werden können.

Eine weitere tolle Rolle aus dem Paket rhel-system-roles, die sich einfach zur Anwendung bringen lässt.

Weiterführende Quellen und Links

  1. Red Hat Enterprise Linux (RHEL) System Roles {en}
  2. Ansible Documentation: Role Directory Structure {en}
  3. Red Hat Software and Download Center {en}
  4. Die Vorteile einer Red Hat Subskription
  5. RHEL System Roles: selinux
  6. RHEL System Roles: timesync
  7. RHEL System Roles: sshd
  8. RHEL System Roles: firewall
  9. RHEL System Roles: storage