-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvimrc-full
644 lines (521 loc) · 20.1 KB
/
vimrc-full
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
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
" ----------
" 1. Startup
" ----------
" Schutz gegen versehentliches Laden.
if g:vimrc_load != 1
finish
endif
" ----
" Alle Optionen auf Standard
set all&
" Systemweite highlights löschen
highlight clear
" Systemweite autocmd löschen. Hoffentlich hält sich der Admin an die
" Konventionen und setzt sie in der Gruppe 'vimrcEx'. Sonst haben wir
" leider schlechte Karten. Wir müssen innerhalb einer Gruppe löschen,
" da das explizite Löschen einer Gruppe zu Fehlern führt, wenn diese
" Gruppe leer ist. Für Vim also nicht existiert. Alles klar? ;)
augroup vimrcEx
autocmd!
augroup END
" ----
" Arbeitsverzeichnisse anlegen. Sie werden weiter unten genutzt. Wir
" machen uns es einfach und prüfen nur, ob sie bereits als Verzeichnis
" existieren. Wenn was anderes unter gleichem Namen vorhanden sein
" sollte, gibt es eben Fehler.
if has ("win64") || has("win32")
if !isdirectory($HOME."/vimfiles/runtime")
call mkdir($HOME."/vimfiles/runtime", "p")
endif
if !isdirectory($HOME."/vimfiles/runtime/undo")
call mkdir($HOME."/vimfiles/runtime/undo", "p")
endif
if !isdirectory($HOME."/vimfiles/runtime/spell")
call mkdir($HOME."/vimfiles/runtime/spell", "p")
endif
else
if !isdirectory($HOME."/.vim/runtime")
call mkdir($HOME."/.vim/runtime", "p")
endif
if !isdirectory($HOME."/.vim/runtime/undo")
call mkdir($HOME."/.vim/runtime/undo", "p")
endif
if !isdirectory($HOME."/.vim/runtime/spell")
call mkdir($HOME."/.vim/runtime/spell", "p")
endif
endif
" =====================================================================
" ---------------------------
" 2. Allgemeine Einstellungen
" ---------------------------
" Normalerweise ist Vim 'compatible', emuliert also den klassischen vi.
" Wir wollen dies natürlich nicht, schließlich nutzen wir Vim statt vi.
" Schaltet die meisten folgenden Optionen erst frei.
set nocompatible
" ----
" Kopiere die Einrückung der aktuellen Zeile, wenn eine neue Zeile
" begonnen wird. Dies ist für normale Eingabe nur an wenigen Stellen
" wie z.B. Markdown-Listen sinnvoll, hilft aber den 'formatoptions'
" 'n' und '2'.
set autoindent
" Backspace soll über Einrückungen, Zeilenanfänge und Zeilenende hinweg
" laufen. Damit verhält es sich wie in einem normalen Editor.
set backspace=indent,eol,start
" Kein Scratchwindow, alle Informationen stattdessen inline anzeigen.
set completeopt=menu,menuone,longest
" Neue und sicherere Blowfish-Implementerung zur Verschlüsselung.
set cryptmethod=blowfish2
" Führe lokale, in Vim Arbeitsverzeichnis gefundene .vimrc aus.
set exrc
" Foldings manuell erstellen.
set foldmethod=manual
" Defintion, wie Text automatisch formatiert werden soll:
" r Das Kommentarzeichen in einer neuen Kommentarzeile automatisch
" anfügen.
" o Kommentarzeichen einfügen, wenn man mit o oder O in den Insert
" Mode wechselt.
" c Kommentare automatisch auf 'textwidth' umbrechen, die Kommentare
" automatisch einfügen.
" t Automatischer Zeilenumbruch auf 'textwidth'.
" q Auch Kommentare können mit 'gq' neu formatiert werden.
" n Erkenne Listen als solche und formatiere sie entsprechend.
" j Entferne das Kommentarzeichen beim Zusammenfassen von Zeilen.
set formatoptions=roctqnj
" Buffer können sich im Hintergrund befinden, müssen also nicht zwingend
" einem Window zugeordnet sein. Damit verhält Vim sich wie die meisten
" Multi-File-Editors.
set hidden
" Alle gefundenen Suchbegriffe hervorheben, nicht nur die Fundstelle.
set hlsearch
" Bereits suchen, während wir noch tippen.
set incsearch
" Breche nur in Leerzeichen um, nicht innerhalb eines Wortes.
set linebreak
" Modelines sind in vielen Installationen aus Sicherheitsgründen
" abgeschaltet. Wir wollen sie aber grundsätzlich parsen.
set modeline
" Einige Filetype-Plugins setzen die 'foldmethod' auf einen Wert
" als 'manual'. Verhindere daher, dass in dem Fall beim Start alle
" Foldings geschlossenwerden.
set nofoldenable
" Setzt den Cursor auf den Zeilenbeginn, nicht das erste Zeichen.
set nostartofline
" Zeige Zeilennummern am linken Rand...
set number
" ...und zwar relative Nummern.
set relativenumber
" Bereits 5 Zeilen vor dem Fensterende zu scrollen beginnen.
set scrolloff=5
" Die Shell für Kommando-Aufrufe. Da wir die zsh nicht überall haben
" brauchen wir hier ein Fallback. Sonst passieren seltsame Dinge, wenn
" wir die Shell für etwas brauchen.
if executable('zsh')
set shell=zsh
else
set shell=sh
endif
" Wenn eine Klammer geschlossen wird, blinkt die öffnende Klammer kurz
" auf. Sehr sinnvoll, um auch in komplexeren Strukturen den Überblick zu
" behalten.
set showmatch
" Deutsch als initiale Sprache für den Spellchecker.
set spelllang=de
" Maximale Zeilenlänge, automatischer Umbruch wenn diese überschritten
" wird.
set textwidth=72
" Den Terminal-Titel auf den Namen der aktuellen Datei setzen.
set title
" Visuelle Benachrichtigung anstatt piepen.
set visualbell
" Optionen für Command Line Completions.
" fuzzy: Fuzzy Suche.
" pum: Nutze ein Popup Menü.
set wildoptions=fuzzy,pum
" Überlange Zeilen zur Darstellung umbrechen.
set wrap
" ----
" Zeigt die Statuszeile immer am unteren Rand des Fensters. Ohne diese
" Option wird sie nur in einigen Situationen gezeigt.
set laststatus=2
" Zeige die aktuelle Cursorposition in der Statuszeile. Ich glaube es
" muss gesetzt sein, damit wir in der angepassten Statuszeile auf die
" Position zugreifen können. Siehe auch weiter unten.
set ruler
" Zeigt das letzte Kommando in der Statuszeile an, bis dies durch eine
" andere Ausgabe dort überschrieben wird.
set showcmd
" Zeigt in der Kommandozeile an, in welchem Mode wir sind.
set showmode
" Hilfsfunktion für die Spell Checker Sprache. Wenn der Spell Checker
" eingeschaltet ist, wird die Sprache zurückgegeben, sonst ein leerer
" String.
function! SpellState()
return &spell ? ',' . &spelllang : ''
endfunction
" Statuszeilenlayout.
" %< Stelle an der bei zu langer Zeile gekürzt wird
" %n Buffer-Nummer
" %f Relativer Pfad zur Datei
" %R Read-Only Flag
" %M Änderungsflag
" %Y Filetype
" %{SpellState()} Spell Checker Sprache
" $= Teiler für links und rechts Ausrichtung
" %{wordcount().words} Anzahl Wörter im Buffer
" %c Aktuelle Spalte
" %V Aktuelle virtuelle Spalte, falls nicht gleich %c
" %l Aktuelle Zeilennummer
" %L Gesamtzahl Zeilen der Datei
" %P Aktuelle Position in Prozent
if g:vimrc_utf8 == 1
set statusline=%<\ ≡\ %n∶\ %f\ (%R%M%Y%{SpellState()})\ %=W:%{wordcount().words}\ P∶%c%Vx%l/%L(%P)\
else
set statusline=%<\ %n∶\ %f\ (%R%M%Y%{SpellState()})\ %=W:%{wordcount().words}\ P∶%c%Vx%l/%L(%P)\
endif
" ----
" Thesauri für Deutsch und Englisch. Da sich Deutsch und Englisch in
" ihren Wörtern kaum überschneiden, setzen wir einfach beide Sprachen
" zugleich. Vim fragt dann beide Dateien ab und zeigt alle Treffer an.
if has("win64") || has("win32")
set thesaurus=$HOME/vimfiles/pack/dictionaries/start/thesaurus/thesaurus-de.txt
set thesaurus+=$HOME/vimfiles/pack/dictionaries/start/thesaurus/thesaurus-en.txt
else
set thesaurus=$HOME/.vim/pack/dictionaries/start/thesaurus/thesaurus-de.txt
set thesaurus+=$HOME/.vim/pack/dictionaries/start/thesaurus/thesaurus-en.txt
endif
" ----
" Automatische Einrückung aus 'tabstop' bestimmen.
set shiftwidth=4
" Nehme alle 'tabstop' Leerzeichen einen Tab statt der Leerzeichen.
set softtabstop=-1
" Ein 'tabstop' sind vier Leerzeichen.
set tabstop=4
" ----
" Dinge die spezifisch für's GUI sind.
if has("gui_running")
if has("gui_win32") || has("gui_win64")
" Die von gvim genutzte Schriftart. Consolas
" ist bei allen neueren Windows-Versionen
" dabei und sieht gut aus.
set guifont=Consolas:h11:cANSI:qDRAFT
" Über DirectX zu rendern bringt ein drastisch besseres
" Schriftbild. Funktioniert allerdings nur unter Vista und
" höher, was man inzwischen aber wohl voraussetzen kann.
" Die Optionen sind aus dem Internet geklaut:
" https://www.reddit.com/r/vim/comments/2ex6kh/set_renderoptions_windows/
set renderoptions=type:directx,gamma:1.5,contrast:0.5:,
\geom:1,renmode:5,taamode:1,level:0.5
" Der DirectX-Renderer braucht UTF-8. Was wir eh setzen
" müssten, da wir sonst noch latin1 bekommen würde...
set encoding=utf-8
else
" Die von gvim genutzte Schriftart.
set guifont=iA\ Writer\ Mono\ S\ 11
endif
" Keine nervende Symbol- und Menüleiste.
:set guioptions-=T
:set guioptions-=m
" Niemand mag Scrollleisten.
:set guioptions-=L
:set guioptions-=r
" Maus beim Tippen automatisch ausblenden.
set mousehide
" Selektieren mit der Maus schaltet in den Visual Mode.
set mouse=a
" Ballon-Meldungen erlauben.
set ballooneval
endif
" ----
" Dinge, die spezifisch für's Terminal sind. Leider ist das
" Unix-Terminal bekanntlich ein Clusterfuck. Das hier ist der
" Versuch vier Terminals gut zu unterstützen:
"
" * alacritty
" * rxvt-unicode
" * tmux
" * xterm
"
" Einige Anmerkungen zu gekringelten Unterstreichungen:
"
" * Gekringelte Unterstreichungen für unter anderem den
" Spellchecker sind ein klassischer Fall von Pest oder
" Cholera. Nicht alle Terminals können sie, kaum ein
" Theme unterstützt sie, dennoch sind sie ganz nett zu
" haben.
" * Damit die Unterstreichungen farbig werden, braucht es
" die Escape Sequenzen unter t_8u. Aber leider ist es
" eine doppelt vergebene Sequenz, auf nicht unterstützen
" Terminals löscht sie z.b. auch gerne mal den Hintergrund.
" Um das zu umgehen, hat Vim in 8.2.906 Logik eingefügt,
" die versucht zu erkennen, ob das Terminal unterstützt
" ist und wenn nicht t_8u auf einen leeren String setzt.
" Das hat als Nebenwirkung, dass man auf Vim unbekannten
" Terminals oder Terminals, die das Feature gerade erst
" bekommen haben, t_8u nicht gesetzt hat und die farbigen
" Unterkringelungen nicht funktionieren. Da sich das als
" nicht so klug erwies, änderte 8.2.4777 die Logik so,
" dass t_u8 immer gesetzt bleibt. Es wird allerdings nur
" genutzt, wenn die magie es als unterstützt erkennt.
" Damit die Magie funktioniert, muss t_RV gesetzt sein.
" Sollte aus der termcap / terminfo kommen, aber tut es
" nicht immer...
if !has("gui_running")
if &term =~ "alacritty"
" alacritty ist xterm-kompatibel. Es nutzt lediglich
" ein eigenes termcap / terminfo, da es mehr Dinge
" kann.
" Automatische Featureerkennung.
let &t_RV = "\<Esc>[>c"
" alacritty hat volle Unterstützung für Truecolor.
let &t_8f="\e[38;2;%lu;%lu;%lum"
let &t_8b="\e[48;2;%lu;%lu;%lum"
set termguicolors
" Ebenso unterstützt es farbige Unterkringelungen.
let &t_Cs="\e[4:3m"
let &t_Ce="\e[4:0m"
let &t_8u="\e[58;2;%lu;%lu;%lum"
" Die Mausunterstütztung nutzt das SGR-Protokoll.
set ttymouse=sgr
" Alacritty unterstützt das Kitty Keyboard Protocol,
" was einige Vorteile wie die Unterstützung von mehr
" Funktionstasten / Modifier bringt.
set keyprotocol=alacritty:kitty
elseif (&term =~ "tmux") || (&term =~ "screen")
" tmux setzt auf älteren Installationen oft noch
" $TERM auf screen-256color, daher werden tmux
" und screen äquivalent behandelt.
"
" tmux hat das große Problem, dass man nicht sagen
" kann, welches Terminal unterhalb des Multiplexers
" läuft. Wir nehmen ein xterm mit allen Features an.
" Das ist etwas gewagt, sollte in der Praxis aber
" ausreichend gut funktionieren.
" Automatische Featureerkennung.
let &t_RV = "\<Esc>[>c"
" Seit Version 3.5 unterstützt tmux modifyOtherKeys
" Mode 2. Erzwinge ihn hier, denn es erlaubt die
" Alt Taste ohne Escape Sequenz abzubilden. Das
" ermöglicht wiederum Mappings alt Alt, ohne mit
" dem Key Timeout von einer Sekunde zu kollidieren.
let &t_TI = "\<Esc>[>4;2m"
let &t_TE = "\<Esc>[>4;m"
" Truecolor.
let &t_8f="\e[38;2;%lu;%lu;%lum"
let &t_8b="\e[48;2;%lu;%lu;%lum"
set termguicolors
" Farbige Unterkringelungen.
let &t_Cs="\e[4:3m"
let &t_Ce="\e[4:0m"
let &t_8u="\e[58;2;%lu;%lu;%lum"
elseif &term =~ "rxvt-unicode"
" rxvt-unicode ist ein Arbeitstier. Ein gutes und
" schnelles Terminal, allerdings fehlen ihm neuere
" Features.
" Truecolor wird mit eingeschränktem Farbraum
" unterstützt. Vim erkennt es nicht automatisch.
" Erfahrungen im täglichen Einsatz haben leider
" gezeigt, dass es nicht so wirklich brauchbar
" ist. Aus zwei Gründen:
" * Viele Distros bauen das Terminal ohne die
" Unterstützung für den 24 Bit Farbraum.
" * Der eingeschränkte Farbraum macht doch bei
" einigen Colorthemes Probleme.
" Setze daher die Termcap-Optionen, schalte aber
" termguicolors nicht global ein.
let &t_8f="\e[38;2;%lu;%lu;%lum"
let &t_8b="\e[48;2;%lu;%lu;%lum"
" Viele ältere Systeme und FreeBSD generell gehen
" davon aus, dass rxvt-unicode keine Italics kann
" und setzen die termcap / terminfo EInträge auf
" Reverse.
let &t_ZH="\e[3m"
let &t_ZR="\e[23m"
" Vim erkennt die Mausunterstützung meist mit dem
" xterm2-Protokoll. Vim bietet allerdings eine
" spezielle Protokollvariante an, welche kein 223
" Spaltenlimit hat.
set ttymouse=urxvt
elseif (&term =~ "xterm")
" xterm ist der verbreitetste Terminal-Typ, aber
" sehr inkonsistent. Nicht einmal xterm selbst
" unterstützt garantiert alle Features. Vim nutzt
" intern einige Magie um xterms automagisch zu
" konfigurieren, leider hat das prinzipbedingt ein
" recht hohes Fehlerpotential. Wir konfigurieren
" daher die relevanten Dinge explizit.
" Truecolor.
let &t_8f="\e[38;2;%lu;%lu;%lum"
let &t_8b="\e[48;2;%lu;%lu;%lum"
set termguicolors
" Farbige Unterkringelungen.
let &t_Cs="\e[4:3m"
let &t_Ce="\e[4:0m"
let &t_8u="\e[58;2;%lu;%lu;%lum"
endif
" Ballon-Meldungen erlauben.
set balloonevalterm
endif
" ----
" Inzwischen unterstützen viele Themes im GUI Undercurls für
" den Spellchecker, allerdings nichts im TUI. Grund dafür ist,
" dass viele Terminals entweder gar keine Undercurls oder nur
" Undercurls in der Vordergrundfarbe der Zelle unterstützen.
" Weiter oben konfigurieren wir Undercurls explizit für einige
" Terminals. Auf diesen Terminals schalten auch Truecolor ein
" und setzen termguicolors.
"
" Daher: Wenn wir ein GUI haben oder termguicolors gesetzt ist,
" überschreibe die Highlightgruppen für den Spellchecker, sodass
" Undercurls genutzt werden. Damit das auch bei später geladenen
" Themes funktioniert, per autocmd und Funktion.
function OverrideSpellHighlights()
if has("gui_running") || &termguicolors
hi SpellBad guifg=NONE guiBG=NONE gui=undercurl ctermfg=NONE
\ ctermbg=NONE cterm=undercurl
hi SpellCap guifg=NONE guiBG=NONE gui=undercurl ctermfg=NONE
\ ctermbg=NONE cterm=undercurl
hi SpellLocal guifg=NONE guiBG=NONE gui=undercurl ctermfg=NONE
\ ctermbg=NONE cterm=undercurl
hi SpellRare guifg=NONE guiBG=NONE gui=undercurl ctermfg=NONE
\ ctermbg=NONE cterm=undercurl
endif
endfunction
augroup vimrcEx
autocmd ColorScheme * call OverrideSpellHighlights()
augroup END
" Unser Farbschema laden.
set background=dark
colorscheme PaperColor
" ----
" Mit Hilfe der viminfo Datei merkt sich Vim Dinge über mehrere
" Sessions hinweg. Wir speichern in ihr:
" % Wir merken uns die Bufferliste, öffnen sie beim Start
" wieder, sofern keine Datei an Vim übergeben wurde.
" '128 Marken der letzten 128 Dateien speichern.
" /128 Die letzten 128 Suchbegriffe.
" :128 Die letzten 128 History-Befehle.
" @128 Die letzten 128 eingegebenen Zeilen.
" s1024 Alle Register bis 1 Megabyte Größe speichern.
set viminfo='128,/128,:128,@128,s1024
" Der Dateipfad ist vom Betriebssystem abhängig.
if has ("win64") || has("win32")
set viminfo+=n$HOME/vimfiles/runtime/viminfo
else
set viminfo+=n$HOME/.vim/runtime/viminfo
endif
" ----
" Die Undo-Datei merkt sich Undo-Daten für einzelne Dateien über mehrere
" Sessions hinweg. Maximal 1.000 Änderungen können rückgängig gemacht
" werden, bis zu 10.000 Zeilen werden beim erneuten laden einer (extern
" geänderten) Datei im RAM gehalten. Dies erlaubt es, die externen
" Änderungen per Undo rückgängig zu machen.
set undofile
set undolevels=1000
set undoreload=10000
" Das Verzeichnis ist vom Betriebssystem abhängig.
if has("win64") || has("win32")
set undodir=$HOME/vimfiles/runtime/undo
else
set undodir=$HOME/.vim/runtime/undo
endif
" ----
" Datei, in welcher Datei dem Wörterbuch hinzugefügte Wörter gespeichert
" werden.
if has("win64") || has("win32")
set spellfile=$HOME/vimfiles/runtime/spell/custom.utf-8.add
else
set spellfile=$HOME/.vim/runtime/spell/custom.utf-8.add
endif
" ----
" Gibt an, was in automatisch erstellte Session-Scripte gespeichert
" wird.
set sessionoptions=blank,buffers,curdir,folds,localoptions,options
set sessionoptions+=resize,tabpages,unix,winsize,winpos,globals
" ----
" Wir wollen automatisches Syntaxhighlighting.
syntax on
" Erkenne Dateitypen.
filetype on
" Wähle den Einrückungsstil anhand des erkannten Dateityps.
filetype indent on
" Vim hat zwar mehrere eingebaute Indent-Styles und kann den Stil wenn
" nötig automagisch ermitteln, aber oft reicht es nicht aus, da der
" Syntax der jeweiligen Sprache zu komplex ist. Wenn es ein Plugin für
" den aktuellen Dateityp gibt, wollen wir dies daher nutzen.
filetype plugin indent on
" =====================================================================
" --------------------------------------
" 3. File-Type spezifische Einstellungen
" --------------------------------------
" =====================================================================
" ----------------
" 4. Auto-Commands
" ----------------
" Alle von uns definierten Auto-Commands kommen in eine Gruppe,
" damit wir sie bei Bedarf später einfach wieder entfernen können.
augroup vimrcEx
" Springe beim Öffnen einer Datei zur letzten bekannten Cursor-
" Position. Dies wird vor allem ausgeführt, also auch bevor Vim
" den Dateityp ermittelt hat.
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
" Springe gleich wieder zurück an den Start, wenn wir einen
" Git-Commit editieren. Es ist ein wenig unschön, aber da beim
" Ausführen des ersten AutoCmd der Filetype noch nicht gesetzt
" ist, alternativlos.
autocmd FileType gitcommit autocmd! BufEnter COMMIT_EDITMSG
\ call setpos('.', [0, 1, 1, 0])
" Im Falle von C und C++ sollen //-Kommentare nicht fortgesetzt
" werden, wenn die Zeile umgebrochen wird. Es sind halt einzeilige
" Kommentare.
autocmd FileType c,cpp setlocal comments-=://
" .md Files als Markdown erkennen und nicht als Modula Sourcecode.
autocmd BufNewFile,BufReadPost *.md set filetype=markdown
" Erkenne die in Markdown-Dateien verbreiteten YAML-Frontmatters
" als Kommentare.
autocmd FileType markdown syntax match Comment /\%^\s*---\_.\{-}---$/
" Saltstack .sls als YAML erkennen.
autocmd BufNewFile,BufReadPost *.sls set filetype=yaml
augroup END
" =====================================================================
" ---------------
" 5. Key mappings
" ---------------
" Normalerweise liegt der Leader auf '\', was im deutschen Layout nur
" schwer zu erreichen ist. Wir setzen ihn daher auf ` `, also Space.
" Space ist die einzige mehr oder weniger unbelegte Taste. Genauer
" mappen wir Space auf Leader, es hat den Vorteil, dass auch '\' als
" Leader nutzbar bleibt.
map <space> <leader>
" ----
" Hebt alle Vorkommen des Wortes unter dem Cursor hervor.
nnoremap <Leader>hh :set hls<CR>:exec "let @/='\\<".expand("<cword>")."\\>'"<CR>
" Alle Hervorhebungen löschen.
nnoremap <Leader>hc :nohls<CR>
" Paste-Mode.
nnoremap <Leader>p :set paste!<CR>
" Spellchecker umschalten.
nnoremap <Leader>ss :setlocal spell!<cr>
nnoremap <Leader>se :setlocal spelllang=en_us<cr>
nnoremap <Leader>sd :setlocal spelllang=de<cr>
" ----
" Die Spalte highlighten, an welcher der Text umbricht.
function! g:ToggleColorColumn()
if &colorcolumn != ''
setlocal colorcolumn&
else
setlocal colorcolumn=+1
endif
endfunction
nnoremap <silent> <Leader>w :call g:ToggleColorColumn()<CR>
" =====================================================================
" --------------
" 6. Secure mode
" --------------
" Da wir oben 'exrc' setzen, ist es eine sehr gute Idee hier den Secure
" Mode einzuschalten, sodass nachfolgende vimrc nicht im Dateisystem
" herumrandalieren und ungewollte Mappings setzen können.
set secure
" =====================================================================