Skip to content

Instantly share code, notes, and snippets.

@vain
Created June 24, 2011 14:39
Show Gist options
  • Save vain/1044903 to your computer and use it in GitHub Desktop.
Save vain/1044903 to your computer and use it in GitHub Desktop.
Momentane .vimrc
" -------------
" Jetzt nötig mit "richtigem" Vim-Package bei Arch (2009-09-14):
syntax enable
filetype plugin indent on
set hls
set incsearch
set showcmd
if !exists(":DiffOrig")
command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
\ | wincmd p | diffthis
endif
" -------------
" Leader auf's Komma
let mapleader=","
let maplocalleader=","
" -------------
" Komfortfunktionen für dotfiles
nmap <Leader>dotv :tabe $MYVIMRC<CR>
nmap <Leader>dotV :source $MYVIMRC<CR>
nmap <Leader>dotb :tabe ~/.bashrc<CR>
\:tabe ~/git/dotfiles/.bash_aliases<CR>
\:tabe ~/git/dotfiles/.bash_functions<CR>
\:tabe ~/git/dotfiles/.bash_environment<CR>
nmap <Leader>dotm :tabe ~/.muttrc<CR>
nmap <Leader>dotx :tabe ~/.Xresources<CR>
nmap <Leader>dota :tabe ~/git/dotfiles/.awesome/rc.lua<CR>
\:tabe ~/git/dotfiles/.awesome/theme.lua<CR>
" -------------
" Grundlegendes Verhalten
" Hotkeys, die die Tabbreite ändern.
for i in range(1, 8)
exe 'map <ESC>'.i.' :set ts='.i.' sw='.i.'<CR>'
endfor
" Schnellere Klammerpaarhervorhebung
let loaded_matchparen = 1
set showmatch
" Nicht überlange Zeilen am Rand durch @s ersetzen, sondern nur am Ende
" drei @s platzieren.
set display+=lastline
" Keine zusätzlichen Dateien wie Backups oder VIMINFO.
set nobackup
set nowritebackup
set viminfo=""
" Tabline
set showtabline=2
set tabpagemax=30
" Schönerer Workflow: Wartet nach Escape nicht so ewig
set timeoutlen=750
" Color Column!
set colorcolumn=80,130,+1
" Bei Tab und Vervollständigung zeige alle potentiellen Matches an
set wildmenu
" Rewrapping von gq} auf q
map Q gq}
" Besseres Movement in langen Zeilen.
nmap k gk
nmap j gj
" C-Direction zum Fensterwechsel.
nmap <silent> <C-k> :wincmd k<CR>
nmap <silent> <C-j> :wincmd j<CR>
nmap <silent> <C-h> :wincmd h<CR>
nmap <silent> <C-l> :wincmd l<CR>
" Suchergebnisse nicht mehr highlighten:
map <F12> :noh<CR>
" Tabs und Umbrüche kontrollieren
set tw=72
set nolist
set nonumber
set ai tabstop=4 sw=4
set linebreak
if (&term =~ '^xterm')
set listchars=tab:├┈,eol:↵,precedes:←,extends:→,trail:▓,nbsp:%
else
set listchars=tab:├-,eol:$,precedes:←,extends:→,trail:#,nbsp:%
endif
set sidescroll=1
map <F11> :set list!<CR>
map <Leader>w :set wrap!<CR>
set nowrap
" Scrolling offsets.
set scrolloff=2
set sidescrolloff=2
" Shortcut, um trailing whitespace zu killen.
map <F9> :%s/[[:space:]]\+$//gc<CR>
" Shortcuts für scons und make - nicht vergessen, dass für Screen
" eventuell das ein oder andere remapped werden muss, s.u.
map <F5> :call CompileAndRun(1)<CR>
map <S-F5> :call CompileAndRun(0)<CR>
map <C-F5> :w \| !./%<CR>
map <F7> :w \| !scons 2>&1 && xpdf *pdf<CR>
map <F8> :w \| !make view TEXFILE=% 2>&1<CR>
" Quickfix mit Tabs besser.
set switchbuf=usetab,newtab
" Neuer Tab mit Quickfix.
map <Leader>f :tabnew \| cope \| wincmd k \| q<CR>
" Funktion statt einzelnen Run-Skripten für die Programme. Allerdings
" kann es immernoch ein Run-Skript geben und das hat dann auch Vorrang.
" Man kann nämlich nicht alles automatisch mit dieser Funktion hier
" abbilden (mehrere Dateien, komplexe Parameter, ...).
fun! CompileAndRun(runProgram)
" Setze das Programm, was es auszuführen gälte. Die Variable
" l:interpreter gibt an, dass das Programm direkt ausgeführt werden
" soll -- ist sie 1, dann wird unterbunden, dass auf Ausführbarkeit
" des Programms getestet wird. l:domake weist einen Programmbau an.
" In l:runner steht, wie ein eventuelles Run-Skript heißt.
let l:progname = './' . expand('%:t:r')
let l:interpreter = 0
let l:domake = 1
let l:runner = './run'
" Der normale make-Befehl piped das irgendwie an "tee" weiter. Das
" hat aber zur Folge, dass der Returncode vom ersten Befehl verloren
" geht. Das hier ist ein Tipp aus dem Netz, wie man trotzdem noch an
" den ersten Returncode herankommt:
setl shellpipe=2>&1\ \|\ tee\ %s;exit\ \${PIPESTATUS[0]}
" Finde heraus, mit was du das Programm bauen kannst.
if filereadable("SConstruct")
setl makeprg=scons
elseif filereadable("Makefile") || filereadable("makefile")
setl makeprg=make
elseif filereadable("build.xml")
setl makeprg=ant
elseif &filetype == 'c'
setl makeprg=gcc\ -Wall\ -o\ %<\ %
elseif &filetype == 'cpp'
setl makeprg=g++\ -Wall\ -o\ %<\ %
elseif &filetype == 'java'
setl makeprg=javac\ %
let l:progname = 'java ' . expand('%:t:r')
let l:interpreter = 1
elseif &filetype == 'matlab'
let l:progname = 'octave ' . expand('%') . ' | less'
let l:interpreter = 1
let l:domake = 0
else
" Bei allem anderen nimmst du an, dass die Datei selbst
" ausführbar ist und dass man sie nicht bauen muss. Das ist bei
" Skripten jeglicher Art der Fall. Ist sie doch nicht
" ausführbar, dann wird das unten abgefangen.
let l:progname = './' . expand('%')
let l:domake = 0
endif
" Speichern, bauen und ggf. ausführen.
write
if l:domake == 1
silent !echo -e "\n\nBuilding..."
make!
else
silent !echo -e "\n\nNot running build tool."
endif
if v:shell_error == 0 && a:runProgram == 1
if executable(l:runner)
silent !echo -e "\n\nExecuting run script..."
exec '!' . l:runner
elseif executable(l:progname) || l:interpreter == 1
silent exec '!echo -e "\n\nExecuting \"'
\. l:progname . '\""...'
exec '!' . l:progname
endif
endif
endfun
" Im visuellen Modus mit ,c Spalten formatieren.
vnoremap <Leader>c :!sed 's/^/-/' \| column -t \| sed 's/^-//'<CR>
vnoremap <Leader>C :!sed 's/^/-/' \| column -t \| sed 's/^-//'<CR>gv=
" Alt-right/left to navigate forward/backward in the tags stack
map <ESC>h <C-T>
map <ESC>l <C-]>
" expand/fold
map <ESC>j zO
map <ESC>k zC
map <ESC>J zo
map <ESC>K zc
set foldcolumn=0
set foldmethod=marker
set foldlevel=500
" Tabs mit ä und ö wechseln.
nmap ä gt
nmap ö gT
" Tabs verschieben
fun! TabMove(d)
if a:d == -1
if tabpagenr() > 1
exe ":tabm ".(tabpagenr() - 2)
endif
else
exe ":tabm ".tabpagenr()
endif
endfun
nmap Ä :call TabMove(1)<CR>
nmap Ö :call TabMove(-1)<CR>
" Interaktion mit dem X11-Clipboard über xclip.
fun! X11Copy()
silent %w !xclip -selection clipboard -f | xclip
endfun
fun! X11CopySel()
silent '<,'>w !xclip -selection clipboard -f | xclip
endfun
fun! X11Paste()
r !xclip -selection clipboard -o
endfun
fun! X11PastePrimary()
r !xclip -o
endfun
nmap <Leader>xc :call X11Copy()<CR>
vmap <Leader>xc :call X11CopySel()<CR>
nmap <Leader>xp :call X11Paste()<CR>
nmap <Leader>xP :call X11PastePrimary()<CR>
set pastetoggle=<F10>
set mouse=
" -------------
" Verhalten abhängig vom Terminal
" Farben abhängig von der verfügbaren Farbanzahl
set background=dark
hi clear
if (&t_Co == 256)
hi ColorColumn ctermbg=233
hi TabLine ctermfg=250 ctermbg=237 cterm=none
hi TabLineFill ctermfg=235
hi TabLineSel ctermfg=231
hi StatusLine ctermfg=16 ctermbg=238 cterm=bold
hi StatusLineNC ctermfg=233 ctermbg=235 cterm=bold
hi VertSplit ctermfg=235 ctermbg=235
hi Error ctermbg=160
hi ErrorMsg ctermbg=160
hi WarningMsg ctermfg=226
hi Visual ctermbg=236
hi Title ctermfg=226
hi Special ctermfg=171
hi SpecialKey ctermfg=46
hi NonText ctermfg=46
hi Pmenu ctermfg=239 ctermbg=233 cterm=none
hi PmenuSbar ctermbg=240 cterm=none
hi PmenuThumb ctermbg=178 cterm=none
hi WildMenu ctermfg=16 cterm=bold
hi Comment ctermfg=237
hi Constant ctermfg=208
hi String ctermfg=208 ctermbg=234
hi Folded ctermfg=3 ctermbg=233
hi FoldColumn ctermfg=61 ctermbg=232 cterm=none
hi DiffText ctermfg=229 ctermbg=34 cterm=none
hi DiffChange ctermfg=229 ctermbg=27 cterm=none
hi DiffDelete ctermfg=229 ctermbg=124 cterm=none
hi DiffAdd ctermfg=229 ctermbg=34 cterm=none
hi diffRemoved ctermfg=196 cterm=bold
hi diffAdded ctermfg=46 cterm=bold
hi diffFile ctermfg=226 cterm=bold
hi diffSubname ctermfg=13 cterm=none
hi diffLine ctermfg=13 cterm=bold
else
hi ColorColumn ctermbg=4
hi TabLineSel ctermbg=4
endif
if (&term =~ '^screen')
" set title for screen
" VimTip http://vim.wikia.com/wiki/VimTip1126
set title
set t_ts=k
set t_fs=\
let &titleold = fnamemodify(&shell, ":t")
set titlestring=%t%M
" Remap some keys
map <ESC>[15;2~ <S-F5>
map <ESC>[17;2~ <S-F6>
endif
if (&term =~ '^linux')
map <ESC>[31~ <S-F5>
endif
if (&term =~ '^xterm' || &term =~ '^rxvt')
" Dito für XTerm.
" Prinzipiell ginge das auch, ohne t_ts und t_fs zu setzen. Dann
" wird aber der Titel in der Taskleiste nicht aktualisiert, also
" passt da doch wieder irgendwas nicht. Ergo: Manuell setzen.
" Das "^G" ist ein Byte mit Wert 07. Eingeben kann man das hier mit
" "Strg-V Strg-G" (G ist der siebte Buchstabe im Buchstabet) -- oder
" man nimmt einen Hexeditor.
set title
set t_ts=]0;
set t_fs=
let &titleold = fnamemodify(&shell, ":t")
set titlestring=%t%M
endif
" -------------
" Hexkram
" vim -b : edit binary using xxd-format!
augroup Binary
au!
au BufReadPre *.bin let &bin=1
au BufReadPost *.bin if &bin | %!xxd
au BufReadPost *.bin set ft=xxd | endif
au BufWritePre *.bin if &bin | %!xxd -r
au BufWritePre *.bin endif
au BufWritePost *.bin if &bin | %!xxd
au BufWritePost *.bin set nomod | endif
augroup END
" -------------
" Hotfix für kaputtes Bash-Highlighting
if !exists(":Bash")
command Bash syntax off | let b:is_bash = 1 | syntax on
map <Leader>sb :Bash<CR>
endif
if !exists(":NoBash")
command NoBash syntax off | unlet b:is_bash | syntax on
map <Leader>sn :NoBash<CR>
endif
" -------------
" Statusline
" Immer an.
set laststatus=2
" Zeige wichtige Infos wie Zeilenenden, Encoding oder BOM.
set statusline=%f\ %y\ \ %h%m%r
\\ \ %#Error#%{&ff=='unix'?'':'\ '.&ff.'\ '}%*
\\ \ %#Error#%{&fenc==''?'':&fenc=='utf-8'?'':'\ '.&fenc.'\ '}%*
\\ \ %#Error#%{&bomb?'\ BOM\ ':''}%*
\%=\ [%4b,%4B]\ [%3v/%3{&tw}]\ [%5l/%5L]
" -------------
" Druckoptionen
set printoptions=formfeed:y,syntax:n,header:3
set printheader=%<%f%h%m
\\ (%{strftime('%F\ %T',getftime(expand('%')))})%=Page\ %N
" -------------
" LaTeX
" Formatiere eine Octave-like-Matrix.
vmap <S-F9> :s/ / \& /g<CR>gvk:s/$/ \\\\/g<CR>:noh<CR>
" -------------
" NERDTree Einstellungen
let NERDTreeShowHidden=1
map <F3> :NERDTreeToggle<CR>
" -------------
" Shortcuts für verschiedene Dateitypen
command! FtypeNothing :set ft=
command! FtypeBBcode :set ft=bbcode
command! FtypeUbuntuusers :set ft=ubuntuusers
" -------------
" explain.py einbinden
fun! DoExplainFile(explargs, yankundo)
" Merke dir die alte Position des Cursors. Führe dann die Ersetzung
" durch.
let l:prev = getpos(".")
%s/<<<explain\n\(\_.\{-}\n\)>>>\n/
\\=system("explain.py ".a:explargs, submatch(1))/g
" Dauerhaft? Oder nur yanken?
if a:yankundo
call X11Copy()
u
endif
" Cursor wieder an die alte Stelle zurück, Highlight des
" Suchtreffers abschalten.
call setpos(".", l:prev)
noh
endfun
" explain-yank-normal oder explain-here-normal. Oder "unicode".
nmap <Leader>eyn :call DoExplainFile("", 1)<CR>
nmap <Leader>ehn :call DoExplainFile("", 0)<CR>
nmap <Leader>eyu :call DoExplainFile("-u", 1)<CR>
nmap <Leader>ehu :call DoExplainFile("-u", 0)<CR>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment