1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
|
---
category: tool
tool: vim
lang: de-de
contributors:
- ["RadhikaG", "https://github.com/RadhikaG"]
translators:
- ["caminsha", "https://github.com/caminsha"]
filename: LearnVim-de.txt
---
[Vim](http://www.vim.org)
(Vi IMproved) ist ein Klon von vi, dem bekannten Editor für Unix. Es ist ein
Texteditor, welcher mit Fokus auf Geschwindigkeit und Prouktivität entwickelt
wurde.
Vim hat viele Keybindings für ein schnelles navigieren und schnelles bearbeiten
einer Datei.
## Grundlagen, um in Vim zu navigieren
```
vim <filename> # Öffne <filename> in Vim
:help <topic> # Öffne die eingebaute Hilfe zum Thema <topic>, wenn
# es existiert
:q # Schließe vim
:w # Speichere diese Datei
:wq # Speichere diese Datei und schließe vim
ZZ # Speichere diese Datei und schließe vim
:q! # Schließe vim ohne die Datei zu speichern
# ! *zwingt* die Ausführung von :q,
# daher wird die Datei nicht gespeichert.
ZQ # Beende vim ohne die Datei zu speichern
:x # Speichere die Datei und beende vim
# Dies ist eine kürzere Version von :wq
u # Änderung rückgängig machen
CTRL+R # Änderung wiederherstellen
h # Den Cursor um ein Zeichen nach links bewegen
j # Den Cursor eine Zeile nach unten bewegen
k # Den Cursor eine Zeile nach oben bewegen
l # Den Cursor um ein Zeichen nach rechts bewegen
Ctrl+B # Gehe eine Bildschirmanzeige zurück
Ctrl+F # Gehe eine Bildschirmanzeige vorwärts
Ctrl+D # Gehe eine halbe Bildschirmanzeige vorwärts
Ctrl+U # Gehe eine halbe Bildschirmanzeige zurück
# Navigieren innerhalb einer Zeile
0 # Navigiere zum Anfang der Zeile
$ # Navigiere zum Ende der Zeile
^ # Navigiere zum ersten Zeichen, welches kein Leerzeichen ist
# Im Text suchen
/word # Hebt alle Ergebnisse nach dem Cursor hervor
?word # Hebt alle Ergebnisse vor dem Cursor hervor
n # Bewegt den Cursor zum nächsten Ergebnis nach der Suche
N # Bewegt den Cursor zum vorherigen Ergebnis der Suche
:%s/foo/bar/g # Ersetze "foo" durch "bar" in allen Zeilen
:s/foo/bar/g # Ersetze "foo" durch "bar" in der aktuellen Zeile
:%s/\n/\r/g # Ersetze das newline-Zeichen bei allen Zeilen durch
# ein carriage return
# Zu einzelnen Zeichen springen
f<character> # Springe vorwärts und auf dem Zeichen <character>
t<character> # Springe vorwärts und lande vor dem Zeichen <character>
# Zum Beispiel,
f< # Springe vorwärts und lande auf <
t< # Springe vorwärts und lande vor <
# Wortweise navigieren
w # Springe um ein Wort vorwärts
b # Gehe ein Wort zurück
e # Springe zum Ende des aktuellen Wortes
# Weitere Befehle, um zu navigieren
gg # Gehe an den Start der Datei
G # Gehe an das Ende der Datei
:NUM # Springe zur Zeile NUM (NUM kann eine beliebige Zahl sein)
H # Navigiere zum Start der aktuellen Bildschirmanzeige
M # Navigiere in die Mitte der aktuellen Bildschirmanzeige
L # Navigiere an das Ende der aktuellen Bildschirmanzeige
```
## Hilfsdokumente:
Vim hat eine eingebaute Dokumentation, welche mit `:help <topic>` aufgerufen
werden kann.
Zum Beispiel öffnet `:help navigation` die Dokumentation über das Navigieren
`:help` kann auch ohne ein Argument verwendet werden. Dies zeigt den Standard-
Hilfsdialog an, welcher den Start mit vim einfacher macht.
that aims to make getting started with vim more approachable!
## Modi:
Vim basiert auf dem Konzept von **modes**.
- Command Mode - Vim startet in diesem Modus, hier kann man navigieren und Befehle eingeben
- Insert Mode - Wird verwendet, um Änderungen in der Datei zu machen.
- Visual Mode - Wird verwendet, um Text zu markieren und Operationen durchzuführen
- Ex Mode - Wird verwendet, um im ':'-Prompt Befehle einzugeben
```
i # Führt vim in den Insert Mode, vor der Cursorposition
a # Führt vim in den Insert Mode, nach der Cursorposition
v # Führt vim in den Visual Mode
: # Führt vim in den Ex Mode
<esc> # Führt zurück in den Command Mode, egal in welchem Mode
# man sich gerade befindet.
# Kopieren und einfügen von Text
y # Kopiere alles, was im Moment ausgewählt ist
yy # Kopiert die aktuelle Zeile
d # Löscht alles, was im Moment ausgewählt ist
dd # Löscht die aktuelle Zeile
p # Fügt den kopierten Text nach dem Cursor ein
P # Fügt den kopierten Text vor dem Cursor ein
x # Löscht das Zeichen unter dem Cursor
```
## Die 'Grammatik' von Vim
Vim kann als Satz von Kommandos angesehen werden, welche im Format
'Verb-Modifier-Noun' sind. Hierbei gilt:
- Verb - die Aktion, du machen willst
- Modifier - wie die Aktion gemacht wird
- Noun - das Objekt, auf welchem die Aktion ausgeführt wird.
Einige wichtige Beispiele von 'Verb', 'Modifier' und 'Nouns':
```
# 'Verb'
d # löschen
c # ändern
y # kopieren
v # visuelles auswählen
# 'Modifiers'
i # innerhalb
a # außerhalb
NUM # Nummer (NUM kann irgendeine Zahl sein)
f # Sucht nach etwas und landet darauf
t # Sucht nach etwas und stoppt davor
/ # Suche eine Zeichenfolge ab dem Cursor
? # Suche eine Zeichenfolge vor dem Cursor
# 'Nouns'
w # Wort
s # Satz
p # Abschnitt
b # Block
# Beispielsätze resp. Kommandos
d2w # lösche zwei Wörter
cis # Ändere innerhalb des Satzes.
yip # Kopiere innerhalb des Abschnitts (kopiere den Abschnitt,
# in welchem du bist)
ct< # Ändere bis zur spitzen Klammer
# Ändere den Text von deiner aktuellen Cursorposition bis
# zur nächsten spitzen Klammer
d$ # Lösche bis zum Ende der Zeile
```
## Einige Shortcuts und Tricks
```
> # Rücke die Auswahl um einen Block ein
< # Lösche eine Einrückung der Auswahl
:earlier 15m # Stellt das Dokument so wieder her, wie es vor 15
# Minuten war
:later 15m # den oberen Befehl rückgängig machen
ddp # Vertauschen zweier aufeinanderfolgenden Zeilen
# Zuerst dd, dann p
. # Wiederhole die vorherige Aktion
:w !sudo tee % # Speichere die Datei als Root
:set syntax=c # Stelle das Syntax-Highlighting für 'C' ein
:sort # Alle Zeilen sortieren
:sort! # Alle Zeilen rückwärts sortieren
:sort u # Alle Zeilen sortieren und Duplikate entfernen
~ # Umschalten der Groß-/Kleinschreibung des ausgewählten Textes
u # Ausgewählten Text zu Kleinschreibung ändern
U # Ausgewählten Text zu Großschreibung ändern
# Text-Folding (Textfaltung)
zf # Erstelle eine Faltung des ausgewählten Textes
zo # Öffne die aktuelle Faltung
zc # Schließe die aktuelle Faltung
zR # Öffne alle Faltungen
zM # Schließe alle Faltungen
```
## Makros
Makros sind grundsätzlich einfach aufgezeichnete Aktionen
Wenn du mit dem Aufnehmen eines Makros beginnst, werden **alle** Aktionen und
Kommandos, welche du braucht, aufgenommen bis die Aufnahme gestoppt wird.
Wenn du ein Makro ausführst, werden exakt die gleichen Schritte gemacht.
```
qa # Starte das Aufnehmen des Makros 'a'
q # Beende das Aufnehmen
@a # Führe das Makro 'a' aus
```
### Konfigurieren mit ~/.vimrc
Die Datei .vimrc kann verwendet werden, um Vim beim Starten zu konfigurieren
Hier ist eine Beispiel ~/.vimrc Datei:
```
" Beispiel ~/.vimrc
" Erforderlich für vim, dass es iMproved ist.
set nocompatible
" Bestimme den Dateityp anhand des Namens, um ein intelligentes Einrücken etc.
" zu ermöglichen
filetype indent plugin on
" Aktiviere das Syntax-Highlighting
syntax on
" Bessere Kommandozeilen-Vervollständigung
set wildmenu
" Verwende die Suche ohne die Berücksichtigung der Groß-/Kleinschreibung, außer
" wenn mit Großbuchstaben gesucht wird.
set ignorecase
set smartcase
" Wenn eine neue Zeile erstellt wird und kein Dateispezifisches Einrücken
" aktiviert ist, behält die neue Zeile die gleiche Einrückung wie die aktuelle
" Zeile
set autoindent
" Zeige links die Zeilennummern an
set number
" Einrückungsoptionen, ändere diese nach deinen Vorlieben
" Anzahl sichtbarer Leerzeichen bei einem TAB
set tabstop=4
" Anzahl der Leerzeichen während des Bearbeitens bei einem TAB
set softtabstop=4
" Anzahl der Einrückungstiefe bei den Operationen (>> und <<)
set shiftwidth=4
" Konvertiere TABs zu Leerzeichen
set expandtab
" Enable intelligent tabbing and spacing for indentation and alignment
" Aktiviere intelligente Tabs und Leerzeichen bei der Einrückung und Ausrichtung
set smarttab
```
### Verweise
- [Vim | Homepage](http://www.vim.org/index.php)
- In der Shell eingeben: `vimtutor`
- [Ein vim Tutorial und Primer, englisch](https://danielmiessler.com/study/vim/)
- [Deutsches Arch Linux Wiki](https://wiki.archlinux.de/title/Vim)
- [Arch Linux Wiki, englisch (dafür ausführlicher)](https://wiki.archlinux.org/index.php/Vim)
- [What are the dark corners of Vim your mom never told you about? (Stack Overflow thread)](http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you-about)
|