====== VIM ======

===== Dateinen Öffnen =====

Commando Zeile:
  vim <file1> <file2> ... [-o|O] [-p] [+[N]]

Remove File:
  vim scp://damicha@127.0.0.1//home/damicha/.bashrc

in vim:
  :e[xplore] [<file>] [.]
  - autocompletion: <tab>
  - % - aktueller Datei Name + Pfad
  - % <tab>


===== Modi =====

Command/Normal  Modus:
  betreten mit <Esc> aus anderen Modi

Eingabe Modus:
  betreten mit e.g. i, a aus Command Modus
  verlassen mit <Esc>

Visueller Modus:
  betreten mit e.g. v aus Command Modus
  verlassen mit <Esc> oder Commando


===== Motions =====

im Command Mode:
  hjkl Keys
  Cursor Keys
  0, _, $       - Zeilenanfang, Erstes Zeichen, Zeilenende
  gg, G, N gg   - Erste Zeile, Letzte Zeile, Zeile N
  w, e          - gehe zu nächstem Wortanfang,  -ende
  b             - gehe zu vorherigem Wortanfang
  Ctrl-e, -y    - scroll runter, hoch
  zt, zz, zb    - Cursor zum Window-Anfang, -Mitte, -Ende


===== Text Editieren =====

Löschen (Commando Modus):
  x, <del>  - einzelnes Zeichen löschen
  dd, D, d0 - Zeile löschen, löschen bis Zeilenende, -anfang

Einfügen (wechsel in den Eingabemodus):
  i, I      - einfügen an Cursorposition, an erstem Zeichen der Zeile
  a, A      - Text hinter Cursorposition, am ende der Zeile einfügen
  o, O      - in neuer Zeile hinter, vor der aktueller Zeile einfügen

Ändern (Commando Modus):
  r         - ändere ein Zeichen
  <<, >>    - shift Links, shift Rechts


===== Vim Sprache =====

Vim Befehle folgen dem Muster: Verb-Modifizierer-Objekt
- Verben: d (delete), y (yank), v (visual), c (change), ...
- Modifizierer: a (around), i (inside), t (till), ...
- Objekt: w (word), p (paragraph), s (sentence), ...

Beispiele:
  daw, yaw      - delete/yank around word
  ci", ci(      - change inside quote/parenthesis


===== Marken- und Jumplisten =====

Marke:
  m<a-z>        - Marke setzen
  :marks        - Marken anzeigen
  '<a-z>        - springe zu Marke

Jump Listen:
  :jumps            - Jump-Liste zeigen
  Ctrl-O, Ctrl-I    - gehe zu älteren/neueren Sprungposition
  g; g,             - gehe zu älterer/neuerer Änderungspos.


===== Copy'n'Paste =====

Yanking:
  yy        - kopiere ganze Zeile
  "<reg>yy  - kopiere ganze Zeile in Register <reg>

Paste:
  P, p      - kopiere an/nach Cursorposition
  "<reg>P   - kopiere Register <reg> an Cursorposition

Register:
  :reg      - zeigt Register
  0, 1..9   - nummerierte Register (als Historie beim Yanking)
  a-z       - Register mit Namen
  Register Inhalt bleiben beim Beenden vom Vim erhalten


===== Visual Mode =====

Enter (Commando -> Visual Modus):
  v, V      - Charakter-, Zeileweise
  Ctrl-V    - Blockwise
  gv        - vorherige Auswahl
  <Esc>     - verlassen 

Auswahl (Visueller Modus):
  vim Movements
  o         - Wechsle zwischen Anfang und Ende

Modifizieren (wechsel in Commando Modus):
  y, d      - yank, delete ausgewählten Bereich
  <<, >>    - shift ausgewählte Zeilen


===== Buffer, Windows und Tabs =====

Buffers:
  :buffers  - zeige Buffer
  :b [n]    - wähle Buffer
  plugin :BufExplorer

Windows:
  :sp, :vsp         - horizontaler Split, vertikaler Split (auch Ctrl-S, Ctrl-V)
  Ctrl-W w          - wechsle Window (auch Ctrl-W Ctrl-W)
  Ctrl-W r          - rotiere Windows
  Ctrl [N]+, [N]-   - ändere Window Größe
  Ctrl [N]<, [N]>   - ändere Window Größe
  Ctrl-W =          - Windows bekommen gleiche Größe

Tabs:
  :tabe [.] - neuen Tab öffnen, . - mit File Dialoge
  :tabc     - Tab   schließen
  gt, gT    - go to next, got to previous Tab


===== Suchen und Ersetzen =====

suchen:
  /<pattern>    - Suche vorwärts
  ?<pattern>    - Suche rückwärts
  n, N          - nächster, vorheriger Match
  *, #          - suche vorwärts/rückwärts nach Wort unter dem Cursor
  gd, dD        - gehe zu lokaler/globaler Deklaration einer Variable

suchen und ersetzen:
  :%s/<such>/<neu>/g    - ersetze alle Vorkommen in gesamter Datei
  :%s//<neu>/g          - ersetze letzten Suchstring
im Visual Mode :'<,'>s/<such>/<neu>/


===== vimdiff =====

vimdiff <files> oder vim -d <files>

öffne vim im diff Mode (vim/vimdiff):
  :diffthis     - wähle Buffer zum Diffen
  :diffupdate   - aktualisiere Diffview
  :diffoff      - stoppe diff

  do            - übernehme Unterschied vom anderen Window
  dp            - übergebe Unterschied zum anderen Window

  zo, zc        - öffne/schließe Faltung
  zR            - und öffne alle Faltungen


===== Weitere Commandos =====

Ctrl-P, Ctrl-N  - (edit mode) - Autocompletion mit rückwärts, vorwärts Suche
u, Ctrl-R       - undo, redo
:, /            - und Cursor hoch, runter geht durch die Command- oder Such History.
%               - Springe zwischen matching Klammern
.               - Wiederhole letztes Kommando
Abspeichern und schließen:
:w <name>       - Datei abspeichern
:q, :q!         - Window, Tab schließen, vim beenden/erzwingen
:qa             - alles schließen und vim beenden


===== Plugins =====

phatogen        - Plugin Verwalter.
                  Jedes Plugin bekommt sein eigenes Verzeichnis
NerdTree        - komfortabler Filebrowser
BufExplorer     - zeige und wähle Buffer
gundo           - zeige vims undo-Baum
matchit         - erweitert %
tagbar          - zeigt Datei seine Variablen, Funktionen
repeat          - erweitert . (repeat) auf Plugins
yankstack       - wähle aus den letzten yank Registern


===== Anderes =====

.vimrc          - meine vimrc
vimperator      - Vim Interface für Firefox
Eclim           - stelle Eclipse Funktionalität für Vim bereit
Vim Adventures:
- http://vim-adventures.com/
Quellen:
Visual Block Mode:
- http://jvi.sourceforge.net/javahelpset/jvi-vis_block.html
Registers:
- http://usevim.com/2012/04/13/registers/
Learn to speak Vim:
- http://yanpritzker.com/2011/12/16/learn-to-speak-vim-verbs-nouns-and-modifiers/
Vim Reference Card:
- https://www.cmrr.umn.edu/~strupp/vim-3.0.refcard.html