Vim Tricks

Hier werden nützliche und coole Vim Befehle gesammelt mit den man sich schnell durch eine Datei bewegen und Text ändern kann. Weiter unten ist ein Beispiel für die Konfigurationsdatei vimrc gegeben, die als Basis zum Konfigurieren von Vim genutzt werden kann.

Bewegung durch den Text

0: Springe zum Zeilenanfang
_: Springe zum ersten Wort in der Zeile
$: Springe zum Ende der Zeile
w: word - Springe zum nächsten Wort (getrennt von Whitespace und Sonderzeichen)
W: Word - Springe zum nächsten Wort (getrennt von Whitespace)
b: back - Springe zum vorherigen Wort (getrennt von Whitespace und Sonderzeichen)
B: Back - Springe zum vorherigen Wort (getrennt von Whitespace)
e: end - Springe zum nächsten Ende eines Wortes (getrennt von Whitespace)
E: End - Springe zum nächsten Ende eines Wortes (getrennt von Whitespace)
fx: find x - Springe zum nächsten x in der Zeile. x kann jedes Symbol sein
Fx: Find x - Springe zum vorherigen x in der Zeile. x kann jedes Symbol sein
tx: till x - Springe genau vor das nächsten x in der Zeile. x kann jedes Symbol sein

Editieren von Text

dw: delete word - Vom Curser bis zum Ende des Wortes löschen
diw: delete inside word - Vom Anfang des Wortes bis zum Ende des Wortes löschen
di(: delete inside parenthesis - Alles innerhalb der Klammern, in der sich der Cursor befindet, löschen. Das gleiche funktioniert mit {, [, <.
dit: delete inside tag - Alles innerhalb von XML Tags löschen
Alle Kommandos mit d für delete funktionieren auch mit c für change. Damit wird ein Text gelöscht und danach direkt in den Insert-Mode gewechselt um ihn zu ersetzen.
delete und change können auch mit find und till find kombiniert werden:
df-: delete find : - Lösche vom Cursor bis einschließlich dem nächsten :
ct.: change till . - Ändere den Rest des Satzes aber behalte den Punkt
i: insert - Vor dem Cursor in den Insert-Mode wechseln
I: Insert - Am Anfang der Zeile in den Insert-Mode wechseln
a: append - Nach dem Cursor in den Insert-Mode wechseln
A: Append - Am Ende der Zeile in den Insert-Mode wechseln
o: new line - Neue Zeile unterm Cursor einfügen und dort in den Insert-Mode wechseln
O: new line - Neue Zeile überm Cursor einfügen und dort in den Insert-Mode wechseln
gq: format - Formatiere den markierten Text
gqq: format line - Formatiere die aktuelle Zeile
gq2j: format 2 down - Formatiere diese und die 2 nächsten Zeilen

Bearbeiten von mehreren Zeilen

Mit Ctrl+v in den Visual Block Modus wechseln und einen Block selektieren. Jetzt kann vor dem Block inserted oder nach dem Block appended werden: I: Insert - Insert in every line at the start of the block
A: Append - Append to every line at the end of the block


Konfigurationsdatei .vimrc

Die Datei vimrc ist die zentrale Konfigurationsdatei für Vim. Sie liegt meistens unter $HOME/.vimrc oder $/HOME/.vim/vimrc. Hier können Einstellungen wie Tabs vs Spaces, Zeilennummern und Custom Keybindings eingerichtet werden oder sogar Plugins eingefügt werden. Eine Beispiel Konfiguration:

set nocompatible
set notermguicolors " term is recognized as gui, prevent colorchange
set encoding=utf-8
set mouse=          " disable the mouse
set visualbell      " set bell to visual instead of audio
set t_vb=           " set visual bell to nothing

" Indenting
filetype plugin indent on
set autoindent      " Copy indent from current line when starting a new line
set smartindent     " Do smart autoindenting when starting a new line
set smarttab        " A <Tab> in front of a line inserts 'shiftwidth' blanks
set tabstop=4       " Number of spaces that a <Tab> in the file counts for
set shiftwidth=4    " Number of spaces to use for each step of (auto)indent.
set expandtab       " Use spaces for <Tab>
" You can get rid of tabs by having 'expandtab' set and using the command :%retab!
set backspace=indent,eol,start  " allow backspace over autoindent, line breaks, beginning of insert

" Quality of Life
set number          " show line numbers
set relativenumber  " show linenumbers as relative to current line
set scrolloff=5     " number of lines that are kept visible above and below the cursor
set textwidth=100   " A line will be broken after white space to get this width (disable with 0)
" set colorcolumn=100  " insert a warning line to keep your lines short
" set showmatch     " when inserting a bracket, jump to the matching one for a short time
set showmode        " show mode in bottom left corner
set showcmd         " show command in bottom left corner

" Rendering
" set ttyfast       " If you have a slow connection you may want to set this option off
" set list          " Show special characters defined in listchars (set nolist)
set listchars=tab:▸\ ,eol:¬
syntax on           " Syntax highlighting according to the current value of the 'filetype' option

" Search settings
set hlsearch        " search results stay highlighted
set incsearch       " highlight search while typing
set ignorecase      " ignore case when searching
set smartcase       " ignore case only when searching for lower case letters

" How to do 90% of what Plugins do with just Vim (Youtube Video)
" 'Fuzzy Finder' with :find command  (looking in path, wildmenu to display all matches when using
" wildcard *
set path+=**
set wildmenu

" Custom Keybindings

" set leader to space
nnoremap <SPACE> <Nop>
let mapleader=" "

nnoremap <Esc> <cmd>nohlsearch<CR> " Remove search highlighting with <Esc>
nnoremap <Leader>pv :Ex<CR>  " project view
nnoremap <Leader>bn :bn!<CR> " buffer next
nnoremap <Leader>bp :bp!<CR> " buffer previous
nnoremap <Leader>bv :bp!<CR> " buffer previous
nnoremap <Leader>bb :buffers<CR>:b<Space> " list all buffers and and type number to open
noremap <C-u> <C-u>zz " scroll half page and center on cursor
noremap <C-d> <C-d>zz " scroll half page and center on cursor

" write with sudo tee trick - asks for password, which does not work in NeoVim :(
cnoremap w!! execute 'silent! write !sudo tee % >/dev/null' <bar> edit!