Aaron Fischer Ingenieur, Vater, Heimwerker, Problemlöser

01 Oktober, 2009

Korrigiert

TL;DR:

Wer längere Texte in Vim schreibt - beispielsweise ein LaTeX File - der wird sich früher oder später wünschen eine Rechtschreibprüfung zu haben. Dies ist in Vim seit Version 7 sehr einfach.

Zu Beginn muss erst einmal das Sprachpaket besorgt werden, anhand dessen dann die Wörter überprüft werden können. Eine sehr ausgiebige Liste gibt es unter ftp://ftp.vim.org/pub/vim/runtime/spell/. Für deutsch werden die Dateien de.utf-9.spl und de.utf-8.sug im Verzeichnis ~/.vim/spell/ benötigt. Nachdem dies erledigt ist, kann die Rechtschreibung mit :set spell aktiviert werden.

Die Sprache wird über :set spelllang=de20 gesetzt. Warum de20? Für manche Sprachen gibt es mehrere Dialekte. So wie es britisches Englisch und amerikanisches Englisch gibt, gibt es im Deutschen auch Schweizer-deutsch, alte Rechtschreibung, neue Rechtschreibung etc. de20 steht für deutsch mit den Regeln der neuen Rechtschreibung. Schreibt man viele technische Texte mit einigen englischen Wörtern, kann man die Sprachen auch kombinieren. :set spelllang=de20,enus erkennt deutsch und englisch. (Natürlich ist zwischen de und 20 und bei en und us ein Unterstrich, allerdings ist der Unterstrich in meinem System für Formatierung vorgesehen. Also einfach einen Unterstrich dazudenken)

Um zwischen meinen oft verwendeten Sprachpaketen umzuschalten, habe ich mir eine kleine Hilfe gebaut. Es ist nicht sonderlich schön gelöst, Verbesserungen sind gerne willkommen :) Das Snippet kann man einfach in seine ~/.vimrc ablegen.

let g:myLang = 0
let g:myLangList = [ "Off", "German", "English" ]
function! ChangeSpellLang()
  if g:myLang == 0 | set nospell | endif
  if g:myLang == 1 | setlocal spell spelllang=de_20 | endif
  if g:myLang == 2 | setlocal spell spelllang=en_us | endif
  echo "language:" g:myLangList[g:myLang]
  let g:myLang = g:myLang + 1
  if g:myLang >= len(g:myLangList) | let g:myLang = 0 | endif
endfunction
map <F7> :call ChangeSpellLang()<CR>

Mit einem Druck auf F7 lässt sich nun zwischen deutscher, englischer und keiner Rechtschreibprüfung durchschalten. Zwei weitere Optionen sind in diesem Zusammenhang auch recht nützlich. Der erste färbt die falschen Worte ein, der zweite limitiert die Vorschläge auf 8 (dazu gleich mehr).

hi SpellBad ctermbg=52 ctermfg=9
set spellsuggest=8

So, nun aber zurück zu den falschen Wörtern. Natürlich lassen sich die als falsch markierten Worte korrigieren. Entweder direkt im Insert Mode mit STRG+x s, oder mit z= im Normal Mode. Ist man schon mal im Normal Mode, kann man mit ]s zum nächsten und mit [s zum vorherigen falschen Wort springen.

vim spell

Wird ein Wort als falsch markiert das eigentlich gar nicht falsch geschrieben ist (wie Firmennamen, Eigennamen etc.), kann dies mit zg zu einem persönlichen Wörterbuch hinzugefügt werden. Dies wird dauerhaft gespeichert.

Notiz auf dem CheatSheet: