Vim

Aus SchnallIchNet
Wechseln zu: Navigation, Suche

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

Siehe auch

Ctags
Univerity of Washington