:help
: Hilfe aufrufen:help thema
: Hilfe zu Thema/Befehl aufrufen<ctrl>-5
: Zu verlinktem Thema springen (statt<ctrl>-]
)<ctrl>-t
: Zurückspringen:h ctrl-r
: Hilfe zu Shortcut<ctrl>-r
anzeigen:h i_ctrl-r
: Hilfe zu Shortcut<ctrl>-r
im Insertmodus anzeigen:h c_ctrl-r
: Hilfe zu Shortcut<ctrl>-r
im Commandmodus (also:
...) anzeigen:h index
: Alle Shortcuts anzeigen
j
: Abk
: Aufh
: Linksl
: Rechtsi
: EinfügemodusR
: Replace-Modus (überschreibt bestehende Zeichen)<Esc>
: Einfügemodus beenden<ctrl>-n
: Autovervollständigung im Einfügemodus
<ctrl>-e
: Abwärts<ctrl>-y
: Aufwärts
q[a-z]
: Aufnahme für Macro a-z beginnenq
: Aufnahme beenden@[a-z]
: Macro a-z abspielenq:
: Commandline-Window mit Befehlshistorie anzeigen (<ctrl>-F
falls man in der Commandline ist)
Ein window ist ein rechteckiger, abgetrennter Bereich in vim. Der Arbeitsbereich kann in mehrere Windows unterteilt sein. In der Regel wird in einem Window ein Ausschnitt eines Buffers (s.u.) angezeigt. Anders gesagt: Windows sind Viewports auf Buffer.
:sp datei.txt
: Bildschirm teilen und datei.txt in neuem Fenster anzeigen:<ctrl>-w=
: Alle Fenster gleich groß machen<ctrl>-w <ctrl>-_
: Aktuelle Fensterhöhe maximieren<ctrl>-w<n>+
: Aktuelle Fenstergröße um<n>
Zeilen erhöhen (Default<n>
=1)<ctrl>-w<n>-
: Aktuelle Fenstergröße um<n>
Zeilen reduzieren (Default<n>
=1)<ctrl>-wj
: Zu nächstem Fenster darüber wechseln<ctrl>-wk
: Zu nächstem Fenster darunter wechseln:mks!
: Aktuelle Session inkl. aller Buffer und Fenster speichernvi -S
: Vim mit gespeicherter Session startn
Jede Datei wird in vim in einem Buffer geöffnet. Das Bearbeitungsfenster ist lediglich eine Ansicht auf einen Buffer. Es können beliebig viele Dateien in Buffern geöffnet werden und jeder Buffer kann in keinem, einem oder sogar mehreren Fenstern sichtbar sein. Das :split
Kommando öffnet z.B. eine Datei in einem neuen Buffer und unterteilt den Bildschirm in ein weiteres Fenster um diesen Buffer anzuzeigen.
Öffnet man die selbe Datei mit :split
in einem weiteren Fenster, wird dort tatsächlich exakt der selbe Buffer angezeigt: Ändert man den Inhalt in einem Fenster, ändert er sich im anderen automatisch mit.
Wichtig für die folgenden Befehle ist, dass :set hidden
aktiviert ist, sonst kann ein geänderter Buffer nicht verlassen werden.
:ls
: Liste aller Buffer anzeigen:e <dateiname.txt>
: Datei in Buffer laden:bn
: Nächsten Buffer im akt. Fenster anzeigen:bp
: Vorigen Buffer im akt. Fenster anzeigen:b[0-9]
: Angegebenen Buffer im akt. Fenster anzeigen:bd
: Buffer des akt. Fensters löschen (Datei schließen):bd[0-9]
: Angegebenen Buffer löschen:bs[0-9]
:Angegebenen Buffer in neuem geteilten Fenster anzeigen:bufdo s/abc/xyz/g
: Befehl in allen Buffern ausführen
Eine interessante Diskussion mit weiteren Tipps gibt es [[hier|mike/vim-buffer-discussion]].
Tabs unterscheiden sich in vim von Tabs in anderen Programmen. Ein Tab ist im Grunde fast wie eine eigene Editor-Instanz mit einer beliebigen Windows-Aufteilung. Allerdings teilen sich die Tabs die geöffneten Buffer! Man kann also ein und dieselbe Datei in unterschiedlichen Tabs und dort in verschiedenen Fenstern anzeigen.
:tabe <datei.txt>
: Neuen Tab mit Datei öffnen (bzw. Buffer, falls Datei schon in Buffer)
zf
: Fold aus markiertem Bereich erstellenzd
: Aktuellen Fold löschenzR
: Alle Folds öffnenzM
: Alle Folds schliessenzo
: Fold unter Cursor öffnenzc
: Fold unter Cursor schliessen
Es gibt 3 wesentliche Einstellungen zum Verhalten von Tabs in vim:
tabstop
(ts
): Gibt an, wie Tabs (also echte TAB-Zeichen im Text) dargestellt werden sollen. Standardmäßig auf 8, bei uns meistens auf 4expandtab
(et
): Falls ein, werden Tabs beim Eingeben immer in die entsprechende Anzahl von Leerzeichen übersetzt (expandet)softtabstop
(sts
): Gibt an, wie viele Leerzeichen eingefügt werden sollen, wenn die<Tab>
-Taste im Einfügemodus gedrückt wird. Isttabstop=8
undnoexpandtab
gesetzt, wirkt<Tab>
wie folgt:softtabstop=5
es werden 5 Leerzeichen eingefügtsofttabstop=8
es 8 Leerzeichen eingefügtsofttabstop=10
es 1TAB
und 2 Leerzeichen erzeugt.
Ist expandtab gesetzt, werden immer nur die angegebene Zahl an Leerzeichen eingefügt.
shiftwidth
(sw
): Gibt an, wie viele Spalten von den Einrück-Operationen (>) verwendet werden sollen
:set noet
: Tab Expansion ausschalten:set et?
: Aktuelle Einstellung abfragen:retab!
: Datei mit aktueller Einstellung neu "Tabben":set list
/:set nolist
: Sonderzeichen (inkl. Tabs) anzeigen/ausblenden<ctrl>+V
: Echtes TAB einfügen (Falls expandtab gesetzt ist und man trotzdem ein "echtes" Tab braucht)
:set <name>
: Setting ansehen:set <name> <wert>
: Setting verändern
Beispiel:
:set fileencoding
(zeigt encoding der akt. Datei, z.B. utf-8)
Mit modelines kann man in einer Textdatei vim-Einstellungen hinterlegen, die beim Bearbeiten automatisch geladen werden (häufig z.B. für Tab oder Syntax):
; vim:ft=dosini:
Zu beachten: die modeline-Option muss aktiviert sein. Für root ist sie standardmäßig aus!
set modeline " enable inline modeline (default off for root)
:abbreviate - list abbreviations
:args - argument list
:augroup - augroups
:autocmd - list auto-commands
:buffers - list buffers
:breaklist - list current breakpoints
:cabbrev - list command mode abbreviations
:changes - changes
:cmap - list command mode maps
:command - list commands
:compiler - list compiler scripts
:digraphs - digraphs
:file - print filename, cursor position and status (like Ctrl-G)
:filetype - on/off settings for filetype detect/plugins/indent
:function - list user-defined functions (names and argument lists but not the full code)
:function Foo - user-defined function Foo() (full code list)
:highlight - highlight groups
:history c - command history
:history = - expression history
:history s - search history
:history - your commands
:iabbrev - list insert mode abbreviations
:imap - list insert mode maps
:intro - the Vim splash screen, with summary version info
:jumps - your movements
:language - current language settings
:let - all variables
:let FooBar - variable FooBar
:let g: - global variables
:let v: - Vim variables
:list - buffer lines (many similar commands)
:lmap - language mappings (set by keymap or by lmap)
:ls - buffers
:ls! - buffers, including "unlisted" buffers
:map! - Insert and Command-line mode maps (imap, cmap)
:map - Normal and Visual mode maps (nmap, vmap, xmap, smap, omap)
:map<buffer> - buffer local Normal and Visual mode maps
:map!<buffer> - buffer local Insert and Command-line mode maps
:marks - marks
:menu - menu items
:messages - message history
:nmap - Normal-mode mappings only
:omap - Operator-pending mode mappings only
:print - display buffer lines (useful after :g or with a range)
:reg - registers
:scriptnames - all scripts sourced so far
:set all - all options, including defaults
:setglobal - global option values
:setlocal - local option values
:set - options with non-default value
:set termcap - list terminal codes and terminal keys
:smap - Select-mode mappings only
:spellinfo - spellfiles used
:syntax - syntax items
:syn sync - current syntax sync mode
:tabs - tab pages
:tags - tag stack contents
:undolist - leaves of the undo tree
:verbose - show info about where a map or autocmd or function is defined
:version - list version and build options
:vmap - Visual and Select mode mappings only
:winpos - Vim window position (gui)
:xmap - visual mode maps only
:%s/^[\ \t]*\n//g
:s/abc/xyz/
:abc
in aktueller Zeile durchxyz
ersetzen:%s/abc/xyz
:abc
überall durchxyz
ersetzen:%s/<ctrl-r><ctrl-w>/xyz/g
: Wort unter Cursor überall durchxyz
ersetzen:%s/<ctrl-r>"/xyz/g
: Letzten geyankten Ausdruck überall durchxyz
ersetzen:s/ /\r/
: Leerstellen durch Zeilenumbruch ersetzen
:%s/^M$//g
Achtung: Das ^M wird mit <Ctrl>-V
erzeugt (oder <Ctrl>-V<Ctrl>-M
)
Alternativ dazu kann man auch das probieren:
:set ff=unix
:set ff=dos
ga
:s/=\(.*\)->\(.*\)$/='\2 : '.\1->\2;
Konvertiert
$x=$bla->name
zu
$x='name :'.$bla->name;
gv
<F11>
: aktivieren/deaktivieren
Erfordert set pastetoggle=<F11>
in .vimrc
:set fileencoding=iso-8859-1
oder
:set fileencoding=latin1
:set fileencoding=utf-8
Datei, deren encoding vim falsch erkannt hat, mit neuem Encoding neu laden
:e ++enc=iso-8859-15
Der BOM ist der Byte-order Mark am Anfang einer Textdatei. Zum aktivieren/deaktivieren:
:se bomb :se nobomb
Um den korrekten Filtetype (und damit das richtige Syntax-Highlighting) für einen Dateityp zu definieren, wird folgender Eintrag in ~/.vim/filetype.vim angelegt:
au BufNewFile,BufRead *.tpl,*.page setf xml
Vim versucht, bestimmte Sprachen zu erkennen, und automatisch "richtig" einzurücken. Das kann manchmal Probleme machen. Häufig hilft dann:
:set nocindent
Möchte man das für bestimmte Filetypen komplett ausschalten, reicht ein Eintrag in .vimrc:
autocmd BufNewFile,BufRead *.js,*.css set nocindent
" Highlight real TABs: underline
hi ExtraWhitespace cterm=underline guibg=red
match ExtraWhitespace /\t/
autocmd ColorScheme * highlight ExtraWhitespace
Bei Problemen mit der Darstellung (z.B. Zeilen mit Umlaut werden falsch angezeigt, falsche Reihenfolge, ...) kann es an den Einstellungen der locale liegen. Unter Ubuntu empfiehlt sich ein Blick in /etc/defaults/locale
bzw. der Befehl locale
.