X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=vimrc;h=40e95ba3c9a798419ca7a1753859c1c8c1ff2fe8;hb=18a2c1a79c19450bc858152b2f5d60c1a88f4058;hp=8922942e69464852ff54341f69fe7a8943eaeece;hpb=134f3aca5c54cf8e44f2e7c110ece7b8a6fce798;p=config%2Fdotfiles.git diff --git a/vimrc b/vimrc index 8922942..40e95ba 100644 --- a/vimrc +++ b/vimrc @@ -137,6 +137,15 @@ if has('eval') endif +" TERMINAL SETTINGS + +" Also enable fast terminal mode in GNU screen and tmux, but not for SSH +" connections. +if &term =~# '^screen' && !exists('$SSH_CONNECTION') + set ttyfast +endif + + " EDIT SETTINGS " Enable automatic file detection, plugin and indention support. @@ -180,7 +189,7 @@ set formatoptions+=ro " started. set formatoptions+=l " Remove comment leader when joining lines where it makes sense. -if HasVersionAndPatch(703, 541) +if s:HasVersionAndPatch(703, 541) set formatoptions+=j endif @@ -224,6 +233,11 @@ endif " (add ! to override)" warning when switching buffers. set hidden +" When splitting vertically put the new window right of the current one. +if has('vertsplit') + set splitright +endif + " DISPLAY SETTINGS @@ -291,7 +305,7 @@ if has('statusline') " If there's more than one buffer return "/" (e.g. "/05") where " is the highest buffer number, otherwise return nothing. Used in " 'statusline' to get an overview of available buffer numbers. - function! StatuslineBufferCount() + function! s:StatuslineBufferCount() let l:bufnr = bufnr('$') if l:bufnr > 1 let l:result = '/' @@ -314,7 +328,7 @@ if has('statusline') " Like %f but use relative filename if it's shorter than the absolute path " (e.g. '../../file' vs. '~/long/path/to/file'). fnamemodify()'s ':.' is " not enough because it doesn't create '../'s. - function! StatuslineRelativeFilename() + function! s:StatuslineRelativeFilename() " Display only filename for help files. if &buftype == 'help' return expand('%:t') @@ -373,22 +387,72 @@ if has('statusline') endif endfunction + " Display unexpected 'fileformat' and 'fileencoding' settings. + function! s:StatuslineFileFormat() + if &fileformat != 'unix' + return '[' . &fileformat . ']' + else + return '' + endif + endfunction + function! s:StatuslineFileEncoding() + if &fileencoding != '' && &fileencoding != 'utf-8' + \ && &filetype != 'help' + return '[' . &fileencoding . ']' + else + return '' + endif + endfunction + + " Return current syntax group in brackets or nothing if there's none. + function! s:StatuslineSyntaxGroup() + let l:group = synIDattr(synID(line('.'), col('.'), 1), 'name') + if l:group != '' + return '[' . l:group . '] ' + else + return '' + endif + endfunction + + " Short function names to make 'statusline' more readable. + function! SBC() + return s:StatuslineBufferCount() + endfunction + function! SRF() + return s:StatuslineRelativeFilename() + endfunction + function! SFF() + return s:StatuslineFileFormat() + endfunction + function! SFE() + return s:StatuslineFileEncoding() + endfunction + function! SSG() + return s:StatuslineSyntaxGroup() + endfunction + set statusline= " on the left - set statusline+=%02n " buffer number - set statusline+=%{StatuslineBufferCount()} " highest buffer number + set statusline+=%02n " buffer number + set statusline+=%{SBC()} " highest buffer number set statusline+=: if has('modify_fname') && v:version >= 700 " some functions need 7.0 - set statusline+=%{StatuslineRelativeFilename()} " path to current file - set statusline+=\ " space after path + set statusline+=%{SRF()} " path to current file + set statusline+=\ " space after path else - set statusline+=%f\ " path to current file in buffer + set statusline+=%f\ " path to current file in buffer + endif + set statusline+=%h " [help] if buffer is help file + set statusline+=%w " [Preview] if buffer is preview buffer + set statusline+=%m " [+] if buffer was modified, + " [-] if 'modifiable' is off + set statusline+=%r " [RO] if buffer is read only + if v:version >= 700 " %#..# needs 7.0 + set statusline+=%#Error# " display warnings + set statusline+=%{SFF()} " - unexpected file format + set statusline+=%{SFE()} " - unexpected file encoding + set statusline+=%## " continue with normal colors endif - set statusline+=%h " [help] if buffer is help file - set statusline+=%w " [Preview] if buffer is preview buffer - set statusline+=%m " [+] if buffer was modified, - " [-] if 'modifiable' is off - set statusline+=%r " [RO] if buffer is read only " on the right set statusline+=%= " right align @@ -532,6 +596,11 @@ if exists('+spell') nnoremap sn :set nospell nnoremap se :set spell spelllang=en_us nnoremap sd :set spell spelllang=de_de +" If no spell support is available, these mappings do nothing. +else + nmap sn + nmap se + nmap sd endif " Add semicolon to the end of the line. Thanks to @@ -539,12 +608,12 @@ endif " on Freenode for an improved version which doesn't clobber any marks. nnoremap ; :call setline(line('.'), getline('.') . ';') +if has('eval') " * and # for selections in visual mode. Thanks to " http://got-ravings.blogspot.com/2008/07/vim-pr0n-visual-search-mappings.html " and all nerds involved (godlygeek, strull in #vim on Freenode). -if has('eval') function! s:VSetSearch() - let l:temp = @@ + let l:temp = @@ " unnamed register normal! gvy " Added \C to force 'noignorecase' while searching the current visual " selection. I want to search for the exact string in this case. @@ -553,6 +622,16 @@ if has('eval') endfunction vnoremap * :call VSetSearch()// vnoremap # :call VSetSearch()?? + +" Use 'noignorecase' for * and #. See comment in s:VSetSearch() for details. +" Thanks to the writers of s:VSetSearch(), see above. + function! s:NSetSearch() + let l:cword = expand('') + let l:regex = substitute(escape(l:cword, '\'), '\n', '\\n', 'g') + let @/ = '\C\V'. '\<' . l:regex . '\>' + endfunction + nnoremap * :call NSetSearch()// + nnoremap # :call NSetSearch()?? endif " I often type "W" instead of "w" when trying to save a file. Fix my mistake. @@ -692,7 +771,7 @@ if has('syntax') if !&diff && exists(':2match') " Use ColorColumn for overlong lines if available and my color " scheme is used. - if &t_Co == 256 && HasSyntaxGroup('ColorColumn') + if &t_Co == 256 && s:HasSyntaxGroup('ColorColumn') 2match ColorColumn /\%>78v./ else 2match Todo /\%>78v./ @@ -724,17 +803,17 @@ if has('syntax') " Special highlight for tabs to reduce their visibility in contrast to other " SpecialKey characters (e.g. ^L). - if &t_Co == 256 && HasSyntaxGroup('specialKeyTab') + if &t_Co == 256 && s:HasSyntaxGroup('specialKeyTab') call matchadd('specialKeyTab', '\t') endif endif endfunction " Enable highlights for the current and all new windows. Thanks to bairui in " #vim on Freenode (2012-04-01 00:22 CEST) for the WinEnter suggestion. - call CustomSyntaxHighlights() + call s:CustomSyntaxHighlights() if has('autocmd') augroup vimrc - autocmd WinEnter * call CustomSyntaxHighlights() + autocmd WinEnter * call s:CustomSyntaxHighlights() augroup END endif @@ -747,11 +826,17 @@ if has('syntax') let g:hs_highlight_boolean = 1 let g:hs_highlight_types = 1 let g:hs_highlight_more_types = 1 + " Java. + let g:java_highlight_java_lang_ids = 1 " color java.lang.* identifiers " Perl. let g:perl_fold = 1 let g:perl_fold_blocks = 1 let g:perl_nofold_packages = 1 let g:perl_include_pod = 1 " syntax coloring for PODs + " PHP. + let g:php_folding = 3 " fold functions + let g:php_short_tags = 0 " no short tags (), not always usable + let g:php_sql_query = 1 " highlight SQL queries in strings " Python. let g:python_highlight_all = 1 " Shell. @@ -857,10 +942,10 @@ if has('autocmd') autocmd InsertLeave * set nopaste endif -" Write file when running :mak[e] before 'makeprg' is called. QuickFixCmdPre -" doesn't exist in older Vims. +" Write all files when running :mak[e] before 'makeprg' is called. +" QuickFixCmdPre doesn't exist in older Vims. if exists('##QuickFixCmdPre') - autocmd QuickFixCmdPre * write + autocmd QuickFixCmdPre * wall endif " Don't ignore case while in insert mode, but ignore case in all other modes. @@ -883,11 +968,9 @@ if has('autocmd') return endif - echohl WarningMsg - echo 'Do not edit this file! (Maybe a template file.)' - echohl None + echoerr 'Do not edit this file! (Maybe a template file.)' endfunction - autocmd BufRead * call SearchForDoNotEditHeader() + autocmd BufRead * call s:SearchForDoNotEditHeader() " AFTER/FTPLUGIN AUTO COMMANDS