version 5.7 "" ============================================================================ "" ~/.vimrc - persönliche Konfigurationsdatei für Vim "" ============================================================================ "" $Id: dotvimrc,v 1.14 2000/06/26 18:28:59 tb Exp $ "" ============================================================================ "" Diese Datei darf unter einer beliebigen Version der GPL benutzt werden. "" "" URL: http://www.trash.net/~thomasb/vim/dotvimrc (Plain ASCII) "" http://www.trash.net/~thomasb/vim/dotvimrc.html (HTML-Version) "" http://www.trash.net/~thomasb/vim/index.html (Vim-Seite) "" "" (c) 1999,2000 by Thomas Bader <thomasb@trash.net> "" ============================================================================ "" Anmerkung: Diese Datei ist noch von drei weiteren Dateien abhängig "" (».vimrc.html«, ».vimrc.typos« sowie ».vimrc.urls«). Diese Dateien sind "" unter http://www.trash.net/~thomasb/vim/index.html#setup erhältlich. Ebenso "" ist dort eine ».gvimrc« verfügbar, die vom GVim (Vim mit einem GUI) verwendet "" wird. Die ».gvimrc« ist aber optional. "" ============================================================================ "" Die HTML-Version dieser Datei lässt sich direkt aus Vim erstellen. Dazu "" benutzt man "" "" ESC "" :set syntax=vimrc "" :syntax on "" :so $VIMRUNTIME/syntax/2html.vim "" ============================================================================ "" Bei Problemen kriegt man jederzeit Hilfe durch das Kommando »:help« bzw. "" »:help <THEMA>«, wobei <THEMA> durch den Namen der Funktion, über die man "" etwas erfahren möchte, ersetzt werden muss. Wenn man z.B. wissen möchte, "" welche Auswirkung der Befehl »:set nu« hat, dann würde man »:help nu« "" aufrufen. Ebenso geht dies mit Funktionen; wenn man z.B. wissen möchte, was "" passiert, wenn man »:version« eingibt, würde man »:help version« eingeben. "" ============================================================================ "" ---------------------------------------------------------------------------- "" Externe Dateien "" ---------------------------------------------------------------------------- " (Hinweis: Dies ist direkt am Anfang, da diese Variablen evt. bei jedem Upgrade " geändert werden müssen) " Wo ist die Hilfedatei zu finden? set helpfile=/usr/local/share/vim/vim57/doc/help.txt " Wörterbücher set dictionary=/usr/local/dict/words,/usr/local/dict/german.words " Die Dateien sind z.B. von " ftp://ftp.fu-berlin.de/misc/dictionaries/unix-format zu kriegen. Aber " Achtung: Die obige Quelle enthält nur rel. alte Versionen. " Manchmal ist es praktisch, Tippfehler zu beseitigen können. In der Datei " ».vimrc.typos« sind aus diesem Grund verschiedene Abbrevations, die Typos " korrigieren sollen, drin source ~/.vimrc.typos " Machmal ist es praktisch, wenn ich in einem Text oder Posting eine URL mit " einer Abbrevation abrufen kann. Diese URLs stehen in einem eigenen File, damit " ich die URLs bequemer verwalten kann source ~/.vimrc.urls " In der ».vimrc.html« sind einige Abbrevations für HTML-Tags drin. Ich habe " diese in eine eigene Datei verlegt, weil ich so Speicher sparen kann (die Tags " werden schliesslich nicht immer benötigt) if has("autocmd") autocmd BufNewFile,Bufread *.html,*.htm,*.shtml,*.epl,*.php3,*.sgml,*.de,*.en source ~/.vimrc.html endif "" ---------------------------------------------------------------------------- "" Abbrevations "" ---------------------------------------------------------------------------- " Meine Telefon- und Faxnummer (keine URL, deshalb nicht in .vimrc.html) iab Uphone (++41 62) 8971003 " Meine Handynummer iab Uhandy (++41 76) 5601509 " Meine Snailmailadresse iab Usnail Thomas Bader<C-M>Waldeck 2<C-M>CH-5102 Rupperswil " Meine ICQ-Nummer iab Uicq 46323601 " Datum/Uhrzeit einfügen iab DATE <C-R>=strftime("%y%m%d")<CR> " Resultat: 000424 iab TIME <C-R>=strftime("%H:%M")<CR> " Resultat: 18:47 iab FULLDATE <C-R>=strftime("%a %b %d %T %Z %Y")<CR> " Resultat: Mon Apr 24 18:48:45 CEST 2000 " Zwei *lange* Nummern iab Npi 3.1415926535897932384626433832795028841972 iab Ne 2.7182818284590452353602874713526624977573 " *Wirklich* lange Wörter iab Udd Donaudampfschiffahrtgesellschaftskapitaenwitwenrentengesetzzusatzparagraph iab Ui18n internationalization " Das Alphabet & Zahlen iab Ualpha abcdefghijklmnopqrstuvwxyz iab UALPHA ABCDEFGHIJKLMNOPQRSTUVWXYZ iab Udigit 1234567890 " Für die Leute, die die Signatur nicht richtig abtrennen iab UsD Bitte trenn' Deine Signatur richtig ab. Dies geschieht mit "-- ", also "<Strich><Strich><Leerschlag>". Danke! iab UsE Please precede your signature with the sigdashes line ("-- "). Thanks! "" ---------------------------------------------------------------------------- "" Allgemeines Verhalten "" ---------------------------------------------------------------------------- " Automatisch speichern, wenn z.B. »:make« aufgerufen wird. Es sind auch noch " andere Tags betroffen, sie »:help autowrite«. set autowrite " Beim Speichern einer Datei sollten _keine_ Backups gemacht werden. set nobackup "set backup " Vorsichtige Leute wählen wohl eher das hier " Kein Backup machen, wenn eine Datei überschrieben wird. set nowritebackup " Nützt nichts, da oben »nobackup« gesetzt wird "set writebackup " Vorsichtige Leute wählen wohl eher das hier " Vim soll sich niemals wie der Vi verhalten (Hinweis: Vim kann im " compatible-Mode sogar die Bugs von Vi imitieren :) set nocompatible " In der Statuszeile immer anzeigen, in welchem Modus man sich befindet set showmode " Einen "Report" ausgeben, wenn x-Zeilen geändert wurden (0 = immer) set report=0 " Backspace (=> :help backspace) set backspace=2 " Piep bei Fehler auschalten set noerrorbells " Die Höhe des Hilfefensters (wird mit ":help" aufgerufen) set helpheight=20 " Vim soll nicht automatisch im Insert-Mode gestartet werden, das ist verwirrend. set noinsertmode " Die Statusmeldungen abkürzen Bedeutung: " »a« -> alle Nachrichten abgekürzt " »I« -> kein Intro (auch erreichbar über »:intro«) " Die restlichen Möglichkeiten efährt man über »:help shortmess« set shortmess=aI " Einige Optionen, die der Kompatibilität dienen. Siehe »:help cpoptions« für " Informationen über die einzelnen Flags. set cpoptions=aABceFsJWy " Das Verhalten der Buffers steuern set hidden " Die Statuszeile soll _immer_ angezeigt werden, was dem Wert »2« entspricht set laststatus=2 " Wenn ein Makro (oder etwas anderes, dass nicht von Hand eingegeben wurde) " läuft, wird solange es läuft kein Redraw der Anzeige vorgenommen set lazyredraw " Modelines. Mit Hilfe von Modelines kann man spezielle Anweisung in ein " ASCII-File schreiben, die dann von Vim ausgeführt werden (zur Zeit sind " allerdings nur »set«-Anweisungen möglich). Wer mehr darüber erfahren möchte, " sollte sich mal »:help modeline« ansehen. set modeline " Hiermit werden Modelines angeschaltet set modelines=5 " Die letzten 5 Zeilen können eine Modeline " sein. " Wo soll gesucht werden... analog zu $PATH in der Shell. Wird z.B. für das " Kommando »gf« verwendet. set path=.,~/ " Programmierer werden hier eher folgendes verwenden wollen: "set path=.,~/,/usr/include,/usr/local/include " Der Ruler ist die Anzeige rechts unten in der Statuszeile, die die Zeilennummer " und den Abstand, den man von linken Rand hat, in Zeichen anzeigt. Beide Angaben " werden durch ein Komma getrennt. Dieser sollte angezeigt werden (nützt aber " nichts, da ich die Statuszeile bereits anders konfiguriert habe). set ruler " In der Statuszeile soll immer angezeigt werden, in welchem Modus man sich " befindet. set showmode " Dateien mit folgende Suffixen bei dem ":edit"-Kommando ignorieren set suffixes=.aux,.bak,.dvi,.gz,.idx,.log,.ps,.swp,.tar " 50 Kommandozeilenbefehle speichern. Dies ist vergleichbar mit der History von " der bash bzw. zsh bzw. tcsh set history=50 " Teilweises Kommando in der Statuszeile anzeigen (abschalten bei " langsamem Terminal) set showcmd " Beim Navigieren mit den Cursortasten nicht an den Anfang der Zeile springen. set startofline " Beim Teilen eines Fensters das neue automatisch über das alte setzen set nosplitbelow " Wenn dies eingeschaltet ist, sucht vim nach Terminalbeschreibungen zuerst in " seiner eigenen, internen Termcap. Dies ist nützlich, da auf vielen System " die Systemweite Termcap meistens Fehler enthält. set ttybuiltin " Beeinflusst das scrollen set ttyscroll=999 " Was für Werte sollen in die viminfo geschrieben werden (werden beim " nächsten Start wieder ausgelesen). Eine genaue Beschreibung findet sich " unter »:help viminfo« set viminfo='20,"\50 " Soll der Bildschirm kurz flackern, wenn ein Fehler ensteht? set novisualbell " Das visuelle Flackern des Terminals abschalten set t_vb= " Entfernung vom rechten Rand, bei dem automatische Zeilenumbrüche " starten set wrapmargin=1 " Aussehen der Statuszeile (Sollte wohl besser bei den Farben sein) set statusline=%1*[%02n]%*\ %(%M%R%H%)\ *\ %2*%t%*\ *%=%{Options()}\ %3*<%l,%c%V,%p%%>%* " Diese Funktion wird von der Statuszeile gebraucht - da sie nur hier " und sonst nirgends gebraucht wird, ist sie hier (sonst gehörte sie " zu den Makros). Diese Funktion gibt in einem String zurück, welche " der hier ausgewählten Funktionen gesetzt sind -> sieht nett aus, auf " der Statuszeile. fu! Options() let opt="" if &ai| let opt=opt." ai" |endif if &et| let opt=opt." et" |endif if &hls| let opt=opt." hls" |endif if &nu| let opt=opt." nu" |endif if &ek| let opt=opt." ek" |endif if &list| let opt=opt." list" |endif if &paste|let opt=opt." paste"|endif if &shiftwidth!=8|let opt=opt." sw=".&shiftwidth|endif let opt=opt." tw=".&tw "let opt=opt."\[".&lines.",".&columns."\]" return opt endf " hi User1 cterm=bold ctermfg=cyan ctermbg=white guifg=cyan guibg=white hi User1 cterm=NONE ctermfg=red ctermbg=white guifg=red guibg=white hi User2 cterm=NONE ctermfg=green ctermbg=white guifg=green guibg=white hi User3 cterm=NONE ctermfg=blue ctermbg=white guifg=blue guibg=white "" ---------------------------------------------------------------------------- "" Anzeige von Text "" ---------------------------------------------------------------------------- " Den Zeilenumbruch, wenn der Text in der Länge nicht ins Terminal passt, " abschalten (das ist iritierend) set nowrap " Sollen nach ".", "!" und "?" zwei Leerzeichen eingefügt werden? " Das macht das lesen von Texten einfacher... finde ich ;) (Hinweis: Dazu sollte " »cptions« entsprechend gesetzt sein, siehe oben). set joinspaces " Was für ein Hintergrund? (Zur Auswahl stehen "light" und "dark") " Dies beeinflusst die Farben beim Syntaxhighlithing set background=dark " Wenn dies auf »on« gesetzt wird, wird vor jeder Zeile die aktuelle Zeilennummer " ausgegeben. Dies ist allerdings nicht wünschenswert (Platz sparen), deshalb " setze ich es auf »off« set nonumber " BTW: Dies ist identisch mit »:set nu« bzw. »:set nonu« " Ein nützliches Feature: Damit lassen sich TABs, Zeilenenden und Whitespaces " durch spezielle Zeichen ersetzen, damit man sie leichter erkennen kann. Dazu " muss man zuerst eine Liste der Zeichen, die einbezogen werden sollen, setzen: set listchars=tab:»·,trail:· " Nun kann man das Feature einschalten: set list "" ---------------------------------------------------------------------------- "" Verhalten während des Editierens "" ---------------------------------------------------------------------------- " Automatisch Einrücken des Textes? (Nützlich beim Programmieren) set autoindent " Sollen Tabulatoren zu Leerzeichen expandiert werden set expandtab " Wie viele Leerzeichen zählt ein Tabstop? set tabstop=8 " Wieviele Leerzeichen sollen für eine Einrückung verwendet werden? set shiftwidth=8 " Nach wie vielen Zeilen soll der Zeilenumbruch erfolgen? 80 Zeichen passen grad " auf die Konsole. set textwidth=80 " Gilt nicht bei eMail und News, siehe unten " Ermöglicht das Eingeben von Umlauten set digraph " Das arbeiten mit den Pfeiltasten im Insert-Mode erlauben (ist *subjektiv* " bequemer bzw. intuitiver) set esckeys " Formatoptionen (genaueres darüber erfährt man mit »:help fo-table« set formatoptions=cqrto " Soll bei der Eingabe eines ")" kurz zu der dazugehörigen "(" " gesprungen werden? Eher nicht, das stört. set noshowmatch "" ---------------------------------------------------------------------------- "" Suchen / reguläre Ausdrücke "" ---------------------------------------------------------------------------- " Soll das Ergebniss einer Suche gehighlightet werden? Manchmal empfiehlt es " sich, das abzuschalten (bei einigen Terminals). set hlsearch set incsearch " Die Gross/Kleinschreibung beim Suchen soll nicht ignoriert werden set noignorecase " Ich will auch nach "@", ".", "_", und "-" suchen können set iskeyword=@,48-57,_,192-255,-,.,@-@ " Erweiterte reguläre Ausdrücke verwenden? set magic "" ---------------------------------------------------------------------------- "" Syntaxhighlighting/Farben "" ---------------------------------------------------------------------------- " Syntaxhighlighting automatisch einschalten (funktioniert nur, wenn das " einkommpilliert wurde). if has("syntax") syntax on endif " Wie sehen Kommentare aus? (Dies ist ein Komma-Getrennte Liste von " Zeichen, die Kommentare einleiten können.) Vor dem Zeichen steht noch ein " spezielles Flag. Informationen über die Bedeutung dieser Flags kann man mit " »:help format-comments«. set comments=b:#,b:\",:%,fb:-,n:>,n:),b:\| " Sprachen, die gehighlightet werden sollen set highlight=8r,db,es,hs,mb,Mr,nu,rs,sr,tb,vr,ws " Die Farben von VIM in xterm if &term=="xterm" set t_Co=8 set t_AB=^[[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm set t_AF=^[[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm endif " Die Farben von Vim " Normaler Text (weiss auf schwarz) [Weiss sieht besser aus als Grau] hi normal term=NONE cterm=NONE ctermfg=white ctermbg=black "hi StatusLine term=NONE cterm=NONE ctermfg=yellow ctermbg=red "hi StatusLineNC term=NONE cterm=NONE ctermfg=black ctermbg=white " Bereiche, in denen kein Text vorhanden ist (Blau, Schwarz) hi nontext term=NONE cterm=NONE ctermfg=blue ctermbg=black " Suchergebnis (Weiss, Rot) hi search ctermfg=white ctermbg=red " Kommentare (Cyan, Schwarz) hi comment ctermfg=cyan ctermbg=black " Der Cursor [000429] hi Cursor term=NONE cterm=NONE ctermfg=green ctermbg=green " »hi Cursor« Funktioniert leider nicht wie gewünscht :-/ "" ---------------------------------------------------------------------------- "" Autocmds und Mappings "" ---------------------------------------------------------------------------- " Ich beginne fast alle Mappings mit ",". Grund: Praktisch kein Kommando beginnt " mit einem "," und das "," ist bei allen Keyboards an der selben Position. " Spezielle Einstellungen für Newspostings if has("autocmd") " Das sowieso :=) au FileType mail set tw=60 " Noch einmal gesondert, da ich nicht weiss, ob ich es für " Dateien != {Mail|News} ändern werde au FileType mail set expandtab au FileType mail set tabstop=3 " Jeder kann sehen, welchen Editor ich benutze! au FileType mail let @"="X-Editor: Vim-".version." http://www.vim.org\n"|exe 'norm1G}""P' endif " Signaturen nach Keywords auswählen nmap ,s :r!agrep -d "^-- $" ~/SIGS<S-LEFT> " Signaturen sollen nicht gequotet werden (nötig für Mutt, da der dies nicht von " alleine kann) map ,kqs G?^> *-- $<CR>d/^-- $/<C-M> if has("autocmd") autocmd BufRead /tmp/mutt* :normal ,kqs endif " Hiermit lassen sich wunderbar in Newsposting zu lange Zeilen umbrechen -> " Einfach die zu lange Zeile(n) im Visualmode auswählen und »Q« drücken. " Dies ist nötig, da unter VIM 4.x der Shortcut nur »Q« war, in Version 5.x aber " auf »gq« geändert wurde. map Q gq " Aus der gerade geladenen Datei eine HTML-Version (inkl. Syntaxhighlighting) " erstellen nmap 2HTML :so $VIMRUNTIME/syntax/2html.vim " ROT13 encoden/decoden [000613] " Anmerkung: Seit Vim 5.3 ist das nun als g? bzw. g?? an Bord. Siehe " ":help q?" vmap ,dr :!tr A-Za-z N-ZA-Mn-za-m " Eine Betreffszeile ändern (change-subject). Das alte Subjekt wird nach " X-Old-Subject kopiert: " " Subject: neues Subject " X-Old-Subject: altes Subject " " Eine andere Form ist: " " Subject: neues Subject (was: altes Subject) " map ,cs 1G/^Subject: <CR>yypIX-Old-<ESC>-W " Eine Mail "dringend" machen (make-letter-urgent) map ,mlu 1G}OPriority: urgent<ESC> " Den Empfänger einer Mail begrüssen, auf verschiedene Weisen map ,hi 1G}oHi!<CR><ESC> map ,he 1G}oHello, again!<CR><ESC> map ,ha 1G}oHallo!<CR><ESC> " Nun noch einige, mit dem Namen drin. map ;HI G/^\* /e+1<CR>ye1G}oHi, !<ESC>Po<ESC> map ;HE G/^\* /e+1<CR>ye1G}oHello, !<ESC>Po<ESC> map ;HA G/^\* /e+1<CR>ye1G}oHallo, !<ESC>Po<ESC> " Quoting trimmen vmap ,trimm c[...]<ESC> " Absenderadressen ändern " trash-from map ,tF 1G/^From: /e+1<CR>CThomas Bader <thomasb@trash.net><ESC> " domain-from map ,dF 1G/^From: /e+1<CR>CThomas Bader <thomas@t-bader.ch><ESC> " eniac-from map ,eF 1G/^From: /e+1<CR>CThomas Bader <thomasb@eniac.ch.eu.org><ESC> " Codeschnippsel etc. einfügen. Bsp: " " ,---[] " | Hier steht der Codeschnippsel " `---[] " imap QC_ ,------[]<CR><CR>`------[]<UP>\| " Supercite-Quotes entfernen. " Vorher: > Thomas> text " Nachher: > > text vmap ,kpq :s/^> *[a-zA-Z]*>/> >/<C-M> " Hiermit lassen sich komprimierte Dateien on-the-fly editieren, ohne das ein " manuelles entkomprimieren nötig wäre. augroup gzip " Alle GnuZIP-Kommandos entfernen au! " Das editieren von gzip-Dateien einschalten " (Der Binary-Modus wird benötigt) autocmd BufReadPre,FileReadPre *.gz,*.bz2 set bin autocmd BufReadPost,FileReadPost *.gz call GZIP_read("gunzip") autocmd BufReadPost,FileReadPost *.bz2 call GZIP_read("bunzip2") autocmd BufWritePost,FileWritePost *.gz call GZIP_write("gzip") autocmd BufWritePost,FileWritePost *.bz2 call GZIP_write("bzip2") autocmd FileAppendPre *.gz call GZIP_appre("gunzip") autocmd FileAppendPre *.bz2 call GZIP_appre("bunzip2") autocmd FileAppendPost *.gz call GZIP_write("gzip") autocmd FileAppendPost *.bz2 call GZIP_write("bzip2") " Im Puffer entpacken mit "cmd" fun! GZIP_read(cmd) let ch_save = &ch set ch=2 execute "'[,']!" . a:cmd set nobin let &ch = ch_save execute ":doautocmd BufReadPost " . expand("%:r") endfun " Datei wieder komprimieren mit "cmd" fun! GZIP_write(cmd) if rename(expand("<afile>"), expand("<afile>:r")) == 0 execute "!" . a:cmd . " <afile>:r" endif endfun " Datei anhängen mit "cmd" fun! GZIP_appre(cmd) execute "!" . a:cmd . " <afile>" call rename(expand("<afile>:r"), expand("<afile>")) endfun augroup END " Ein bisschen Spass muss sein! au VimLeave * echo "Thanks for using Vim"version"!" " [000429] Leider funktioniert das nicht immer :( Weiss jemand, wieso? "" ---------------------------------------------------------------------------- "" Tasten "" ---------------------------------------------------------------------------- " Mit welcher Taste kommt man aus dem Paste-Modus raus? set pastetoggle=<f11> " Welche Tasten können scrollen? set whichwrap=<,>,h,l " Diese Taste expandiert Wildcards set wildchar=<TAB> " Commandline im Emacs-Style. Obohl ich VI mag, bin ich sehr an diese Art der " Kommandozeile gewöhnt. Zum Editieren ist VI aber schon besser ;) cnoremap <C-A> <Home> cnoremap <C-B> <Left> cnoremap <C-E> <End> cnoremap <C-F> <Right> cnoremap <C-N> <End> cnoremap <C-P> <Up> cnoremap <ESC>b <S-Left> cnoremap <ESC><C-B> <S-Left> cnoremap <ESC>f <S-Right> cnoremap <ESC><C-F> <S-Right> cnoremap <ESC><C-H> <C-W> cnoremap <ESC>[D <Left> cnoremap <ESC>[C <Right> " Mappings für Cursortasten... " ersten für Solaris... map <ESC>OA <Up> map <ESC>OB <Down> map <ESC>OC <Right> map <ESC>OD <Left> imap <ESC>OA <Up> imap <ESC>OB <Down> imap <ESC>OC <Right> imap <ESC>OD <Left> " dann fürs X-Terminal map <ESC>[A <Up> map <ESC>[B <Down> map <ESC>[C <Right> map <ESC>[D <Left> imap <ESC>[A <Up> imap <ESC>[B <Down> imap <ESC>[C <Right> imap <ESC>[D <Left> "" ============================================================================ "" Ende der Datei "" ============================================================================