TroLUG 2021-02#
https://bbb.daten.reisen/b/jon-mqr-zwu
Datum: 04.02.2021
Thema: Der Text-Editor [neo]vim
Dieser Abend soll dem Text-Editor Vim gewidmet sein. Es ist geplant, dass wir eine Reihe kurzer Vorträge haben, die jeweils spezielle Aspekt beleuchten. Die Vorträge sollen nicht länger als 10 Minuten sein.
Anmeldungen#
- Jan
- Georg/Georg
- Jonas
- Marcel
Michael
Maic
Thorsten hofft dabei sein zu können
Sandro
Das ist ein Beispiel für eine Agenda. Bis Anfang Februar kann jeder Vorschläge machen und sich zu bestimmten Vorträgen als Vortragender eintragen. Auch die Reihenfolge der Vorträge kann angepasst werden. So stellen wir gemeinsam unser Wunschprogramm zusammen.
Protokoll#
-
[Neo]vim Einführung (Jan)
-
vim 101: Navigation und grundlegende Kommandos (Georg)
Beschränke mich auf das absolute Grundwissen: Aufruf, 3 von 6 Modi: KOMMANDO-Modus, KommandoZEILEN-Modus und Editiermodus, Cursor-Navigation, insert, append, character delete, line delete, save & quit (Fingerübungen)
Beispieldatei in den Nano-Editor kopieren und unter “~/
– Start: Ab hier alles in Markdown –
Beispieldatei#
Menschen, die mit dem Zug verreißen möchten, trifft man am
Bahnhof. In der Schalderhalle können sich die Leute, die noch
ohne Fahrschein sind, eine Fahrkarte kaufen. Am Bahnhoff gibt
es viele Dinge, die vielleicht noch für die Reise eingekauft
werden müssen. In einem Plumengeschäft kann die Enkelin noch
einen Strauß Blumen für die Großmutter kaufen. In der Drogeri
können die Kunden Zahnbasta, Seife oder Rasierglingen kaufen.
können die Kunden Zahnbasta, Seife oder Rasierglingen kaufen.
In der Apoteke gibt es Kopfschmerztabletten, Hustensaft oder
Pflaster. Wer noch kein Reiseproviant hat, kann sich in einer
Beckerei ein belegtes Brötchen kaufen. Am Wurststand gibt es
heiße Wurst mit Senf oder eine Frikadelle zum Mitnehmen. Die
Reisenden sollten rechtzeitig am Bahnsteig sein, um den Zug
pünktlich zu erreichen. Wenn der Zugschaffner pfeifft, werden
alle Türen geschlossen und der Zug fährt los.
Start#
$ vim\- Die Eingabe von “vim” wird häufig durch Links verändert. Welche Fassung von vim, z. B. vi, vim, gVim, neovim, gestartet wird, kann mit folgendem Befehl abgefragt werden:
$ update-alternative --query vim\-
Begrüßungsbild
-
vim kennt 6 Modi. Wir beschäftigen uns aber nur mit 3 Modi
1. KOMMANDO-Modus = Normal-Modus\ 2. Einfüge-Modus\ 3. KommandoZEILEN-Modus -
Deshalb muss man immer wissen in welchem Modus man sich gerade befindet.
-
Nach dem Start steht vim im Kommando-Modus. Den Kommandozeilen-Modus muss man mit
ESC + : aufrufen und den Editier-Modus mit Editier-Befehlen. Die verschiedenen Editier-Befehle erkläre ich gleich.\ -
Die Wechsel der Modi beschreibe ich bei einzelnen Tätigkeiten, z. B. Speichern oder Eingeben.
Dokument laden#
- Am einfachsten gleich beim Start von vim die zu bearbeitende Datei mitgeben:
vim datei.txt\-
Wenn man vim ohne Datei aufruft, muss man die Datei über den KommandoZEILEN-Modus laden:
"ESC + :" -
ESC : r datei.txt (wobei die normale Shell-Expansion gültig ist)
-
vim steht danach im KOOMANDO-Modus.
Dokument speichern#
-
Das Speichern geht wieder über den KommandoZEILEN-Modus:
ESC : w datei.txt
Beenden#
-
Beendet wird vim über KommandoZEILEN-Modus:
ESC : q -
Hat man in der Datei Änderungen vorgenommen, die man gerne vollstänig rückgängig machen möchte, um von vorne zu starten, dann gibt man
ESC : q! ein. "!" weist vim an, vim ohne Speicherung von Änderungen zu beenden, sonst ist man gezwungen, die Datei zu speichern.
Einfache Cursor-Bewegungen#
- Die Tasten sind nicht logisch auf der Tastatur verteilt. Man muss sie sich einfach merken.
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | j | Cursor unten | Kommando-Modus |
| Kommando-Modus | k | Cursor hoch | Kommando-Modus |
| Kommando-Modus | h | Cursor links | Kommando-Modus |
| Kommando-Modus | kleines L | Cursor rechts | Kommando-Modus |
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | w | Wort vor (mit Sonderzeichen = Wort) | Kommando-Modus | | Kommando-Modus | W | Wort vor (ohne Sonderzeichen = Wort) | Kommando-Modus |
| Kommando-Modus | b | Wort vor (mit Sonderzeichen = Wort) | Kommando-Modus | | Kommando-Modus | B | Wort vor (ohne Sonderzeichen = Wort) | Kommando-Modus |
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | 0 (Null) | Zeilenanfang | Kommando-Modus |
| Kommando-Modus | $ | Zeilenende | Kommando-Modus |
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | gg | 1. Zeile | Kommando-Modus |
| Kommando-Modus | G | letzte Zeile | Kommando-Modus |
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | xG | in x-te Zeile springen | Kommando-Modus |
| Kommando-Modus | x+ / x- | x Zeilen vorwärts / rückwärts springen | Kommando-Modus |
Merke:
- Die Cursorbewegungen kann ich mit Prefixen als Zahlen vervielfachen, z. B. 2 Wörter vor = 2w, 3 Wörter zurück = 3b.
- Cursorbewegungen können mit anderen Befehlen, z. B. Löschbefehle, kombiniert werden.
Merke:
- Mit "." (Punkt) wird der letzte Einfüge- oder Löschbefehl wiederholt.
Einfache Eingabe#
- Um zu Editieren muss der Modus vom Kommando-Modus in den Eingabe-Modus geschaltet werden. Das geschieht mit folgenden Befehlen:
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | großes I | Eingabe am Anfang der Zeile | Einfüge-Modus |
| Kommando-Modus | großes A | Eingabe am Ende der Zeile | Einfüge-Modus |
| Kommando-Modus | kleines a | Eingabe rechts vom Cursor | Einfüge-Modus |
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | u | U | Kommando-Modus |
| Kommando-Modus | J | Zeilenumbruch entfernen und Zeile zusammenfügen | Kommando-Modus |
Einfache Löschung#
- Die Löschung kann entweder im Kommando-Modus mit Befehlen oder im Editier-Modus mit BACKSPACE und ENTF durchgeführt werden. Wir verwenden hier den Kommando-Modus.
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | x | löscht Zeichen unter dem Cursor | Kommando-Modus |
| Kommando-Modus | dd | löscht ganze Zeile | Kommando-Modus |
Beispiel 1 - Ändern#
| Was? | Wie? |
|:—|:—|
| Wort “Schalderhalle” korrigieren | 1. KOMMANDO-Modus: mit “j” und “l” zum gewünschten Ort navigieren |
| | 2. KOMMANDO-Modus: x zum Löschen verwenden |
| | 3. KOMMANDO-Modus: i zum Einfügen verwenden |
| | 4. Einfüge-Modus: “t” einfügen |
Beispiel 2 - Zeile löschen#
| Was? | Wie? |
|:—|:—|
| Doppelte Zeile löschen | 1. KOMMANDO-Modus: zur gewünschten Zeile navigieren |
| | 2. KOMMANDO-Modus: dd zum Löschen der Zeile drücken |
Löschung mit zusammengesetzten Cursorbewegungen#
- Das Muster dieser Befehle ist: “Befehl + Bewegung”.
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | 0 | Zeilenanfang | Kommando-Modus |
| Kommando-Modus | $ | Zeilenende | Kommando-Modus |
- Die Löschbefehle können auch mit Cursorbewegungen (siehe Einfache Cursorbewegungen) kombiniert werden.
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | d0 | Löschen vom Zeilenanfang bis zur aktuellen Cusorposition | Kommando-Modus |
| Kommando-Modus | d$ | Löschen von der aktuellen Cusorposition bis Zeilenende | Kommando-Modus |
Wörter suchen#
- Aus dem KOMMANDO-Modus heraus kanne eine Suche mit einem SUCHMUSTER gestartet werden.
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | /SUCHMUSTER | Suchen VORwärts nach Suchmuster | Kommando-Modus |
| Kommando-Modus | ?SUCHMUSTER | Suchen RÜCKwärts nach Suchmuster | Kommando-Modus |
| Kommando-Modus | n / N | Suche wiederholen vorwärts rückwärts | Kommando-Modus |
| Kommando-Modus | # | RÜCKwärts-Suche des Wortes über dem Cursor | Kommando-Modus |
- MERKE: Die Suche ist case-senstitiv.
Beispiel 3 - Löschen ab Cursorposition und bis Cursorposition#
| Was? | Wie? |
|:—|:—|
| Satz “Wer noch kein Reiseproviant hat, kann sich in einer Beckerei ein belegtes Brötchen kaufen.” löschen | 1. KOMMANDO-Modus: “Wer” mit /Wer suchen. |
| | 2. KOMMANDO-Modus: Von “Wer” = aktuelle Cursorposition mit “d$” bis Zeilenende löschen. |
| | 3. KOMMANDO-Modus: Mit “0” zum Zeilenanfang springen, mit “j” eine Zeile tiefer gehen, mit “6w” zum nächsten Satz springen. |
| | 4. KOMMANDO-Modus: Mit “d0” vom Zeilenanfang bis zur aktuellen Cursorposition löschen. |
Markieren im visuellen Modus#
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | v | Wechselt in den Visuellen Modus. Bewegungen zur Auswahl der Markierung werden ZEICHENweise vorgenommen. | visueller Modus |
| Kommando-Modus | V | Wechselt in den Visuellen Modus. Bewegungen zur Auswahl der Markierung werden ZEILENweise vorgenommen. | visueller Modus |
Merke:
- Im visuellen Modus sind die Bewegungskommandos sowie Löschkommandos gültig.
Ausschneiden#
- Markieren des gewünschten Textes im visuellen Modus (v, V).
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| visueller Modus | y | Ausschneiden in die Zwischenablage (= Register) | Kommando-Modus |
Einfügen#
- Alles, was gelöscht wird, wird in eine von mehreren Zwischenablagen (= Register) kopiert.
| Modus voher | Befehl | Bedeutung | Modus nachher |
|:—|:—|:— |:—|
| Kommando-Modus | p | Einfügen aus der Zwischenablage (= Register) | Kommando-Modus |
Hilfeseiten#
- Hilfeseiten können mit “ESC + :help” aufgerufen werden. Danach steht man im Kommando-Modus der Hilfe-Textdatei, in der man sich wie in einem normalen Textdokument bewegen kann.
- Die Hilfeseiten werden auch so verlassen: “ESC + :q”-
Weiter Lernen#
- Ein sehr gutes Lernprogramm ist “vimtutor”. Wenn man die Arbeit mit vim mit diesem Programm geübt hat, kann man einfache Texte, wie z. B. Konfigurationsdateien, bearbeiten.
- vitutor wird auf der Kommandozeile mit “vimtutor” aufgerufen. Dann einfach den Anweisungen folgen.
Nachschlagen#
- vim Cheatsheet: https://www.slideshare.net/alfrescoqa/vivimcheatsheetpdf
– Ende: Bis hier alles in Markdown –
- Vim und neovim konfigurieren\
- https://github.com/rzbrk/202102_trolug_vim-talks/blob/master/vimrc.txt
- Cool sind relative Zeilennummer. Die Relation bezieht sich auf die aktuelle Zeile. Von dieser ausgehend werden die nächsten 10 Zeilen aufwärts und abwärts nummeriert. Die übrigen Zeilennummern werden von Anfang bis zum Ende fortlaufend durchnummeriert. Die Relative Zeilennummerierung verändert sich immer relativ zur aktuellen Zeile. Relative Zeilennummer sind praktisch, wenn man vor oder nach der aktuellen Zeile vim Kommando mit Vervielfachung angeben will, z. B. lösche die 3 nächsten Zeilen 3dd oder springe 7 Zeilen zurück. Fortlaufende und relative Zeilennummerierung kann kombiniert werden. Der set-Befehl dafür lautet:
set number relativenumber
entweder im KommandoZEILEN-Modus (ESC :) oder in der vimrc.
- Suchen/Ersetzen (Jan)\
- https://github.com/rzbrk/202102_trolug_vim-talks/raw/master/suche_ersetze.txt
- Eine Alternative zu Suche-Ersetzen mit KommandoZEILEN-Befehlen ist Markieren-Ersetzen über den Visual-Block-Mode von vim, der mit CTRL+v eingeschaltet werden kann. Damit können Textbereiche vertikal und horizontal markiert werden. Die Markierung der 1. Spalte im Visual Mode, “i” für Insert und “#” als Zeichen zum Einfügen, kommentiert den gesamten markierten Bereich aus. Dasselbe funktioniert auch mit CTRL-v, Spalte markieren und “x” für Löschen in umgekehrter Reihenfolge, um auskommentierte Textteile wieder herzustellen.
- Rechtschreibprüfung (versucht Maic)
.vimrc anpassen:
setlocal spell spelllang=de
Einschaltung mit :set spell (Def: Englisch)
:set spell
:set spelllang=de_de
Permanent: in vimrc: setlocal spell spelllang=de
]s zum nächsten Fehler gehen
[s zum vorherigen Fehler
z= Vorschläge anzeigen
zg Wort als bekannt hinzufügen
:nospell zum Abschalten von Spellcheck
?? Als Wörterbuch kann auch das systemweite Wörterbuch verwendet werden. Ich habe aber nicht mitgekommen, wie das geht. Kann das jemand ergänzen?
5.a) Rechnen in vim
Hier habe ich nicht mitgeschrieben, hat das einer?
Ich natürlich:
strg + r, = Rechennaufgabe eingeben, Enter
- 5.b) Vertical Visual Block Mode\
- CTRL+v zum Einschalten von vertical visual block mode\
- mit den Bewegungstasten Spalte oder Block markieren\
- SHIFT+I zum Aufruf des Einfügemodus, dann beliebige Zeichen eingeben, z. B. “# " zum Auskommentieren
-
Eigenes Syntax-Highlighting definieren (Jonas kann zeigen)
?? Ist das Thema noch drangekommen? Wenn ja, gibt es dazu Notizen? -
Weitere [neo]vim Hacks (alle)
-
Shell in Vim (Jan)\
- Sonstiges
$ update-alternatives –query vim
zeigt die Verlinkungen der verschiedenen vim-Alternativen an.
alacritty ?? Was ist hier gemeint?
-
Thema für das nächste Treffen ????
-
Nachtrag
Habe gerade vim-org entdeckt:\