"------------------------------------------------------------------------------- " "~/.vimrc"-Konfiguration für Vim (C) 2005-2012 T.Birnthaler OSTC GmbH " (analog "~/.exrc" für echten Vi und "~/.gvimrc" für Gvim) " $Id: vimrc,v 1.23 2012/02/22 15:33:15 tsbirn Exp tsbirn $ "------------------------------------------------------------------------------- " HINWEISE " * Mit :mkvimrc aus dieser Datei eine max. kurze erzeugen (Speed!) " (einiges dort rauslöschen, z.B. window=..., Aufruf mit vim -u vimrc) " (speichert Funktionen nicht ab!) " * Lange Optionsnamen verwendet, für viele gibt es 2/3-buchstabige Abkürzungen " (z.B. 'sm'='showmode', 'nu'=number, 'ff'=fileformat) " * Kommentar wird durch " eingeleitet (manchmal nur am Zeilenanfang erlaubt!) " * Nur für den Gvim geeignete Optionen sind mit GVIM gekennzeichnet " * Mit "DO!" gekennzeichnete Optionen sollten GESETZT sein ;-) " * Mit "DONT!" gekennzeichnete Optionen besser NICHT setzen ;-( " * Mit "SET" kennzeichnet die Beeinflussung anderer Optionen " TODO " * Automatische Einrückung im .vimrc abschalten " * Typ der Option (B)ool, N)umber, S)tring) erwähnen " * Kurzform der Optionen überall ergänzen " * Überall Standard-Wert ergänzen (Std: XXX) " * Optionsnamen in '...' statt "..." " * Register "a != Puffer/Buffer = Fenster + ... "------------------------------------------------------------------------------- " INHALTSVERZEICHNIS "------------------------------------------------------------------------------- " 0) In Präsentation vor/zurück + zu Inhaltsverzeichnis/Folie springen (TRICK!) " 1) Vi/Ex/Ed-Kompatibilität " 2) Lokale Konfiguration " 3) Bildschirm-Darstellung " 4) Darstellung zu langer Zeilen (KEIN Umbruch!) " 5) Umbruch zu langer Zeilen " 6) Bewegung " 6b) Horizontal Scrollen " 7) Texteingabe " 8) Datei-Format und -Backup " 9) Such- und Ersetzungs-Einstellungen " 10) Tabulatoren (, CTRL-i> " 11) Programmierung " 12) Syntax-Highlighting " 13) Farben für Syntax-Highlighting selber definieren " 14) Faltung ("zusammenklappen" von Programmteilen) ??? " 15) Maus-Konfiguration " 16) Drucker-Einstellungen (für Ausdruck per :hardcopy oder :hardcopy!) " 17) Sonstige Einstellungen " 18) Lese-, Schreib- und Änderungsberechtigung " 19) Standard-Shell für !... " 20) Autom. Text-Vervollständigung im Einfügemodus per +... " 21) Tags " 22) man-Pages " 23) Autokommandos " 24) Swap-Datei und File-Synchronisation (FILE.swp, FILE.swo, .swn, ...) " 25) Debugging " 26) GUI " 27) Hilfe " 28) Text-Elemente definieren " 29) Fenster-Verhalten " 30) Vervollständigung (Completion, Wildcard) " 31) Grenzwert-Einstellungen " 32) Terminal-Einstellungen " 33) Mapping-Einstellungen " 34) Viminfo, Sessions und Views " 35) Noch nicht einsortierte Optionen " 36) Nicht relevante Optionen " 37) Mausbewegungen (GUI, aber auch in Terminal aktivierbar) " " 50) Eigene Befehle " 51) Abbreviation/Abkürzungen (z.B. zur Fehlerkorrektur - teilweise inaktiv) " 52) Maps = Tasten/Funktionstasten belegen (ruft häufig Funktion auf) " 53) LaTeX-Erweiterungen ??? HTML-Erweiterungen " 54) Programmierung " 55) Funktionsdefinitionen "------------------------------------------------------------------------------- " MUSS hier stehen, da später evtl. je nach Dateityp überschrieben " Durch mehrere Dateien springen " (+=nächste Datei, -=vorherige, #=aktuelle schreiben und zu nächster springen) function! ActivateSkipFileCmds() map + :n map - :prev map # :w:n endfunction autocmd! BufRead,BufNewFile !*.c !*.pres !*.txt call ActivateSkipFileCmds() " MUSS hier stehen, da später evtl. je nach Dateityp überschrieben " Return entfernt/erneuert Suchmusterhighlighting (Toggle) " (/ leert Statuszeile um Verwirrung zu vermeiden!) " (ACHTUNG: Das Leerzeichen nach ist notwendig!) nnoremap :set invhls/ "------------------------------------------------------------------------------- " 0) In Präsentation "*.pres" vor/zurück + zu Inhaltsverzeichnis/Folie springen " Evtl. Verzögerung um N Sekunden per "Ngs" einbauen (TRICK!) "------------------------------------------------------------------------------- " # = Inhaltsverzeichnis " _ = Inhaltsverzeichnis -> Kapitel " + = Kapitel vor " - = Kapitel zurück " ^ = Vorheriger Unterpunkt (* am Zeilenanfang) " * = Nächster Unterpunkt (* am Zeilenanfang) " T = Todo "------------------------------------------------------------------------------- function! ActivatePresentationCmds() map # /^INHALTSVERZEICHNISzk4j0:set nohls/ map + H/^=\+\n.*\n^=\+z4j0:set nohls/ map - Hk?^=\+\n.*\n^=\+z4j0:set nohls/ " map * /^\*z0:set nohls/ map * z/^\*0:set nohls/ map ^ ?^\*z0:set nohls/ map T /^todokz4j0:set nohls/ " Hilfe: :he cmdline-completion mit nnoremap _ yy/"kz4j:set nohls/ "echo "*.pres -> Activated Presentation Commands!" endfunction autocmd! BufRead,BufNewFile *.pres call ActivatePresentationCmds() autocmd! BufRead,BufNewFile *.txt call ActivatePresentationCmds() "------------------------------------------------------------------------------- " 1) Vi/Ex/Ed-Kompatibilität "------------------------------------------------------------------------------- " VIM-Zusätze aktivieren (NICHT Vi-kompatibles Verhalten, DO!) " (IMMER ganz am Anfang setzen/löschen, da es andere Optionen ändert!) " (fehlt "~/.vimrc", dann gesetzt!) set nocompatible " Vi-Standard-Verhalten in einzelnen Fällen doch aktivieren (40 Unter-Optionen!) " (z.B. $ = "$" an Ende des mit "c" zu ändernden Texts setzen statt zu löschen) "set nocompatible -> set cpo=aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<> "set compatible -> set cpo=aABceFs "set cpoptions+=$ " Änderung in Zeile setzt "$" an Ende des geänd. Texts " Optionen "g" + "c" in Kommando ":s" Ed-kompatible machen (DONT!) "set edcompatible "------------------------------------------------------------------------------- " 2) Lokale Konfiguration "------------------------------------------------------------------------------- " Mode-Zeilen am Dateianfang/Ende ignorieren (Security!) set nomodeline " Anzahl erlaubter Zeilen für 'modeline' ist LEER (Std: 1 vorne + 5 letzte) set modelines=0 " Konfigurationsdatei ".vimrc"... im aktuellen Verzeichnis NICHT einlesen " (evtl. ein Sicherheitsproblem! -> 'secure' setzen) set noexrc " ":autocmd" ":shell" ":write" in Konf.dateien im akt. Verz. NICHT erlaubt (DO!) " sowie Map-Kommandos anzeigen (insbesondere falls 'exrc' gesetzt!) set secure "------------------------------------------------------------------------------- " VORTRAG SCREEN MODE " 3) Bildschirm-Darstellung "------------------------------------------------------------------------------- " Editmodus-Anzeige in Statuszeile links unten (DO!) " (-- EINFÜGEN --, -- VISUELL ... --, -- ERSETZEN --) set showmode " Kmdo-Wiederholungsfaktoren und Teilkmdos rechts in Statuszeile anzeigen (DO!) set showcmd " Hinweis in Statuszeile ab 1 geänderte/gelöschte/eingefügte Zeilen (DO!) set report=0 " Höhe des Command-Line Bereichs (>1 vermeidet "Bitte Enter drücken"-Prompt) set cmdheight=1 " Taste zum Öffnen des Command-Line Fensters (Std: ) "set cedit= " Höhe des Command-Line Fensters (Std: 7) "set cmdwinheight=7 " Format der Statuszeile definieren (:help 'statusline', komplex!) "set statusline= " Default "set statusline=%h%m%r "set statusline=%t\ [%M%r%{&ff}]\ [%L/%04l,%04v,%p%%] " Statuszeile in Fenster anzeigen (0=Nie, 1=nur ab 2 Fenstern, 2=immer) set laststatus=2 " Koordinatenanzeige in Statuszeile aktivieren (DO!) " (SET 'paste' -> 'noruler') set ruler " Format der Koordinatenanzeige definieren (:help 'rulerformat', komplex!) "set rulerformat=... " Cursor-Koordinatenkreuz aktivieren (Zeile + Spalte getrennt) "set cursorline "set cursorcolumn " Dateinamen als Fenster-Titel anzeigen (nicht bei allen Terminals möglich) set title " Dateinamen als Fenster-Titel anzeigen "set titlelen=50 " Prozent. Anteil der für Fenster-Titel benutzten Breite "set titleold=... " F.Titel falls vorheriger beim Verlassen nicht restaurierbar "set titlestring=... " Fenster-Titel manuell festlegen (=Dateiname) " Dateinamen im Icon anzeigen set icon " Dateinamen als Icon-Titel anzeigen "set iconstring= " Icon-Titel manuell festlegen (=Dateiname) " Zeilen NICHT numeriert darstellen (Stdbreite: 4) set nonumber "set numberwidth=4 " Tabs und Zeilenenden NICHT anzeigen (siehe lcs = listchars) " (Std: "^I" für TABs und "$" für Zeilenenden) set nolist " Bei 'list' Sonderzeichen wie anzeigen (lcs=listchars, Std: lcs=eol:$) " (DIE EIGENTLICHE DEFINITION IST WEITER UNTEN IN FUNKTION ToggleListmode!) " tab:AB = Tabulator (1. + restliche Zeichen bis Tabpos, Std: ^I) " trail:C = Leerzeichen am Zeilenende (Std: leer) " eol:C = Zeilenende (Std: $) " precedes:C = In 1. Terminalspalte falls "nowrap" und Zeichen davor " extends:C = In letzter Terminalspalte falls "nowrap" und Zeichen danach " nbsp:C = Nicht umbrechbares Leerzeichen (Code 160, Std: leer) ??? "set listchars=tab:»\ ,trail:·,eol:$,precedes:«,extends:»;nbsp:· " Variante 1 "set listchars=tab:»­,trail:·,eol:$,precedes:«,extends:»;nbsp:· " Variante 2 "set listchars=tab:»­,trail:·,eol:¶,precedes:«,extends:»;nbsp:· " Variante 3 "set lcs=tab:»° "set lcs=tab:»· "set lcs=tab:»¬ "set lcs=tab:»¨ set lcs=tab:»­ set lcs+=trail:· set lcs+=eol:¶ set lcs+=precedes:« set lcs+=extends:» if v:version >= 700 set lcs+=nbsp:· endif " VORTRAG ERROR DISPLAY " Bei Fehlern (z.B. 2x ) nicht piepsen, sondern visuelle Anzeige set noerrorbells set visualbell " Bei einigen Befehlen (z.B. :q) Y/N-Dialogbox anzeigen statt abbrechen (DONT!) "set confirm " Ausgaben länger als eine Seite MIT Pause und Anzeige von "More" set more " Warnungen/Fehlermeldungen verkürzt bzw. ausführlicher darstellen " (Statuszeilenlänge verkürzen!) set shortmess=a " Guter Standard (a=filmnrwx) set shortmess+=I " Banner/Startschchirm nicht anzeigen (":intro") set shortmess+=oO " Einige Statusmeldungen überschreiben set shortmess+=tT " Zu lange Dateinamen und Meldungen abschneiden set shortmess+=s " Meldung "Suche erreicht Anfang/Ende" weglassen set shortmess-=AW " Weggelassene Einstellungen! set terse " s-Flag in "shortmess" set warn " Warnung bei Shell-Kmdo + Datei verändert " VORTRAG LASTLINE " Anzeige einstellen " lastline: Zu lange letzte Zeile nicht als "@" darstellen sondern Anfangsteil " uhex: Steuerzeichen als statt "^C" und "~C" darstellen set display=lastline " Zeichen zur Darstellung der Fenster-Statuszeile und -Trennlinien " (Std: ???) " stl:C = Statuszeile aktuelles Fenster " stlnc:C = Statuszeile inaktive Fenster " vert:C = Vertikale Fenstertrenner (:vsplit) " fold:C = Füllzeichen für "foldtext" ??? " diff:C = Gelöschte Zeile bei "diff" "fillchars=vert:|,fold:- "set fcs=stl:^ "set fcs+=stlnc:- "set fcs+=vert:| "set fcs+=fold:- "set fcs+=diff:- " WIN32: Vorherigen Bildschirm-Inhalt beim Verlassen des Vim restaurieren set restorescreen " Highlighting verschiedener Objekte einstellen (:help 'highlight', komplex!) "set highlight=KEY:GROUP,... "set highlight=8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine " Text von rechts nach links darstellen (DONT!) " ( wechselt zw. 'rightleft' und 'norightleft') "set rightleft "------------------------------------------------------------------------------- " VORTRAG LONG LINES " 4) Darstellung zu langer Zeilen (KEIN Umbruch!) "------------------------------------------------------------------------------- " Zeilen breiter als Terminal NICHT "umbrechen" sondern "Scrollen" " ('wrap' -> nur Darstellung, es wird NICHT wirklich umgebrochen!) set nowrap " Bei 'wrap' Zeilen statt im Wort am Zl.ende nur an "schönen" Stellen umbrechen " (nur Darstellung, es wird NICHT wirklich umgebrochen!) set linebreak " Auswahl der Zeichen, bei denen mit "'linbreak' bei 'wrap' umgebrochen wird " (Leerzeichen schützen: "\ "!) set breakat=\ ^I!@*-+;:,./?" " Bei 'wrap' am Anfang der Fortsetzungszeilen als Hinweis einfügen " (set showbreak= bedeutet KEINEN Hinweis auf Umbruch anzeigen) set showbreak= " Bei 'nowrap' zu lange Zeilen nicht umbrechen, sondern horizontal "scrollen" " 1 Zeichen breit scrollen falls Rand erreicht (schnelles Terminal nötig!) set sidescroll=1 " Mind. Rand der Breite 'sidescrolloff' als Kontextinfo sichtbar (0=kein) set sidescrolloff=0 "------------------------------------------------------------------------------- " 5) Umbruch zu langer Zeilen "------------------------------------------------------------------------------- " Bei Eingabe autom. Umbruch NN Zeichen vor rechtem Rand (0=kein Umbruch) " 'paste' -> 'wrapmargin=0' set wrapmargin=0 " Maximale Breite für eingefügten Text (0=inaktiv, Alternative zu 'wrapmargin') " (ACHTUNG: überschreibt 'wrapmargin', wirkt auch in Makros/Funktionen!) " 'paste' -> 'textwidth=0' set textwidth=0 "------------------------------------------------------------------------------- " VORTRAG MOVEMENT " 6) Bewegung "------------------------------------------------------------------------------- " Tasten am Zeilenanfang/ende erlauben, zur vorher./nächsten Zeile zu gehen " (Std: b,s; normal "blockiert" Cursor am Zeilenanfang/ende!) " b = Backspace " s = Space " < = Cursor-Left " > = Cursor-Right, " h = "h"=Zeichen nach links (VERMEIDEN!) " l = "l"=Zeichen nach rechts (VERMEIDEN!) " ~ = Change-case " [ = Cursor-Left (Insert) " ] = Cursor-Right (Insert) "set whichwrap="b,s,<,>,~,[,]" " ACHTUNG: Einbetten in "..." ist FALSCH! set whichwrap=b,s,<,>,~,[,] " Beim Einfügen bewegen über "Startpunkt" zurück " (Veraltet: 0=Nein/Vi-kompatibel, 1=indent,eol, 2=indent,eol,start) " indent = Durch Autoindent entstanden " eol = Zeilenumbruch " start = Start des Einfügemodus set backspace=indent,eol,start " Cursortasten sind im Einfügemodus verwendbar (beginnen mit ) set esckeys " Cursor darf "überallhin" (auch wo kein Zeichen ist; all + onemore ist Unsinn!) " block = Im Visual-Mode (v V CTRL-v, Rechtecke zeichnen!) " insert = Im Insert-Mode (erzeugt nötige Leerzeichen!) " all = In allen Modi (auch beim Bewegen, erzeugt nötige Leerzeichen!) " onemore = Cursor kann 1 Zeichen hinter Zeilenende set virtualedit=block " Cursor bleibt bei best. Bewegungen in aktueller Spalte stehen " (d.h. springt NICHT zur 1. nichtleeren Zeichen!) " (z.B. bei G H M L gg d << >>) set nostartofline " Bewegung in überlangen "wrapped" Zeilen analog wie in physikalischen Zeilen map j gj map k gk "------------------------------------------------------------------------------- " VORTRAG HORIZONTAL SCROLL " 6b) Horizontal Scrollen "------------------------------------------------------------------------------- " Zeilenzahl beim vertikal Scrollen mit / (0=halbe Terminalhöhe) set scroll=0 " Zeilenzahl 1 um die mind. gescrollt wird (>1 für langsame Terminals) set scrolljump=1 " Min. Zeilenabstand des Cursors vom oberen/unteren Terminalrand (0=keiner) set scrolloff=0 " Alle Fenster mit dieser Option scrollen gemeinsam set scrollbind " ??? " Verhalten der zum Scrollen per 'scrollbind' verbundenen Fenster " ver = Vertikal verbunden " hor = Horizontal verbunden " jump = Relative Offsets bei Fensterwechel beibehalten (???) set scrollopt=ver,jump "------------------------------------------------------------------------------- " 7) Texteingabe "------------------------------------------------------------------------------- " Sonderzeichen mit Backspace-Methode erstellen, z.B. "ä" durch a: :a " (BESSER: ä = a: :a - vollständige Liste durch :dig) " (TIP: Eigenen Digraph definieren - :digraphs CHARCODE1 CHARCODE2 RESULTCODE) "set digraph " Tilde ist KEIN Operator (d.h. mit Bewegung kombinierbar, z.B. ~w = WORT) " (wirkt nur auf aktuelles Zeichen bzw. mit Wiederholungsfaktor auf ..., DONT!) " (BESSER: g~ verwenden) set notildeop " Einfüge-Modus ist Standard-Modus (Evim = Easy Vim, evtl. für Ungeübte, DONT!) " ("Almost Modeless Editing" - CTRL-o leitet normales Vim-Kommando ein!) "set insertmode " Taste Backspace und Delete vertauschen (DONT!) ":fixdel " Tasten im Insert-Modus direkt, im Kommando-Modus übersetzen "set langmap=... " Tasten im Insert-Modus übersetzen, im Kommando-Modus direkt "set keymap=... " Text im Insert-Modus von rechts nach links (rückwärts) einfügen (DONT!) " (SET 'paste' -> 'norevins') "set revins " Umschalten zw. "revins" und "norevins" durch erlauben "set allowrevins " Beim "Einfügen" von Text aus anderem Fenster mit X Window Maus-Select " viele Sonderfunktionen des Vim abschalten - mit aus/einschalten " (Nur bei Bedarf im Einfügemodus einschalten, sonst wird zuviel deaktiviert!) " 'paste' -> 'textwidth=0' " 'paste' -> 'wrapmargin=0' " 'paste' -> 'noautoindent' " 'paste' -> 'nosmartindent' " 'paste' -> 'nocindent' " 'paste' -> 'softtabstop=0' " 'paste' -> 'nolisp' " 'paste' -> 'norevins' " 'paste' -> 'noruler' " 'paste' -> 'noshowmatch' " 'paste' -> 'formatoptions=' set nopaste set pastetoggle= " Entspricht map :set invpaste/ " 2 Leerzeichen nach ".?!" bei "J"=Join abschalten (durch "compatible" gesetzt) set nojoinspaces " Wie wird GROSS/kleinschreibung per "~" \U \u \L \l ineinander umgewandelt " internal = ??? " keepascii = ??? "set casemap=internal,keepascii " Erlaubte Zahlenformate für Inkrement + Dekrement Kommando " (zum Testen Cursor auf Zahl und / drücken: j 15 010 0x11) set nrformats=alpha,octal,hex "------------------------------------------------------------------------------- " 8) Datei-Format und -Backup "------------------------------------------------------------------------------- " Byte Order Mark an Datei-Anfang plazieren ??? set nobomb " Dateityp erkennen (für Syntax-Highlighting, Autokommandos, ...) " (normalerweise durch "Extension" oder "Shee-Bang-Zeile" festgelegt) " Dateityp-Erkennung (Einrücken, Plugins auch) "filetype plugin indent on " Dateityp der aktuellen Datei (für Syntax-Coloring, auto. gesetzt, DONT!) "set filetype=vim " In dieser Reihenfolge automatisch gemäß Dateiinhalt zu erkennende Dateiformate " Geles./akt. Dateiformat (Konvertieren durch ändern von 'fileformat') " (ersetzt 'textauto' und 'textmode') set fileformats=unix,dos,mac " ACHTUNG: MIT "s" ffs "set fileformat= " ACHTUNG: OHNE "s" ff: Automatisch gesetzt " Beim Speichern KEINE Backup-Dateien erzeugen (Dateiname + "~" dahinter) set nobackup set backupcopy=auto " Umbenennen oder Kopieren (Link, UNIX) set backupdir=.,~/tmp,~/ " Wo liegen Backups (erstes funkt. verwenden) set backupext=~ " Suffix für Backup-Dateien (z.B. ".bak") set backupskip=/tmp/*,/var/tmp/* " Hierfür keine Backup-Dateien erstellen "set patchmode=.org " 1. Ändern einer DATEI? -> "DATEI.org" erz. set writebackup " Vor Überschreiben einer Datei tmp. Backup " Setzt ans Ende der letzten Zeile IMMER ein (DO!) " ('noendofline' nur zusammen mit 'binary') " 'textwidth' -> 0 " 'wrapmargin' -> 0 " 'nomodeline' " 'noexpandtab' " 'fileformats' -> nicht benutzt " 'fileformat' -> nicht benutzt " 'fileencoding' -> nicht benutzt " 'fileencodings' -> nicht benutzt set endofline " Binärmodus abschalten (:help xxd -> Hilfe zu einer besseren Möglichkeit, DONT!) " (keine Umwandlung von Zeilenenden beim Lesen/Schreiben, Option -b) set nobinary " Standard-Zeichensatz fuer bereits vorhandene Dateien (Reihenfolge wichtig!) "set fileencodings=ucs-bom "set fileencodings=iso-8859-15,utf-8,cp437 "set fencs? zum Abfragen verwenden " Standard-Zeichensatz fuer NEUE Dateien erzwingen "set fileencoding=iso-8859-15 "setglobal fileencoding=iso-8859-15 "set fenc? zum Abfragen verwenden " Terminalemulation erzeugt UTF-8 Zeichen (wichtig!) "set termencoding=utf-8 " Im Vi intern verwendete Kodierung (aus fileencoding abgeleitet) "set encoding=iso-8859-15 "------------------------------------------------------------------------------- " VORTRAG SEARCH " 9) Such- und Ersetzungs-Einstellungen "------------------------------------------------------------------------------- " Suche über Dateiende/anfang hinweg erlauben " (Meldung: "Suche erreichte ANFANG/ENDE und wurde am ENDE/ANFANG fortgesetzt") set wrapscan " GROSS/kleinschreibung bei Suche NICHT beachten " (ABSCHALTEN mit \C, EINSCHALTEN mit \c im Suchmuster = case!) " ('smartcase' -> außer Grossbuchstabe kommt im Suchmuster vor, z.B. " SmartCase, SMARTcase, smartCASE, SmArTcAsE, sMaRtCaSe, smartcase) set ignorecase set smartcase " Während Eingabe eines Suchmusters bereits suchen (inkrementell) " Alle zu keinem Suchmuster passenden Textstücke markieren (highlight) " (:nohlsearch 'invhls' schaltet Markierungen, 'invhls' invertiert sie!) " :highlight IncSearch term=reverse cterm=reverse " :highlight Search term=reverse ctermfg=0 ctermbg=3 set incsearch set hlsearch " Flag "g=global" bei Substitute (":s") automatisch setzen (DONT!) "set gdefault " Form der Sonderzeichen in Regulären Ausdrücken ändern (DONT!) " (\v \V \m \M ???) " (magic: . [ ] ^ $ * \+ = \( \) \{ \} \| " nomagic: \. \[ \] \^ \$ \* + \= ( ) { } | set magic "------------------------------------------------------------------------------- " VORTRAG TABS " 10) Tabulatoren (, CTRL-i> "------------------------------------------------------------------------------- " Tabulatorbreite (Std: 8) set tabstop=4 " 'autoindent', 'cindent', ">>" und "<<" rücken um 4 Zeichen ein/aus " ">>" und "<<" auf diese Positionen runden, unabhängig von Startposition set shiftwidth=4 set shiftround " Tab-Stopps in diesem Abstand simulieren (Mischung aus SPACE + TAB verwenden) " SET 'paste' -> 'softtabstop=0' "set softtabstop=4 " Bei -Eingabe Blanks+Tabs gemäß 'shiftwidth' einfügen (abh. 'expandtab') "set smarttab " Eingetippte Tabulatoren zu Leerzeichen expandieren (vorhandene nicht, DONT!) " (vorhandene Tabulatoren durch "1!Gexpand" in Leerzeichen umwandeln) "set expandtab "------------------------------------------------------------------------------- " VORTRAG PROG " 11) Programmierung "------------------------------------------------------------------------------- " Partner-Klammer bei Eingabe einer Klammer "()[]{]<>" kurz anzeigen " (berücksichtigt Verschachtelung, piepst wenn kein Partner da ist) " 'paste' -> 'noshowmatch' set noshowmatch " Klammern, die Klammer-Eingabe und Sprung zur Partner-Kl. "%" berücksichtigen " EXOTISCH: :au FileType c,cpp,java set mps+==:; ??? " TEST: [((([[[(((<<<((()))>>>)))]]])))] set matchpairs= set mps+=(:) set mps+=[:] set mps+={:} set mps+=<:> " Wie lange wird korrespondierende Klammer markiert (in 1/10-Sekunden) set matchtime=2 " Markieren der korrespondierenden Klammer während der Eingabe abschalten " (entsprechendes Plugin "matchparen" bzw. "matchit" wird nicht mehr geladen) "let loaded_matchparen=1 "let loaded_matchit=1 " Automatische Formatierung bei Eingabe und "gq" steuern (:help fo-table) " 'paste' -> 'formatoptions=' " t = Text/Code(!) autom. mit 'textwidth' umbrechen (nicht Kommentare) " c = Kommentar autom. mit 'textwidth' umbrechen (Kom.zeichen autom. einfügen) " r = Kommentarzeichen bei neuer Zeile per autom. einfügen (return) " o = Kommentarzeichen bei neuer Zeile per "o/O" autom. einfügen (open) " q = Kommentare dürfen mit "gq" formatiert werden " 2 = Einrückung der 2.Zeile für Formatierung zählt, die der 1.Zeile ignorieren " v = Alter Einrückungsstil gemäß "Vi" (Umbruch nur bei eingetippten Blanks) " b = Umbruch nur bei eingetippten Blanks vor 'textwidth' (danach nicht mehr) " l = Zeilen im Insert-Mode nicht umbrechen (nur "gq" bricht Zeilen um) " w = ??? " a = ??? " n = ??? " m = ??? " M = ??? " B = ??? " 1 = ??? " (Vim-Std: tcq, Vi-Std: vt) "set formatoptions=tcqr "set formatoptions=tcq "set formatoptions+=2 " Externes Programm für Textumbruch auswählen (LEER=internes verwenden) "set formatprg=/usr/bin/fmt " Ausdruck für "gq"-Kommando zum Textumbruch (Std: ) "set formatexpr= " Externes Programm für Befehl "=" auswählen (leer -> interne Funktion nutzen!) "set equalprg= " Externes Suchprogramm für ":grep" auswählen "set grepprg=grep -n $* /dev/null " Erkennen des ":grep"-Outputs "grepformat=%f:%l:%m,%f:%l%m,%f %l%m " Externes Programm für ":make" auswählen "set makeprg=make " Format zum Erkennen von Fehlermeldungen diverser Compiler und von "make" " :help errorformat "errorformat=%f:%l:%m,%f:%l%m,%f %l%m " Fehler-Dateiname für ":make" und ":grep" (make error file) "set makeef=/tmp/vim##.err " Standard-Fehler-Datei für QuickFix-Modus (":clist", ...) ??? "set errorfile=errors.err " Woran werden Listen beim automatisch Formatieren erkannt ??? "set formatlistpat=^\s*\d\+[\]:.)}\t ]\s* " NICHT automatisch gemäß Einrückungstiefe der vorherigen Zeile einrücken " ( rückt um 1 Stufe ein, rückt um 1 Stufe aus) " 'paste' -> 'noautoindent' " 'paste' -> 'nosmartindent' " (Qualität: autoindent -> smartindent -> cindent) set noautoindent " ??? set nosmartindent " 'cindent' -> 'nosmartindent' " Wie verhält sich die automatische Einrückung set nocopyindent " Einrückungsstruktur von Zeile vorher NICHT behalten set nopreserveindent " Einrückungsstruktur akt. Zeile bei >><< behalten " Automatisch einrücken für C-Programme NICHT aktivieren (statt "smartindent") " SET 'cindent' -> 'noautoindent " SET 'cindent' -> 'nosmartindent' " SET 'paste' -> 'nocindent' set nocindent " Tasten die Einrückung auslösen, falls 'cindent' gesetzt "set cinkeys=0{,0},0),:,0#,!^F,o,O,e " Einstellungen für 'cindent' "set cinoptions=:0,p0,t0 "set cinoptions=>4 " Welche Worte lösen Einrückung gemäß 'cindent' und 'smartindent' aus? "set cinwords=if,else,while,do,for,switch,case " Definition wie Kommentare aussehen (für Kommentarformatierung nötig) ??? " Mit gq{BEWEGUNG}, gqq oder {VISUAL}gq bzw. gw... (Cursorposition behalten) "set comments=s1:/*,mb:*\end{x:*/,://\begin{:#,:%,:XCOMM,n:>,fb:- ??? "------------------------------------------------------------------------------- " VORTRAG SYNTAX " 12) Syntax-Highlighting "------------------------------------------------------------------------------- " Aktuelle eingestellte Sprache für Syntax-Hervorhebung (auto. gesetzt, DONT!) "set syntax=vim " Syntax-Highlighting aus/einschalten (abh. von Datei-Endung/Shee-Bang-Zeile) "syntax off " Ausschalten "syntax on " Einschalten, eigene Einstellungen überschreiben syntax enable " Einschalten, eigene Einstellungen NICHT überschreiben " colorscheme = Syntaxcoloring-Farb-Schema (in $VIMRUNTIME/colors/*): " Vordefinierte Colorschemes (unter www.vim.org noch viel mehr!): " Qty Hintergrund Vordergrund " blue --- dunkelblau hoher Kontrast " darkblue +++ schwarz niedriger Kontrast " default +++ weiß niedriger Kontrast " delek +++ weiß hoher Kontrast " desert --- weiß niedriger Kontrast " elflord --- weiß hoher Kontrast " evening --- schwarz hoher Kontrast " koehler --- weiß hoher Kontrast " morning --- rosa niedriger Kontrast " murphy --- scharz hoher Kontrast " pablo --- weiß schwarz " peachpuff +++ weiß braun " ron --- weiß hoher Kontrast " shine +++ rosa hoher Kontrast " slate +++ weiß hoher Kontrast " torte --- schwarz mittlerer Kontrast " zellner +++ weiß hoher Kontrast " (TIPP: Auflisten mit: :colo ) colorscheme peachpuff " Hintergrund-Helligkeit definieren ("dark" oder "light"), " (Syntax-Highlighting wird daran angepasst) set background=light " Definiert Funktion für Insert Mode Omni Completion per " (:help i_CTRL-x_CTRL-o) "set omnifunc=... " VORTRAG SYNTAX MAXCOL " Syntax-Coloring nur bis zu dieser Spalte (Speed bei langen Zeilen, Std: 3000) if v:version >= 700 set synmaxcol=500 endif " Highlighting verschiedener Objekte einstellen (:help 'highlight', komplex!) "set highlight=KEY:GROUP,... "set highlight=8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine "------------------------------------------------------------------------------- " 13) Farben für Syntax-Highlighting selber definieren "------------------------------------------------------------------------------- " Statement-Elemente dunkelblau statt gelb (sonst schwer lesbar!) hi statement ctermfg=darkblue guifg=darkblue " Variablen schwarz statt gelb (sonst schwer lesbar!) hi identifier ctermfg=black guifg=black " Mögliche cterm-Farben bei "xterm-color" " ctermfg ctermbg " 0 = schwarz 0 = schwarz " 1 = braun 1 = braun " 2 = dunkelgrün 2 = dunkelgrün " 3 = gelb/ocker 3 = gelb/ocker " 4 = blau 4 = blau " 5 = violett 5 = violett " 6 = türkis 6 = türkis " 7 = grau 7 = grau " 8 = schwarz 8 = weiß " red = rot " yellow = gelb " green = hellgrün " blue = dunkelblau " " Mögliche GUI-Farben: " White Black Brown " Orange Purple Violet " SeaGreen SlateBlue " Gray LightGray DarkGray " Grey LightGrey DarkGrey " Yellow LightYellow DarkYellow " Red LightRed DarkRed " Green LightGreen DarkGreen " Blue LightBlue DarkBlue " Cyan LightCyan DarkCyan " Magenta LightMagenta DarkMagenta " " Mögliche Syntax-Gruppen: " Comment = ??? " Constant = ??? " Identifier = ??? " Statement = ??? " PreProc = ??? " Type = ??? " Special = ??? " Underlined = ??? ??? " Ignore = ??? " Error = ??? " Todo = ??? " " Dunkler Hintergrund: " SynColor Comment term=bold cterm=NONE ctermfg=Cyan ctermbg=NONE gui=NONE guifg=#80a0ff guibg=NONE " SynColor Constant term=underline cterm=NONE ctermfg=Magenta ctermbg=NONE gui=NONE guifg=#ffa0a0 gu " SynColor Special term=bold cterm=NONE ctermfg=LightRed ctermbg=NONE gui=NONE guifg=Orange guibg=N " SynColor Identifier term=underline cterm=bold ctermfg=Cyan ctermbg=NONE gui=NONE guifg=#40ffff g " SynColor Statement term=bold cterm=NONE ctermfg=Yellow ctermbg=NONE gui=bold guifg=#ffff60 guib " SynColor PreProc term=underline cterm=NONE ctermfg=LightBlue ctermbg=NONE gui=NONE guifg=#ff80ff " SynColor Type term=underline cterm=NONE ctermfg=LightGreen ctermbg=NONE gui=bold guifg=#60ff60 " hi type term=underline cterm=NONE ctermfg=Green ctermbg=NONE gui=bold guifg=#60ff60 " hi identifier term=underline cterm=NONE ctermfg=Yellow ctermbg=NONE gui=bold guifg=#60ff60 " SynColor Underlined term=underline cterm=underline ctermfg=LightBlue gui=underline guifg=#80a0ff " SynColor Ignore term=NONE cterm=NONE ctermfg=black ctermbg=NONE gui=NONE guifg=bg guibg=NONE " SynColor Error term=reverse cterm=NONE ctermfg=White ctermbg=Red gui=NONE guifg=White guibg=Red " SynColor Todo term=standout cterm=NONE ctermfg=Black ctermbg=Yellow gui=NONE guifg=Blue guibg= " " Heller Hintergrund: " SynColor Comment term=bold cterm=NONE ctermfg=DarkBlue ctermbg=NONE gui=NONE guifg=Blue guibg=NON " SynColor Constant term=underline cterm=NONE ctermfg=DarkRed ctermbg=NONE gui=NONE guifg=Magenta gu " SynColor Special term=bold cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=SlateBlue g " SynColor Identifier term=underline cterm=NONE ctermfg=DarkCyan ctermbg=NONE gui=NONE guifg=DarkC " SynColor Statement term=bold cterm=NONE ctermfg=Brown ctermbg=NONE gui=bold guifg=Brown guibg=N " SynColor PreProc term=underline cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=Purple " SynColor Type term=underline cterm=NONE ctermfg=DarkGreen ctermbg=NONE gui=bold guifg=SeaGreen " hi type term=underline cterm=NONE ctermfg=LightGreen ctermbg=NONE gui=bold guifg=SeaGreen " SynColor Underlined term=underline cterm=underline ctermfg=DarkMagenta gui=underline guifg=Slate " SynColor Ignore term=NONE cterm=NONE ctermfg=white ctermbg=NONE gui=NONE guifg=bg guibg=NONE " SynColor Error term=reverse cterm=NONE ctermfg=White ctermbg=Red gui=NONE guifg=White guibg=Red " SynColor Todo term=standout cterm=NONE ctermfg=Black ctermbg=Yellow gui=NONE guifg=Blue guibg= "hi Cursor term=reverse cterm=NONE ctermfg=NONE ctermbg=7 gui=NONE guifg=NONE guibg=NONE "hi CursorLine term=reverse cterm=NONE ctermfg=NONE ctermbg=7 gui=NONE guifg=NONE guibg=NONE "hi CursorColumn term=reverse cterm=NONE ctermfg=NONE ctermbg=7 gui=NONE guifg=NONE guibg=NONE " Alle Einstellungen für eigenes Syntaxschema (peachpuff + ...) function! MyColorScheme() syntax on colorscheme peachpuff set background=light hi statement ctermfg=darkblue guifg=black hi identifier ctermfg=black guifg=black set nocursorcolumn set nocursorline endfunction "------------------------------------------------------------------------------- " 14) Faltung ("zusammenklappen" von Programmteilen) ??? "------------------------------------------------------------------------------- " Falten NICHT aktivieren set nofoldenable " Spaltenbreite zur Faltungsanzeige (z.B. für Faltungstiefe, -bereich) "set foldcolumn=2 set foldcolumn=0 " Faltungsmethode " manual = ??? " indent = ??? " expr = ??? " marker = ??? " syntax = ??? " diff = ??? " (Std: manual, 'expr' -> 'foldexpr', 'marker' -> 'foldmarker') set foldmethod=syntax " Zu foldmethod=expr notwendig set foldexpr=0 " Zu set foldmethod=marker notwendig set foldmarker={,} " Schnelles Folding aktivieren " (beim Betreten mit Cursor auf, beim Verlassen zu, sehr unruhig!) "set foldopen=all " Std: block,hor,mark,percent,quickfix,search,tag,undo "set foldclose=all " Std: NIX " Beim Falten zu ignorierende Zeilen (Kommentare) set foldignore=# " Text für Darstellung einer Faltung (Std) ??? set foldtext=foldtext() " Kommentar-Template (für Fold-Markierungen verwendet) "set commentstring=%s "------------------------------------------------------------------------------- " VORTRAG MAUS/MOUSE " 15) Maus-Konfiguration "------------------------------------------------------------------------------- " Cursorsteuerung per Maus einschalten (empfohlen: h=nur in Hilfe aktiv!) " (schaltet leider Standard-X Window-Selektion ab, d.h. VERMEIDEN! " Kopieren a la Standard-X Window-Methode dann NUR zusammen mit SHIFT-Taste!) " n = Normal Mode " v = Visual Mode " i = Insert Mode " c = Command-Line Mode " h = Alle vorh. Modi NUR beim Editieren eines Help-files (Hypertext-Links) " a = nvich = alle vorherigen Modi " r = for hit-enter and more-prompt prompt ??? set mouse=h " Maus-Klick/Focus aktiviert Vim-Fenster bei Verwendung mehrerer (...) set mousefocus " GUI: Maus während dem Eintippen von Text "verstecken" set mousehide " Wirkung der drei Maustasten " extend = Rechte Maustaste dehnt Selektion aus " Shift+Rechte Maustaste sucht Wort " Rechte Maustaste ziehen dehnt Selektion aus " popup = Rechte Maustaste erzeugt Popup-Menü (Windows) " Shift+Rechte Maustaste dehnt Selektion aus " popup_setpos = Analog "popup", zusätzlich Cursor auf Mausposition gesetzt " Shift+Rechte Maustaste dehnt Selektion aus " Immer gilt: " Linke Maustaste klicken setzt den Cursor " Linke Maustaste halten+ziehen selektiert Text " Mittlere Maustaste fügt selektierten Text ein set mousemodel=extend " GUI: Aussehen der Maus "set mouseshape= " Maximal erlaubte Doppelklick-Verzögerung (in ms, Std: 500) set mousetime=250 " GUI: Auswahl per Tastatur soll sich wie verhalten (???) " :behave mswin :behave xterm "set selectmode= mouse,key (empty) " cmd = Maus, Shifted-Cursor, v/V/ "set mousemodel= popup extend " popup, extend "set keymodel= startsel,stopsel (empty) " startsel, stopsel "set selection= exclusive inclusive " old, inclusive, exclusive " In welchen Fällen startet Selection-Mode statt Visual-Mode? " mouse = Cursor mit der Maus bewegen " key = Spezielle Tasten benutzen " cmd = Bei "v", "V" und "CTRL-v" "set selectmode=... " Selektion-Mode mit folgenden Tasten steuern " ( ) " startsel = Shift+Taste startet Selektion " startsel = Taste beendet Selektion "set keymodel=... " Wie verhält sich die Auswahl per Maus " old = Zeichen hinter Zeilenende verboten, letztes Z. in Auswahl " inclusive = Zeichen hinter Zeilenende erlaubt, letztes Z. in Auswahl " exclusive = Zeichen hinter Zeilenende erlaubt, letztes Z. nicht in Auswahl "set selection=... " Wie verhält sich die Selektion in Visual + Select Modus ??? " value past line inclusive " old no yes " inclusive yes yes " exclusive yes no "set selection=inclusive "------------------------------------------------------------------------------- " VORTRAG PRINT/DRUCKER " 16) Drucker-Einstellungen (für Ausdruck per :hardcopy oder :hardcopy!) "------------------------------------------------------------------------------- " Druckername (Std: Standarddrucker) "set printdevice= " Befehl zum Ausdrucken (vorher erfolgt Konvertierung nach PostScript!) "set printexpr=system('lpr' . v:fname_in) " Ausdruckoptionen (hier ohne Syntaxfärbung, mit Zeilennummern) " left:NN = Linker Rand (Std: 10pc, auch "in/pt/mm") " right:NN = Rechter Rand (Std: 5pc, auch "in/pt/mm") " top:NN = Oberer Rand (Std: 5pc, auch "in/pt/mm") " bottom:NN = Unterer Rand (Std: 5pc, auch "in/pt/mm") " header:Z = Anzahl Zeilen für Kopf (Std: 2, 0=keinen drucken) " syntax:F = Syntaxcoloring an/aus " number:F = Zeilennumerierung an/aus " wrap:F = Zeilen y=umbrechen/n=abschneiden " duplex:TYP = Zweiseitig drucken (off, Std: long, short) " collate:F = Seitenabfolge bei Kopien (Std: y=123 123, n=111 222) " jobsplit:F = Kopien in getrennte Jobs aufteilen (Std: y) " portrait:F = Hoch/Querformat (Std: y=Porträt, n=Landscape) " paper:TYP = Papierformat (Std: A4) " formfeed:F = Seitenvorschubzeichen (y=neue Seite, Std: n=Zeichen) set printoptions=left:5pc " Linker Rand 5 Zeichen set popt+=right:5pc " Linker Rand 5 Zeichen set popt+=top:4pc " Oberer Rand 4 Zeichen set popt+=bottom:4pc " Unterer Rand 4 Zeichen set popt+=header:2 " Kopf 2 Zeilen hoch set popt+=syntax:n " Ohne Syntaxfärbung set popt+=number:y " Mit Zeilennummern set popt+=wrap:y " Zu lange Zeilen umbrechen set popt+=duplex:y " Zweiseitiger Druck " Font für Ausdruck (hier Courier 8 Punkte, analog 'guifont' definieren) set printfont=courier:h8 " Kopfzeile für Ausdruck (analog 'statusline' definieren) "set printheader=%<%f%h%m%=Page\ %N " Codierung für Ausdruck "set printencoding= "------------------------------------------------------------------------------- " 18) Lese-, Schreib- und Änderungsberechtigung "------------------------------------------------------------------------------- " Vim kann Datei schreiben (autom. gesetzt, DONT!) "set write " Vim kann IMMER Datei schreiben (sofern prinzipiell möglich, DONT!) "set writeany " Außerhalb des Vim geänderte Dateien NICHT autom. einlesen (DONT!) set noautoread " Geänderte Dateien NICHT autom. schreiben bei :q, :next, :prev, (DONT!) ??? set noautowrite " Alle geänderten Dateien NICHT autom. schreiben bei :q, :next, :prev, (DONT!) set noautowriteall " Datei nur lesbar (auto. gesetzt, evtl. nach ":co -l %" manuell zurücksetzen " mit ":set noreadonly" oder ":set noro") "set readonly " Datei NICHT veränderbar (auch 'fileformat' und 'fileencoding' nicht!) "set nomodifiable " Datei wurde verändert (IMMER auto. gesetzt!) "set modified "------------------------------------------------------------------------------- " 19) Standard-Shell für !... "------------------------------------------------------------------------------- " Pfadname der Standard-Shell "set shell=/bin/bash " Kommandoflag nach dem Shell-Namen "set shellcmdflag=-c " Wie eine "Pipe" erzeugen? "set shellpipe=2>&1| tee " Womit Zeichen für Shell-Kommando quotieren? "set shellquote= " Womit Zeichen für Shell-Kommando und Umlenkungen quotieren? "set shellxquote= " Wie eine Umlenkung erzeugen? "set shellredir=>%s 2>&1 " Temporäre Datei statt Pipe für Shell-Kommandos benutzen "set shelltemp= " MSDOS: "/" statt "\" in Dateinamen benutzen "set shellslash= " MSDOS: Screen-Modus wählen (B80, B40, c80, c40, ...) ":mode MODE "------------------------------------------------------------------------------- " VORTRAG AUTOCOMPLETE " 20) Autom. Text-Vervollständigung im Einfügemodus per +... "------------------------------------------------------------------------------- " = Rückwärts erstes passendes Wort mit gleichem Präfix suchen " = Vorwärts erstes passendes Wort mit gleichem Präfix suchen " = Submode (nicht alles durchsuchen): " = Makro-Definition "#define" " = Dateinamen (im akt. Verz.) " = Wörterbuch (Dictionary) " = Akt. Datei + "#includes" " = Ganze Zeilen " = Tags (mit "ctags ..." generiert) " = Analog ohne für Submode-Suche " = Insert Mode Omni Completion ??? " = Analog ohne für Submode-Suche " = Bildschirm eine Zeile runterscrollen " = Bildschirm eine Zeile hochscrollen "------------------------------------------------------------------------------- " GROSS/kleinschreibung aus getipptem Text ableiten, nicht aus gefundenem " (hat nur Wirkung, falls 'ignorecase' gesetzt ist) set infercase " Autom. Text-Vervollst. im Insert-Mode holt wo + in welcher Reihenfolge Daten? " . = Aktueller Puffer (akt. Datei) " b = Weitere geladene Puffer (aber nicht in anderen Fenstern) " u = Nicht geladene Puffer " i = Von akt. Datei per "#include" eingefügte Dateien " k = Von Option 'dictionary' definierte Datei (auch kFILE = aus Datei FILE) " t = Aus Tags-Datei " u = Aus entladenen Buffern " w = Buffer der anderen Fenster set complete=.,i set cpt+=t set cpt+=k set cpt+=w " Funktion für autom. Text-Vervollst. im Insert-Mode (Std: ) "set completefunc= " Optionen für autom. Text-Vervollst. im Insert-Mode (Std: ) " menu = ??? " preview = ??? "set completeopt=menu,preview " Wörterlisten (Dictionaries) für Keyword completion set dictionary=/usr/share/dict/words " Include-Verzeichnisse (NICHT automatisch aus '$PATH' gefüllt) " (auch für "gf" :make :grep :find ... benutzt) "set path=.,/usr/include,, " dir of file, /usr/include, current dir " Wie sieht "Makro-Definition" aus? "set define=^\s*#\s*define " Wie sieht "Include-Anweisung" aus? "set include=^\s*#\s*include " Wie wird eine "Include-Anweisung" verarbeitet ??? "------------------------------------------------------------------------------- " 21) Tags "------------------------------------------------------------------------------- " Tag + Definition (Prototyp) anzeigen set showfulltag " Taglänge (Anzahl signifigkanter Zeichen in Tags, Std: 0=alle) set taglength=0 " Liste von Tag-Dateinamen die nach Tags zu durchsuchen sind set tags=./tags,./TAGS,tags,TAGS " Tags sind relativ zum aktuellen Verzeichnis set tagrelative " TODO "------------------------------------------------------------------------------- " 22) man-Pages "------------------------------------------------------------------------------- " Von "K" aufgerufenes Programm (verwendet :iskeyword als Wortdefinition) set keywordprg=man "------------------------------------------------------------------------------- " 23) Autokommandos "------------------------------------------------------------------------------- " Kommandos beim Dateiladen ausführen " (erst für alle Dateitypen, danach für C/C++-Dateien) autocmd FileType * set formatoptions=tcql \ nocindent comments& autocmd FileType c,cpp set formatoptions=rocql \ cindent comments=sr:/*,mb:*,ex:*/,:// " Ereignisse ignorieren (d.h. kein Autokommando auslösen) "set eventignore=WinEnter,WinLeave "set eventignore=all "------------------------------------------------------------------------------- " 24) Swap-Datei und File-Synchronisation (Recover FILE.swp, *.swo, *.swn, ...) " ":swapname" zeigt akt. Swap-Datei an "------------------------------------------------------------------------------- " Swap-Datei für Buffer benutzen set swapfile " Verzeichnis für Swap-Dateien set directory=.,~/tmp,/var/tmp,/tmp " NICHT MSDOS: Kurze MSDOS-Dateinamen für Swap-Datei verwenden (UNIX: DONT!) "set shortname " Anzahl getippter Zeichen zwischen zwei Swap-Schreibvorgängen (Std: 200) " (updatecount=0 -> keine Swap-Datei erzeugen) set updatecount=200 " Zeit zwischen zwei Swap-Schreibvorgängen (Millisekunden, Std: 4000) set updatetime=10000 " Schreibvorgang auf Datei sofort auf Platte synchronisieren (sicher, Last!) if v:version >= 700 set fsync " ??? - langsamer Start/Ende + Meldungen endif " Schreibvorgang auf Swap-Datei sofort auf Platte synchronisieren (sicher, Last!) set swapsync=fsync " ,sync,fsync (System-Call) "------------------------------------------------------------------------------- " 25) Debugging "------------------------------------------------------------------------------- " Alle Fehlermeldungen anzeigen " msg = ??? set debug=msg " NN µs Verzögerung vor jedem Zeichen vor Bildschirmdarstellung (Std: 0) set writedelay=0 " Vim sagt ausführlich, was er tut (Stufe 1-15) " >= 1 Viminfo-Datei gelesen/geschrieben " >= 2 Gelesene Datei bei ":source"-Kommando " >= 5 Durchsuchte Tag- und Include-Dateien " >= 8 Dateien mit Gruppe von ausgeführten Autokommandos " >= 9 Alle ausgeführten Autokommandos " >= 12 Alle ausgeführten Funktionen " >= 13 Geworfene, gefangen, abgeschlossene, verworfene Ausnahmen " >= 14 Alles was in ":finally" auf Ausführung wartet " >= 15 Alle ausgeführten Ex-Kommandos set verbose=0 " Datei für "verbose"-Meldungen (hier Bildschirm) if v:version >= 700 set verbosefile= endif "------------------------------------------------------------------------------- " 26) GUI "------------------------------------------------------------------------------- " GUI: Zeichensatz definieren (1.=English, 2.=Fremdsprache) " GUI: ??? " GUI: ??? "set guifontset=... "set guifont=... "set guifont=* -> Dialogbox zur Fontauswahl anzeigen! "set guifontwide=... " GUI: Aussehen des Cursor in den verschiedenen Modi definieren " (MODE:FORM durch "," trennen, zusammengefasste MODE und FORM durch "-"!) " n:FORM = Normal Modus " v:FORM = Visual Modus " ve:FORM = Visual Modus ('selection'=exclusive) " c:FORM = Command Line Modus " o:FORM = Operator-pending Modus " i:FORM = Insert Modus " r:FORM = Replace Modus " ci:FORM = Command-line Insert Modus " cr:FORM = Command-line Replace Modus " sm:FORM = Showmatch in Insert Modus " a:FORM = All modes " FORM " hor{N} = Horizonale Linie (Prozent von Zeichenhöhe) \ " ver{N} = Horizonale Linie (Prozent von Zeichenhöhe) + NUR eines davon! " block = Block Cursor / " blinkwait{N} = Wartezeit vor dem Blink-Start \ " blinkon{N} = Wartezeit vor dem Blink-Start + N in Millisek. " blinkoff{N} = Wartezeit vor DEM Blink-Start / " {GROUPNAME} = Name einer Highlight Gruppe " {GROUPNAME}/{GROUPNAME} = 1.=kein Language-Mapping/2.=Language-Mapping "set guicursor=n-c-v:block-nCursor "set guicursor=i-ci:ver30-iCursor-blinkwait300-blinkon200-blinkoff150 set guicursor=n-v-c:block,o:hor50,i-ci:hor15,r-cr:hor30,sm:block " GUI: Platz über/unter GUI-Fenster in Pixeln (für Vollbildmodus) "set guiheadroom=... " GUI: Welche GUI-Komponenten sollen dargestellt werden? " m=Menü " T=Toolbar "set guioptions=aegimrLtT " GUI: Bei ":shell"-Kommandos ein pty-Terminal benutzen oder eine Pipe "set guipty " GUI: ??? "set guitablabel "set guitabtooltip " GUI: "System Clipboard" als unbenanntes Register benutzen " unnamed = Inhalt von "Unbenanntem Register" -> "System Clipboard" " autoselect = Inhalt von "Visual Mode Selection" -> "System Clipboard" " exclude:... = ??? "set clipboard= " GUI: Aussehen der Toolbar festlegen (abschalten mit :set guioptions-=T) " icon = Toolbar Icons anzeigen " text = Toolbar Text anzeigen " tooltips = Toolbar Tips anzeigen "set toolbar=icons,tooltips "------------------------------------------------------------------------------- " 27) Hilfe "------------------------------------------------------------------------------- " Ort des Hilfe-Hauptdatei "set helpfile=/usr/share/vim/current/doc/help.txt " Minimale Höhe des Hilfe-Fensters (Std: 20) "set helpheight=20 " Sprache der Fehlermeldungen (de, en, fr, ???) set helplang=en "------------------------------------------------------------------------------- " VORTRAG WORD DEFINITION " 28) Text-Elemente definieren "------------------------------------------------------------------------------- " In Worten/Schlüsselworten erlaubte Zeichen (z.B. für "w", "b", "e", "ge") " Zeichen ":" und "-" bei K// als Wort/Schlüsselwort erlaubt " (hier: "@"=isalpha(), Ziffern "0"-"9", Unterstrich "_", internationale Zeichen) "set iskeyword=@,48-57,_,192-255 " z.B. auch äöüÄÖÜß "set isk+=. "set isk+=: "set isk+=- "set isk+=$ "set isk+=@-@ " Steht für "@"! " In "Bezeichnern" erlaubte Zeichen (z.B. für "[d") "set isident=@,48-57,_,192-255 " In "Datei/Pfadnamen" erlaubte Zeichen (z.B. für "gf") "set isfname=@,48-57,/,.,-,_,+,,,#,$,%,~,= " "Druckbare Zeichen" (z.B. für "\p" in Suchmustern) "set isprint=@,161-255 "------------------------------------------------------------------------------- " 29) Fenster-Verhalten "------------------------------------------------------------------------------- " Minimale Zeilenanz. des aktuellen Fensters (wenn möglich, Std: 1) set winheight=1 " Minimale Spaltenanz. des aktuellen Fensters (wenn möglich, Std: 1) set winwidth=1 " Minimale Zeilenanz. aller Fenster (wenn möglich, Std: 1) set winminheight=1 " Minimale Spaltenanz. aller Fenster (wenn möglich, Std: 1) set winminwidth=1 " Fensterhöhe beibehalten beim Öffnen neuer Fenster "set winfixheight " Fensterbreite beibehalten beim Öffnen neuer Fenster "set winfixwidth " Beim mehreren Fenstern/Windows IMMER gleiche Höhe für alle einstellen "set equalalways " In welche Richtung arbeitet 'eqalways' (Std: ) "set eadirection= " Neu mit ":split" geöffnetes Fenster "unten" statt "oben" aufmachen (DONT!) "set splitbelow " Neu mit ":split" geöffnetes Fenster "rechts" statt "oben" aufmachen (DONT!) "set splitright " Höhe des Preview-Fensters (für ":ptag", ":pedit", CTRL-w CTRL-]; Std: 12) "set previewheight=12 " Identifiziert Preview-Window (genau eines, autom. gesetzt, DONT!) "set previewwindow "------------------------------------------------------------------------------- " VORTRAG CMD COMPLETE " 30) Vervollständigung (Completion, Wildcard) " ( rotiert durch passende Liste, Ctrl-D = Liste, Ctrl-A = Alle) " Ex-Kommandos nach ":" am Zeilenanfang " Tags nach :tag " Dateinamen bei Dateiargumenten " Optionsnamen nach :set (= füllt aktuellen Wert ein) "------------------------------------------------------------------------------- " Taste für Dateinamen-Vervollständigung in Kommandozeile (Std: ) "set wildchar= " KEINE Taste für Dateinamen-Vervollständigung in einem Makro set wildcharm=0 " Bei Dateinamen-Vervollständigung zu ignorierende Dateien "set wildignore=*.o,*.obj,*.aux,*.log,*.bak,*~ " Bei Dateinamen-Vervollständigung am Listenende anzuzeigenden Dateien "suffixes=.bak,~,.o,.h,.info,.swp,.obj " Bei Dateinamen-Suche autom. auszuprobierende Endungen "suffixesadd= " Dateinamen-Vervollständigung per Auswahl aus eingeblendeter Menüliste "set wildmenu " Verhalten der Dateinamen-Vervollständigung steuern (Std: full) " (für Bash-kompatibles Verhalten: longest,full) " = Nur 1. passende Datei anzeigen " full = 1. passende Datei finden, nächste mit " longest = Längsten gemeinsamen Teil vervollständigen " list = Liste aller passenden Dateien anzeigen (kein möglich) set wildmode=longest,full " Wie Kommandozeilen-Vervollständigung durchführen "set wildoptions= "------------------------------------------------------------------------------- " VORTRAG LIMIT " 31) Grenzwert-Einstellungen "------------------------------------------------------------------------------- " Anzahl Undo-Schritte (Std: 1000) set undolevels=5000 " History-Länge für 5 Eingabearten festlegen (Std: 20) " Für ':'-Kommandos (ex) " Für Suche " Für Ausdrücke " Für Eingabezeilen (input()-Funktion) " Für Debug-Kommandos set history=500 " Maximal für EINEN Buffer benutzbarer Speicher (Std: 517640 KByte) "set maxmem=517640 " Maximal für ALLE Buffer benutzbarer Speicher (Std: 517640 KByte) "set maxmemtot=517640 " Maximal für Regex Pattern Matching benutzbarer Speicher (Std: 1000 KByte) "set maxmempattern=1000 " Maximale Anzahl verschachtelter Funktionen (Std: 100) "set maxfuncdepth=100 " Maximale Anzahl verschachtelter Mappings (Std: 1000) "set maxmapdepth=1000 " Maximal genutzer Speicher befor ":mkspell" den Baum komprimiert (Std: ) "set mkspellmem=460000,2000,500 " Maximale Anzahl Einträge in einem Menü (Std: 25) "set menuitems=25 " Maximal bei Encoding 'utf-8' kombinierbare Zeichen (Multi-Byte, Std: 2) "set maxcombine=2 "------------------------------------------------------------------------------- " 32) Terminal-Einstellungen "------------------------------------------------------------------------------- " Terminalname setzen (automatisch, DONT!) "set term=xterm-color " Terminal während Makro-Ausführung updaten (für langsame Terminals setzen!) set nolazyredraw " Interne Terminaldatenbank zuerst durchsuchen, dann externe "set ttybuiltin " Schnelle Terminalverbindung -> schöneres Verhalten (bei langsamem Term. aus!) "set ttyfast " Maus in Terminal aktiv "set ttymouse " Bei Terminal-Update max. zu scrollende Zeilen (weniger bei langsamem Terminal) "set ttyscroll=999 "------------------------------------------------------------------------------- " 33) Mapping-Einstellungen "------------------------------------------------------------------------------- " Wartezeit wenn nur Teile von Funktionstastencode/Map-Tastenfolge erkannt set timeout " Funktionstastencodes + :map-Makro Timeout set ttimeout " NUR Funktionstastencodes Timeout set timeoutlen=500 " Max. Wartezeit für 'timeout' (Std: 1000ms = 1s) set ttimeoutlen=1000 " Max. Wartezeit für 'ttimeout' (Std: 1000ms = 1s) " Mappings rekursiv anwenden (außer bei :noremap, Std: remap) "set remap "------------------------------------------------------------------------------- " VORTRAG VIMINFO " 34) Viminfo, Sessions und Views "------------------------------------------------------------------------------- " ".viminfo"-Datei beim Start/Verlassen des Vim lesen + schreiben mit: " '200 = Lokale Marken für die maximal letzten 200 Dateien speichern " "500 = Maximal 500 Zeilen pro Register "a-"z speichern (Std: alle) " h = 'hlsearch' beim Öffnen einer Datei abschalten " f1 = Globale Marken speichern (Std: ja) " r/mnt = Removeable Media -> keine Marken speichern (max. 50 Zeichen) " :100 = Maximal 100 ex-Kommandos speichern " /100 = Maximal 100 Suchmuster speichern " % = Buffer-Liste speichern + wiederherst. (nur falls keine Dat. auf Kmdozl) " ! = Globale Variablen speichern + wiederherstellen (UPPERCASE!) " n... = Name der Viminfo-Datei (Std: $HOME/.viminfo) set viminfo=\'500 "set vi+=\"500 " ALLE Zeilen merken set vi+=h set vi+=f1 set vi+=r/mnt set vi+=:100 set vi+=/100 set vi+=% set vi+=! " In einer Session-Datei zu speichernde Daten (":mksession") " blank = Alle sichtbaren leeren Fenster " buffers = Alle Buffer (sichtbar, versteckt , entladen) " curdir = Aktuelles Verzeichnis " folds = Manuell erzeugt Faltungen, offenen/geschlossene F., F.-Optionen " globals = Globale Variablen (Ulow...) " help = Das Hilfefenster " localoptions = NUR Optionen und Tastatur-Mappings lokal zum Fenster/Buffer " options = Alle Optionen und Tastatur-Mappings " resize = Größe des Bildschirm-Fensters ('lines' + 'columns') " sesdir = Verzeichnis der Session-Dateien wird aktuelles Verz. " slash = Backslashes in Dateienamen durch "/" ersetzen (Portabilität) " tabpages = Alle Tab-Seiten (sonst nur aktuelle) " unix = Dateien im UNIX-EOF-Format schreiben (Portabilität) " winpos = Die Position des GUI-Vim-Fensters " winsize = Fenstergrößen " Entweder "curdir" oder "sesdir" "set sessionoptions=blank,buffers,curdir,folds,help,options,tabpages,winsize " Verzeichnis für Views (":mkview") "set viewdir=~/.vim/view " Wirkung von ":mkview" steuern "set viewoptions=olds,options,cursor "------------------------------------------------------------------------------- " 35) Noch nicht einsortierte Optionen "------------------------------------------------------------------------------- " Anzahl Terminalspalten (automatisch gesetzt, DONT!) " Anzahl Terminalzeilen (automatisch gesetzt, DONT!) "set columns=... "set lines=... " Verhalten beim Wechseln von Buffern festlegen (Std: ) " useopen = ??? " usetab = ??? " split = ??? "set switchbuf=... " VI: LISP-Einrückung einschalten (DONT!) "set lisp " VI: Wortliste für LISP-Einrückung "set lispwords=... " Key für Verschlüsselung (vim -x, zur Sicherheit besser per :X eingeben) "set key=... " Beim Datei-Öffnen zur letzten Position springen " (nur wenn "autocommands" einkompiliert, Pos. gültig und nicht in Event-Handler) if has("autocmd") autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g`\"" | \ endif endif " Autom. in Verz. der editieren Datei wechseln (DONT!) "set autochdir " Was ist bei nicht mehr in Fenster sichtbarem Buffer zu tun "set bufhidden=... " Flag ob Buffer in der Bufferlist erscheint "set buflisted " Spezieller Buffer-Typ "set buftype=... " Verz.liste, die bei ":cd" durchsucht wird (autom. aus $CDPATH gefüllt) "set cdpath= " Kombinierte Zeichen einzeln löschen ??? "set delcombine " Buffer nicht entladen, wenn abandoned ??? "set hidden " Beim Start von Vim Plugin Skripte "set loadplugins " Wann soll Tab-Zeile angezeigt werden ??? "set showtabline=1 " UNBEKANNTE OPTIONEN??? "set term=xterm-color "if has ("gui_running") " "set gfn=Monaco:h14 " set gfn=Courier:h14 " colorscheme zellner "endif " Colo(u)red or not colo(u)red "let color = "false" "------------------------------------------------------------------------------- " 36) Irrelevante Optionen "------------------------------------------------------------------------------- " ASCII-Code für Buchstabe Aleph (Hebräisch) "set aleph " 2. Defaultsprache (Farsi/Hebrew) "set altkeymap=... " Was mit Unicode Zeichen von mehrdeutiger Breite tun? "set ambiwidth " MAC: Glattgerechnete Fonts benutzen "set antialias " Arabisch als 2. Defaultsprache "set arabic " Gestalt arabischer Zeichen "set arabicshape " Verzögerung in ms bevor Ballonhilfe erscheint "set ballondelay=... "set balloneval "set ballonexpr=... " MSDOS: BIOS-Aufrufe für Eingabe benutzen "set bioskey " GUI: In welchem Verzeichnis mit "Browsen" ":browse ..." starten? " last = Letztes Verzeichnis, in dem "gebrowst" wurde " buffer = Verzeichnis des aktuellen Buffers " current = Aktuelles Verzeichnis "set browsedir=... "set charconvert=... " MSDOS "set conskey " GUI: Alt-Taste für Tastatur-Kommandos und Mappings benutzbar " no = ALT-Tasten nicht für Menü verwenden, alle ALT-Tasten verwendbar " yes = ALT-Tasten für Menü benutzen, ALT-Tasten nicht verwendbar " menu = ALT-Tasten mit Menü-Shortcut für Menü benutzen, Rest verwendbar ":set winaltkeys=... ":simalt KEY " simuliert drücken von ALT+KEY "------------------------------------------------------------------------------- " 37) Mausbewegungen (GUI, aber auch in Terminal aktivierbar) "------------------------------------------------------------------------------- " = Text-Cursor positionieren " = Text zw. Text-Cursor und Maus-Zeiger selektieren " = Selektierten Text am aktueller Maus-Zeiger einfügen " (unbenanntes Register oder vorher "REGISTERNAME) " = Um 3 Zeilen nach oben scrollen " = Um 3 Zeilen nach unten scrollen " = Um eine Bildschirmseite nach oben scrollen " = Um eine Bildschirmseite nach unten scrollen "------------------------------------------------------------------------------- " 38) Menüdefinition " (siehe $VIMRUNTIME/menu.vim) "------------------------------------------------------------------------------- " Zahlenpaar nach ":menu" ist Priorität (Menü + Eintrag in Pulldown-Menü) " (kleine Zahlen weiter links bzw. weiter oben) " Menüitem soll evtl. nur in bestimmten Modi erscheinen " a = Normal, Visual, Operator-Pending " n = Normal " v = Visual " o = Operator-Pending " i = Insert " c = Command-Line " Spezielle Menü-Itemnamen " ToolBar = Iconleiste unter Menüleiste (28 eingebaute Icons per Name) " PopUp = Popup-Menü bei rechter Maustaste ":[MODE]menu [PRIORITY] ITEM COMMAND ":menu 10.340 &File.&Save:w :confirm w " Toolbar-Tip bei Maus über Toolbar-Icon anzeigen ":tmenu ToolBar.Open Open file "=============================================================================== " 50) Eigene Befehle "=============================================================================== " Im Vi sind folgende Tasten verwendbar, da nicht belegt: " (·=Vi-belegt, ?=entbehrlich, -=nicht verwendbar, !=umsetzen, ¤=Vim-belegt) " @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ " klein: · · · · · · · g · · · · · · · · · · · · · · v · · · · - - - - - " GROSS: · ? ? · · · ? · · K ? ? ? · · ! ? ? · ? V · ? ? ? ? " CTRL-*: ? a · - ? ? · ? ? · ? ¤ - · ? o ? - ¤ - t ? v ¤ ¤ ? - - ? - ? ? " insert: ? a · - ? ? · ? ? · ? k - · ¤ o ¤ - ¤ - t ? v ¤ ¤ ? - - ? - ? ? " @ C B T L R C C S E " A S A F D R O T S " N B R N O C " W T P " Sonder: _ * \ = # x " Ziffern: 1 2 3 4 5 6 7 8 9 " " Entbehrlich sind folgende Kommandos (Ersatz daneben angegeben): " ^ 0 Zum Zeilenanfang springen (erstes echtes Zeichen) " C c$ Ab Cursor bis Zeilenende Text ersetzen " D d$ Ab Cursor bis Zeilenende löschen " N ?? Suche in Gegenrichtung " Q -- Permanent in den Ex-Modus umschalten (mit "vi" verlassen) " R r Mehr als ein Zeichen übertippen " S cc Aktuelle Zeile ersetzen " s cl Aktuelles Zeichen ersetzen (oder c) " U u Alle Änd. einer Zeile zurücknehmen (wenn nicht verlassen) " Y yy Aktuelle Zeile in temporärem Puffer merken " ZZ :wq Vim mit Abspeichern verlassen (oder :x) " + k Eine Zeile nach oben gehen " - j Eine Zeile nach unten gehen " l Ein Zeichen nach rechts " h Ein Zeichen nach links " -- ??? " -- ??? " j Eine Zeile nach unten " k Eine Zeile nach oben " j Eine Zeile nach unten schieben (Cursor bleibt stehen) " k Eine Zeile nach oben schieben (Cursor bleibt stehen) " Eine halbe Bildschirmseite nach oben blättern " Eine halbe Bildschirmseite nach unten blättern " " Nicht verwendbar sind: Alle ??? " Kommando abbrechen (vor oder mitten in Ausführung, cancel) " Terminalausgabe anhalten (stop) " Terminalausgabe weiterlaufen lassen (continue) " Vim in Hintergrund schalten (bg) " Bildschirm neu zeichnen (redraw) "------------------------------------------------------------------------------- " C-Datei kompilieren, zu Fehlern vor/zurück springen und Executable ausführen function! ActivateCCmds() map C :w:execute "make " . expand("%:t:r") map + :cnext map - :cprev map X :execute "!./" . expand("%:t:r") "echo "*.c -> Activated C Commands!" endfunction autocmd! BufRead,BufNewFile *.c call ActivateCCmds() " VORTRAG EXAMPLE FIND TOO LONG LINES " Zeilen länger als 80 Zeichen anzeigen ( = ) " (statt 81 &textwidth einsetzen !!!) map F /^.\{81\} " VORTRAG EXAMPLE FIND SPECIAL CHARS " Ungewöhnliche Zeichen suchen (außerhalb ASCII-Bereich, Umlauten, TAB) "map X /[^ -~äöüÄÖÜß\t] " Absatzumbruch auf 80 Zeichen Breite " (besser im Vim direkt mit "gq...", da K auf Wort = Suche nach zugeh. man-Page) "map K !}fmt -70 -u "map K !}fmt -75 -u "map K !}fmt -80 -u " VORTRAG EXAMPLE FILE FORMAT " MSDOS/UNIX-Dateiformat aktivieren map D :set ff=dos map U :set ff=unix " VORTRAG EXAMPLE REMOVE SPACES " E entfernt Leerzeichen am Zeilenende "map E :%s/ *$// " VORTRAG EXAMPLE DRAW LINE " 80 Zeichen breite Kommentar-Linien ziehen (C und Shell) "map C O/*76a-a*/0 map S O=79a=0 map S O#79a-0 " Versehentliches Einschalten des "Ex-Modus" mit "Q" verhindern, " statt dessen Objekt "neu formatieren" (Objekt wjG)... danach noch angeben) "map Q gq "map Q " TRICK: Funktioniert nicht ":vmap i I "------------------------------------------------------------------------------- " 51) Abbreviation/Abkürzungen (z.B. zur Fehlerkorrektur - teilweise inaktiv) " Durchgeführt, falls Leerraum (SPACE, TAB, NL) nach Abkürzungswort "------------------------------------------------------------------------------- " Fehlerkorrektur abbr teh the "abbr #b 3hi "map #b i4hi " dies ist " VORTRAG EXAMPLE INSERT COPYRIGHT " Im Insert-Modus "Copyright" einfügen ( = ) abbr (C) (C) 2012 T.Birnthaler OSTC GmbH?(C)hxi abbr (c) (C) 2012 H.Gottschalk OSTC GmbH?(C)hxi " Abkürzungen für HTML/PHP ( = Tabulator, = Escape) "abbr #h TitelCode?>?\(Kommentar\\|Titel\\|Code\)h "abbr #s "abbr #p ?Codeh "abbr #q Code?>?Codeh "abbr #G
Vorname:
Nachname:

?xxxh "abbr #P
Vorname:
Nachname:

?xxxh "abbr #k ?Kommentarh "------------------------------------------------------------------------------- " 52) Maps = Tasten/Funktionstasten belegen (ruft häufig Funktion auf) "------------------------------------------------------------------------------- " Normal Insert Command-Line Visual Lang-Arg " map y - - y - " nmap y - - - " vmap - - - y " xmap " smap " omap Operator-Pending " map! " imap y - - " lmap y* y* y* " cmap - y - "------------------------------------------------------------------------------- " HTML-Dokument Pretty-Print ab 1./akt. Zeile bis Dokumentende (-m geht nicht!) "map #T 1G!Gtidy -q -f /tmp/tidy.err -config ~/.tidy.conf \| grep -v "HTML *Tidy" \| grep -v "line.*column.*Warning: " "map #t !Gtidy -q -f /tmp/tidy.err -config ~/.tidy.conf \| grep -v "HTML *Tidy" \| grep -v "line.*column.*Warning: " " VORTRAG EXAMPLE RELOAD VIM " ".vimrc" neu laden mit (schreibt ".vimrc" und liest sie erneut ein) " (Einstellungen aktivieren während ".vimrc" editiert wird) " TODO: Testen ob gerade ".vimrc" editiert wird -> nur dann vorher speichern map :w!:source ~/.vimrc " Geht nicht wg. Redefinition von ReloadVimrc() während Benutzung "map :call ReloadVimrc() " "function! ReloadVimrc() " :w! " :source ~/.vimrc "endfunction " VORTRAG EXAMPLE FOLLOW HYPERLINK " Zeichen "^" statt ++9 auf deutscher Tastatur für " (Hyperlink in Vim-Hilfe verfolgen, Sprung zu Begriff unter Cursor) map ^  " Zeichen "^" statt ++9 auf deutscher Tastatur für " (Hyperlink in Vim-Hilfe verfolgen, Sprung zu Begriff unter Cursor) "map :help " Geht NICHT ??? "map :help " Geht NICHT ??? "map H :help " KEINE gute Idee! " Umlaute mit Meta/Alt+Vokal erzeugen " ALT + vokal -> ergibt Umlaut " ALT + s -> ergibt scharfes s "map! ä "map! ö "map! ü "map! ß "map! Ä "map! Ö "map! Ü " Falls UTF-8 auf lokalem System eingestellt und auf der SSH-Gegenstelle nicht "map! ä ae "map! ü ue "map! ö oe "map! Ä Ae "map! Ö Oe "map! Ü Ue "map! ß ss "------------------------------------------------------------------------------- " 53) LaTeX-Erweiterungen ??? HTML-Erweiterungen "------------------------------------------------------------------------------- " Abkürzung für deutsche Gänsefüßchen "imap ;" "`"' " Abkürzung für LaTeX-Umgebung "imap ;b \begin{}i "imap ;e \end{}i "------------------------------------------------------------------------------- " 54) Programmierung "------------------------------------------------------------------------------- " VORTRAG EXAMPLE NEWPROG " Neue Datei mit Endung? -> Schablone/Template laden (Tipparbeit sparen!) autocmd! BufNewFile *.awk 0r ~/.vim/template/pgm.awk autocmd! BufNewFile *.c 0r ~/.vim/template/pgm.c autocmd! BufNewFile *.cob 0r ~/.vim/template/pgm.cob autocmd! BufNewFile *.css 0r ~/.vim/template/pgm.css autocmd! BufNewFile *.h 0r ~/.vim/template/pgm.h autocmd! BufNewFile *.html 0r ~/.vim/template/pgm.html autocmd! BufNewFile *.js 0r ~/.vim/template/pgm.js autocmd! BufNewFile *.php 0r ~/.vim/template/pgm.php autocmd! BufNewFile *.pl 0r ~/.vim/template/pgm.pl autocmd! BufNewFile *.perl 0r ~/.vim/template/pgm.perl autocmd! BufNewFile *.pm 0r ~/.vim/template/pgm.pm autocmd! BufNewFile *.sed 0r ~/.vim/template/pgm.sed autocmd! BufNewFile *.sh 0r ~/.vim/template/pgm.sh autocmd! BufNewFile *.sql 0r ~/.vim/template/pgm.sql autocmd! BufNewFile *.tex 0r ~/.vim/template/pgm.tex " VORTRAG EXAMPLE COMMENT IN/OUT " Im Visual-Mode Absätze mit '#%;"/' am Zeilenanfang ein/auskommentieren vmap # :s/^/# / vmap % :s/^/% / vmap ; :s/^/; / vmap / :s/^/\/\/ / vmap - :s/^[#%\/]**// "vmap " :s/^/" / " In Perldatei am Ende eine POD-Schablone/Template einfügen ??? "map G:r ~/.vim/template/pod.pl " Perlmodul-Schablone/Template einlesen ??? "map 0:r ~/.vim/template/module.pl "=============================================================================== " 55) Funktionsdefinitionen "=============================================================================== " * Funktionsnamen müssen mit einem Grossbuchstaben beginnen! " * Vor Funktionsaufrufen "call" verwenden (oder in Ausdruck verwenden) " * Zum Einrücken KEINE TABs verwenden! ??? " * function! -> Reload = erneute Definition führt nicht zu Fehlermeldung "------------------------------------------------------------------------------- "------------------------------------------------------------------------------- " VORTRAG FUNCTION TOGGLE LISTMODE " schaltet List-Modus an und wieder aus " List-Modus = ^I für TABs und $ für Zeilenenden anzeigen " Option 'list' aktiv oder nicht? -> Invertieren "------------------------------------------------------------------------------- function! ToggleListMode() let &list = ! &list endfunction " Langatmige Alternative: Option 'list' aktiv oder nicht? -> Invertieren "function! ToggleListMode() " if &list == 1 " let &list = 0 " else " let &list = 1 " endif "endfunction "------------------------------------------------------------------------------- " VORTRAG FUNCTION TOGGLE LISTMODE " Alternative mit 3 Zuständen (g:lcs = globale Variable = Zustand "no/std/own") map :call ToggleListMode() "------------------------------------------------------------------------------- let g:lcs = "no" function! ToggleListMode() if g:lcs == "no" set list set listchars=eol:$ let g:lcs = "std" elseif g:lcs == "std" set listchars=tab:»°,trail:·,eol:¶,precedes:«,extends:» " set listchars=tab:»·,trail:·,eol:¶,precedes:«,extends:» " set listchars=tab:»¬,trail:·,eol:¶,precedes:«,extends:» " set listchars=tab:»¨,trail:·,eol:¶,precedes:«,extends:» set listchars=tab:»­,trail:·,eol:¶,precedes:«,extends:» let g:lcs = "own" else set nolist let g:lcs = "no" endif endfunction "------------------------------------------------------------------------------- " VORTRAG FUNCTION TOGGLE WRAP " Option 'wrap' aktiv oder nicht? -> Invertieren map :call ToggleWrapMode() " 3 Zustände (g:wrap = globale Variable = Zustand "no/std/own") "------------------------------------------------------------------------------- let g:wrap = "no" function! ToggleWrapMode() if g:wrap == "no" set showbreak= set wrap let g:wrap = "std" elseif g:wrap == "std" set showbreak=» set wrap let g:wrap = "own" else set nowrap let g:wrap = "no" endif endfunction " Einfache Alternative "function! ToggleWrapMode() " let &wrap = ! &wrap "endfunction "------------------------------------------------------------------------------- " VORTRAG FUNCTION WORDSEARCH MAP " map! \>/ " Wort suchen (erstes startet Wort-Eingabe, zweites startet Suche) " ('paste' darf nicht aktiviert sein, sonst funktioniert zweites nicht!) "------------------------------------------------------------------------------- map /\< map! \>/ " Alternative: " Wort suchen (1. startet Wort-Eingabe, 2. startet Suche) " (besser per , verdeckt leider sonst Fenster-Steuerung mit !) " map /\< "------------------------------------------------------------------------------- " VORTRAG FUNCTION SYNTAX HIGH/LOW " Syntaxhintergrund umschalten zw. "light" und "dark" " map :let &background = ( &background == "dark" ? "light" : "dark" ) map :call ToggleSyntax() "------------------------------------------------------------------------------- " Alternative mit 3 Zuständen (g:wrap = globale Variable = Zustand "no/std/own") let g:bg = "no" function! ToggleSyntax() if g:bg == "no" call MyColorScheme() let g:bg = "std" elseif &background == "light" set background=dark highlight Normal ctermbg=black ctermfg=white guibg=black guifg=white highlight LineNr ctermbg=black ctermfg=white guibg=black guifg=white highlight Cursor ctermbg=fg ctermfg=bg guibg=fg guifg=bg highlight lCursor ctermbg=fg ctermfg=bg guibg=fg guifg=bg " highlight CursorLine term=NONE ctermbg=white guibg=white " highlight CursorColumn term=NONE ctermbg=white guifg=white " set cursorcolumn " set cursorline let g:bg = "own" else call MyColorScheme() syntax off set nocursorcolumn set nocursorline let g:bg = "no" endif endfunction "------------------------------------------------------------------------------- " VORTRAG FUNCTION TOGGLE FORMAT " Alternative mit 3 Zuständen (g:tw = globale Variable = Zustand "0/80/72") " - danach "gqap" = aktuellen Absatz formatieren (_g_lobal q a _p_aragraph) map :call ToggleTextWidth() map :call FormatCurrentParagraph() "------------------------------------------------------------------------------- let g:tw = "0" function! ToggleTextWidth() if g:tw == "0" set textwidth=80 let g:tw = "80" elseif g:tw == "80" set textwidth=72 let g:tw = "72" else set textwidth=0 let g:tw = "0" endif echo "textwidth" &textwidth endfunction function! FormatCurrentParagraph() " Aktuellen Absatz formatieren (geht 1 Absatz vor) normal gqap " 1 Absatz zurückgehen normal { " Zeile nach unten (1 Zeile zuviel zurück korrigieren!) normal j endfunction "------------------------------------------------------------------------------- " VORTRAG FUNCTION TABSTOP " Tabstops auf 4 oder 8 Zeichen setzen map :call ToggleTabWidth() "------------------------------------------------------------------------------- function! ToggleTabWidth() if &tabstop == 4 set tabstop=8 set shiftwidth=8 else set tabstop=4 set shiftwidth=4 endif echo "tabstop" &tabstop endfunction "------------------------------------------------------------------------------- " Dateititelzeile vervollständigen "------------------------------------------------------------------------------- "map :call CompleteTitle() "map :call Underline("-") "map :call Underline("=") "map :call AppendFilename() "map :call RemoveFilename() function! CompleteTitle() try call RemoveCopyright() normal j call RemoveFilename() normal k catch endtry call Underline("=") call AppendCopyright() normal j call AppendFilename() call append(line("."), "") normal j call append(line("."), "") normal j endfunction "------------------------------------------------------------------------------- " Text auf akt. Zeile in gleicher Länge mit "-" oder "=" unterstreichen " Argument "ch" hat Wert "-" oder "=" "------------------------------------------------------------------------------- function! Underline(ch) " Marke 'z auf akt. Cursorposition setzen normal mz " Leerzeichen am Zeilenende entfernen s/ *$// " Zeile nach unten gehen (wenn mögl. und Linie darunter löschen falls vorhanden) if line(".") < line("$") normal j " Linie da? -> Löschen if getline(".") =~ "^[=-][=-]*$" normal dd endif " War Linie nicht letzte Zeile? -> Wieder eine Zeile nach oben if line(".") != line("'z") normal k endif endif " Zeilenlänge ermitteln let line_cnt = strlen(getline(".")) " Neue Zeile anhängen (zunächst leer) call append(line("."), "") " In neue Zeile springen normal j " Zeilenlänge x Zeichen "a:ch" an neue Zeile anhängen while line_cnt > 0 if a:ch == "-" normal A- else normal A= endif let line_cnt = line_cnt - 1 endwhile " Zu Marke 'z zurückspringen normal `z endfunction "------------------------------------------------------------------------------- " Akt. Dateiname als "[FILENAME]" an Zeilenende anhängen (rechter Rand = Pos 80) "------------------------------------------------------------------------------- function! AppendFilename() " Falls "[FILENAME]" schon da, wird es entfernt call RemoveFilename() " Marke 'z auf akt. Cursorposition setzen normal mz " Ausreichend Leerraum anhängen, um auf 80 Zeichen zu kommen let space_cnt = 80 - strlen(getline(".")) - strlen(bufname("%")) - 2 while space_cnt > 0 normal A let space_cnt = space_cnt - 1 endwhile " Text "[FILENAME]" anhängen normal A[ " Neue Zeile mit Jahr danach call append(line("."), bufname("%")) " Angehängte Zeile mit akt. joinen, Leerz. löschen, Dateinamen anhängen normal JxA] " Zu Marke 'z zurückspringen normal `z endfunction "------------------------------------------------------------------------------- " Text "[FILENAME]" am Zeilenende entfernen "------------------------------------------------------------------------------- function! RemoveFilename() " Marke 'z auf akt. Cursorposition setzen normal mz " Text "[FILENAME]" am Zeilenende entfernen " (Fehlermeldung unterdrücken, falls nicht vorhanden) try s/ *\[[^\]]*\] *$// catch endtry " Zum Zeichen mit Marke `z zurückspringen normal `z endfunction "------------------------------------------------------------------------------- " "(C) 2012 T.Birnthaler OSTC GmbH" am Zeilenende anfügen "------------------------------------------------------------------------------- function! AppendCopyright() " Falls "@(C) YYYY T.Birnthaler OSTC GmbH" schon da, wird es entfernt call RemoveCopyright() " Marke 'z auf akt. Cursorposition setzen normal mz " Ausreichend Leerraum anhängen, um auf 80 Zeichen zu kommen let space_cnt = 80 - strlen(getline(".")) - 31 while space_cnt > 0 normal A let space_cnt = space_cnt - 1 endwhile " Text "(C)" anhängen normal A(C) " Neue Zeile mit Jahr danach call append(line("."), strftime("%Y", localtime())) " Angehängte Zeile mit akt. joinen, Leerz. löschen, Text " T.Birnthaler OSTC GmbH" anhängen normal J normal A T.Birnthaler OSTC GmbH " Zu Marke 'z zurückspringen normal `z endfunction "------------------------------------------------------------------------------- function! RemoveCopyright() "------------------------------------------------------------------------------- " Marke 'z auf akt. Cursorposition setzen normal mz " Text "(C) YYYY T.Birnthaler OSTC GmbH" am Zeilenende entfernen " (Fehlermeldung unterdrücken, falls nicht vorhanden) try s/ *(C).*GmbH *$// catch endtry " Zu Marke 'z zurückspringen normal `z endfunction "------------------------------------------------------------------------------- " VORTRAG NEW REMOVE map :call AddNewToday() function! AddNewToday() "------------------------------------------------------------------------------- " Falls "@NEW...@" schon da, wird es entfernt call RemoveNewToday() " Marke 'z auf akt. Cursorposition setzen normal mz " Text "@NEW" anhängen normal A @NEW " Neue Zeile mit Datum danach call append(line("."), strftime("%d.%m.%Y", localtime())) " Angehängte Zeile mit akt. joinen, Leerz. löschen, Text "@" anhängen normal JxA@ " Zu Marke 'z zurückspringen normal `z endfunction "------------------------------------------------------------------------------- " VORTRAG NEW REMOVE map :call RemoveNewToday() function! RemoveNewToday() "------------------------------------------------------------------------------- " Marke 'z auf akt. Cursorposition setzen normal mz " Text "@NEW@" am Zeilenende entfernen " (Fehlermeldung unterdrücken, falls nicht vorhanden) try s/ *@NEW[^@]*@ *$// catch endtry " Zu Marke 'z zurückspringen normal `z endfunction "------------------------------------------------------------------------------- " URL aus aktueller Zeile extrahieren und mit externem Browser anzeigen " dies ist keine URL abc.def.ghi mitten im Text " dies ist eine URL www.ostc.de mitten im Text " dies ist eine URL http://ostc.de mitten im Text " dies ist eine URL ftp://ostc.de mitten im Text " dies ist eine URL file://ostc.de mitten im Text "------------------------------------------------------------------------------- map :call ShowUrlWithBrowser() function! ShowUrlWithBrowser() let line = getline(".") let url = matchstr(line, "www\.[^ ]*") if url == "" let url = matchstr(line, "http:[^ ]*") endif if url == "" let url = matchstr(line, "ftp:[^ ]*") endif if url == "" let url = matchstr(line, "file:[^ ]*") endif " echo url if url != "" exec "!firefox " . url else echo "No URL found" endif endfunction map w :call ShowUrlWithBrowser() "------------------------------------------------------------------------------- " VORTRAG LOCAL VIMRC " Lokale vimrc einlesen (modifiziert diese) "------------------------------------------------------------------------------- if filereadable($HOME . "/.vimrc_local") source ~/.vimrc_local endif