Created
June 24, 2011 14:39
-
-
Save vain/1044903 to your computer and use it in GitHub Desktop.
Momentane .vimrc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" ------------- | |
" 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