Vim
Inhaltsverzeichnis
Erklaerungen
Zeilennummern
:set number
Zeilennummern angezeigen
Einrueckung verhindern
:set noai
syntax highlighting
wenn man syntax aktiviert hat, die datei aber nicht gehighlighted wird, kann das mehrere gruende haben.
wenn man eine datei geoeffnet hat fuer die vim definitiv eine highlighting-definition vorliegen hat, kann man diese per hand aktivieren.
wenn man z.b. eine apache config datei offen hat, kann man folgendes tun:
- in der geoeffneten datei folgendes eingeben:
:setf apache
- oder man oeffnet das file ~/.vim/filetype.vim (ggf. anlegen und folgendes eintragen:
au BufNewFile,BufRead /export/project/modules/*/apache-configs/*.conf setf apache
hier legt man fuer vim fest, dass hinter dem angegebenen pfad immer apache-configs zu erwarten sind.
alle vorhandenen syntax-files findet man hier:
/usr/share/vim/vim71/syntax
eigene syntax-files legt man entsprechend hier ab:
~/.vim/syntax/
wenn bereits ein syntax-script im system-ordner existiert
mit dem man nicht zufrieden ist, muss man dies nicht loeschen oder aendern!
think of updates...
statt dessen kann man folgendes tun:
~/.vim/after/syntax/
man erzeugt ein verzeichnis 'after/syntax'. diese files werden nach den systemweiten files
eingelesen und erweitern, bzw. ueberschreiben vorherige einstellungen nur.
Modis
Die folgende Tabelle zeigt die wichtigsten Übergänge vom Kommando-Modus in die anderen Modi sowie die anschließende Rückkehr in den Kommando-Modus:
Wechsel zum | durch | Rückkehr zum Kommando-Modus |
Einfüge-Modus | Kommandos zum Einfügen von Zeichen und Zeilen i a I A c C o O |
Esc |
Ersetzungs-Modus | R | Esc |
Kommandozeilen-Modus | : / ? ! | * Esc zum Abbruch * NewLine bzw. LineFeed (Enter-Taste) zur Ausführung des Kommandos |
visuellen Modus | v (zeichenweise Markierung) V (zeilenweise Markierung) Ctrl-V (Markierung rechteckiger Blöcke) |
* Abbruch durch die Wiederholung des einleitenden Kommandos oder auch Esc * Manipulation des markierten Blocks durch ein entsprechendes Kommando, z.B. d, c oder ~ (Tilde) |
Select-Modus | gh (zeichenweise Markierung) gH (zeilenweise Markierung) gCtrl-H (Markierung rechteckiger Blöcke) |
* Abbruch durch Esc * Manipulation des markierten Blocks durch ein entsprechendes Kommando. Die Eingabe eines druckbaren Zeichens bewirkt das Löschen des markierten Bereichs und den anschließenden Übergang in den Einfüge-Modus, wobei das eingegebene Zeichen an der aktuellen Cursor-Position in den Editor-Puffer eingefügt wird. Der Einfüge-Modus wird wie gewohnt durch Esc beendet. |
Ex-Modus | Q | vi bzw. visual |
Cursor positionierung
Befehl | Beschreibung |
[n] G | Sprung zu bestimmter Zeile Beispiele: 25G für Zeile 25 G ohne n für die letzte Zeile |
für Spalte 10 | ohne n für die erste Spalte | |
0 (Zahl Null) | Sprung zum Zeilenanfang (Spalte 1) |
$ | Sprung zum Zeilenende (letzte Spalte) |
[n] w | n Wörter vorwärts |
[n] b | n Wörter rückwärts |
[n] W | n WÖRTER vorwärts (WORT ist eine Folge von Nicht-Whitespace-Zeichen) |
[n] B | n WÖRTER rückwärts (WORT ist eine Folge von Nicht-Whitespace-Zeichen) |
[n] H | Cursor an den Anfang der n-ten vom oberen Rand gezählten Zeile eines Fensters positionieren |
M | Cursor an den Anfang der in der Mitte eines Fensters befindlichen Zeile positionieren |
[n] L | Cursor an den Anfang der n-ten vom unteren Rand gezählten Zeile eines Fensters positionieren |
[n] Ctrl-F | n Seiten vorwärts blättern |
[n] Ctrl-B | n Seiten rückwärts blättern |
[n] Ctrl-D | n Zeilen vorwärts blättern; wenn n fehlt: standardmäßig eine halbe Seite blättern |
[n] Ctrl-U | n Zeilen rückwärts rollen; wenn n fehlt: standardmäßig eine halbe Seite blättern |
[n] Ctrl-E | n Zeilen vorwärts rollen |
[n] Ctrl-Y | n Zeilen rückwärts rollen |
[n] zt | Zeile n oder (falls n fehlt) die aktuelle Zeile an den oberen Fensterrand verschieben |
[n] zz | Zeile n oder (falls n fehlt) die aktuelle Zeile in die Mitte des Fensters verschieben |
[n] zb | Zeile n oder (falls n fehlt) die aktuelle Zeile an den unteren Fensterrand verschieben |
% | sucht für bestimmte Text-Elemente, die unter oder hinter dem Cursor stehen, den bzw. die zugehörigen Partner Folgende Text-Elemente werden akzeptiert: * runde, eckige und geschweifte Klammern: ( [ { } ] ) * Begrenzer von Kommentaren der Programmiersprache C: /* und */ * folgende Direktiven des C-Präprozessors: #if, #ifdef, #else, #elif, #endif |
d % | s.o. erklaerung zu '%' ==> 'd %' loescht entsprechend bis zum matchenden zeichen. so kann man z.b. alle zeilen von einem '{' und ein bis zum schliessenden '}' loechen |
[n] f Zeichen | nach rechts zum n-ten Zeichen gehen |
[n] t Zeichen | nach rechts bis vor das n-te Zeichen gehen |
[n] F Zeichen | nach links zum n-ten Zeichen gehen |
[n] T Zeichen | nach links bis hinter das n-te Zeichen gehen |
[n] ; | das letzte f-, F-, t- oder T-Kommando n Mal wiederholen |
[n] , | das letzte f-, F-, t- oder T-Kommando n Mal in entgegengesetzter Richtung wiederholen |
m Marke | Setzen einer Marke an der aktuellen Cursor-Position Marke ist ein einzelner Buchstabe, wobei sich Kleinbuchstaben immer auf den aktuellen Editor-Puffer beziehen, wogegen Großbuchstaben für alle aktuell geladenen Puffer global gültig sind. Das Setzen einer Marke verändert die Cursor-Position nicht. Beispiel: ma setzt Marke a |
` Marke (Accent grave) | Sprung zu einer vorher gesetzten Marke |
' Marke (Acccent aigu) | Sprung zum ersten Nicht-Whitespace-Zeichen der durch Marke markierten Zeile |
insert text
Befehl | Beschreibung |
:r file | read file and insert it AFTER the current line |
:nr file | read file and insert it AFTER the line n |
!!program | replace(!) current line with output of program |
speichern/beenden
Befehl | Beschreibung |
:n,mw file | Speichert zeile n bis zeile m in file |
:n,mw >>file | Speichert zeile n bis zeile m ans ende von file |
Standardkonfiguration anpassen
Die Standardkonfigurationsdatei heisst vimrc und liegt in /etc/vim/ (Ueberraschung ;-) ) Diese Datei kann man sich in sein eigenes Homeverzeichnis kopieren und dann dort die Anpassungen reinschreiben die man selbst gerne mag. Ich habe zum Beispiel das set nu (kurz fuer set number) und syntax on (Syntaxhighlighting) drin und noch ein tolles Feature: set scrolloff=5 (zeigt immer 5Zeilen ueber und unter der aktuellen Cursorpositon an, ist cool und nuetzlich.) Man kann diese Dinge natuerlich auch erst mal direkt eingeben zum ausprobieren:
:set nu :syntax on :set scrolloff=5
Makros
Noch ein tolles Feature von VIM: Makros. Starten mit q und einem beliebigen weiteren Buchstaben z.B. a. Dann steht unter auf einmal ein recording (Zauberrei :-) )
Jetzt kann man fast beliebig Textmanipulationen vornehmen z.B.:
n (next, zum naechsten Suchbegriff springen) cw (change word, das Wort austauschen) xxx (das gesuchte Wort durch xxx ersetzen)
am Schluss muss man wieder ein q druecken (stop recording?)
Nun kann man das Makro durch ein
@a
einmal aufrufen. Oder auch durch ein
100@a
100-mal. Toll, oder?
Ctags funtionalitaet
vim bietet ctags-unterstuetzung
siehe hierzu bitte die seite Ctags
vimrc beispiele
.vimrc einfach im home-verzeichnis ablegen
Simple .vimrc (minimum configuration)
" some minimum stuff for vim syntax on set visualbell set tabstop=3 :hi Comment ctermfg=lightblue
Cool .vimrc (Beispiel fuer vim >= 7.0)
set nocompatible " Use Vim defaults (much better!) set bs=2 " allow backspacing over everything in insert mode set ai " always set autoindenting on set viminfo='20,\"50 " read/write a .viminfo file, don't store more " than 50 lines of registers set ruler set scrolloff=5 " allways show 5 lines above and under cursor set tabstop=3 " I want tabs to be shown 4 columns wide set shiftwidth=3 " and also use it for shits " In text files, always limit the width of text to 78 characters autocmd BufRead *.txt set tw=78 " Don't use Ex mode, use Q for formatting map Q gq " Switch syntax highlighting on, when the terminal has colors " Also switch on highlighting the last used search pattern. if &t_Co > 2 || has("gui_running") syntax on set hlsearch set nu " I want to see line numbers hi LineNr ctermfg=darkgrey ctermbg=black """"7.2_only" nmap <silent> <F7> :NERDTreeToggle<CR> " set cursorline " show line where cursor currently is endif augroup cprog " Remove all cprog autocommands au! " When starting to edit a file: " For *.c and *.h files set formatting of comments and set C-indenting on. " For other files switch it off. " Don't change the order, it's important that the line with * comes first. autocmd BufRead * set formatoptions=tcql nocindent comments& autocmd BufRead *.c,*.h set formatoptions=croql cindent comments=sr:/*,mb:*,el:*/,:// " autocmd BufRead *.php set makeprg=php\ -l\ % " autocmd BufRead *.php set errorformat=%m\ in\ %f\ on\ line\ %l au BufNewFile,BufRead *.config setf dosini " see ~/.vim/syntax au BufNewFile,BufRead *.pp setf puppet au BufNewFile,BufRead *.rhtml,*.rhtm setf eruby au BufNewFile,BufRead *.php setf php au BufNewFile,BufRead *.phps setf php au BufNewFile,BufRead capfile setf ruby augroup END