X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;ds=inline;f=vimrc;h=7a51eba3ba0036c069fc162009a3f6b67dcd260b;hb=4d1cd4888b2af7f8d4c73dc7a918aff4351cc6df;hp=75283da711ca796f02b4ee243951c7b70afb1dee;hpb=892d099baa74f7399d60c78378f2e401dd14e05e;p=config%2Fdotfiles.git
diff --git a/vimrc b/vimrc
index 75283da..7a51eba 100644
--- a/vimrc
+++ b/vimrc
@@ -1,5 +1,20 @@
" Vim main configuration file.
+" Copyright (C) 2011-2012 Simon Ruderich
+"
+" This file is free software: you can redistribute it and/or modify
+" it under the terms of the GNU General Public License as published by
+" the Free Software Foundation, either version 3 of the License, or
+" (at your option) any later version.
+"
+" This file is distributed in the hope that it will be useful,
+" but WITHOUT ANY WARRANTY; without even the implied warranty of
+" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+" GNU General Public License for more details.
+"
+" You should have received a copy of the GNU General Public License
+" along with this file. If not, see .
+
" EDITOR SETTINGS
@@ -64,6 +79,14 @@ if exists('+cryptmethod')
set cryptmethod=blowfish
endif
+" Clear all vimrc-related autocmds. Has to be done here as the vimrc augroup
+" is used multiple times.
+if has('autocmd')
+ augroup vimrc
+ autocmd!
+ augroup END
+endif
+
" EDIT SETTINGS
@@ -179,9 +202,34 @@ if has('statusline')
" Always display the status line even if there is only one window.
set laststatus=2
+ " 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()
+ let l:bufnr = bufnr('$')
+ if l:bufnr > 1
+ let l:result = '/'
+ if exists('*printf')
+ let l:result .= printf('%02d', l:bufnr)
+ else
+ " Older Vims don't have printf() (and no .= either). Emulate
+ " "%02d".
+ if l:bufnr < 10
+ let l:result = l:result . '0'
+ endif
+ let l:result = l:result . l:bufnr
+ endif
+ return l:result
+ else
+ return ''
+ endif
+ endfunction
+
set statusline=
" on the left
- set statusline+=%02n: " buffer number
+ set statusline+=%02n " buffer number
+ set statusline+=%{StatuslineBufferCount()} " highest buffer number
+ set statusline+=:
set statusline+=%f\ " path to current file in buffer
set statusline+=%h " [help] if buffer is help file
set statusline+=%w " [Preview] if buffer is preview buffer
@@ -236,6 +284,33 @@ cmap
cnoremap
cnoremap
+if has('eval')
+" Don't move the cursor to the first column for certain scroll commands (, , ). Thanks to jamessan in #vim on Freenode (2011-08-31
+" 02:27 CEST) for the 'nostartofline' tip. But I can't use 'nostartofline'
+" directly because it also enables that feature for other commands which I
+" don't want.
+
+ " Set 'nostartofline' for a single movement.
+ function! s:TemporaryNostartofline(movement)
+ let l:startofline = &startofline
+ set nostartofline
+ execute 'normal! ' . a:movement
+ let &startofline = l:startofline
+ endfunction
+
+ " Thanks to fow in #vim on Freenode (2012-02-16 15:38 CET) for the idea to
+ " use ""; Vim documentation reference: :help <>.
+ nnoremap
+ \ :call TemporaryNostartofline("C-F>")
+ nnoremap
+ \ :call TemporaryNostartofline("C-B>")
+ nnoremap
+ \ :call TemporaryNostartofline("C-D>")
+ nnoremap
+ \ :call TemporaryNostartofline("C-U>")
+endif
+
" Write before suspending, thanks to deryni in #vim on Freenode (2011-05-09
" 20:02 CEST). To suspend without saving either unmap this or use :stop.
nnoremap :update:stop
@@ -244,9 +319,10 @@ nnoremap :update:stop
" in #vim on Freenode (2011-08-15 00:17 CEST).
nnoremap 2
-" Use to move down a page and - to move up one like in mutt.
-nnoremap
-nnoremap -
+" Use to move down a page and - to move up one like in mutt. Don't use
+" nnoremap so the / 'nostartofline' fix (see above) works.
+nmap
+nmap -
" Go to next and previous buffer. Thanks to elik in #vim on Freenode
" (2010-05-16 18:38 CEST) for this idea.
@@ -271,9 +347,9 @@ nnoremap O po
" Maps to change spell language between English and German and disable spell
" checking.
if exists('+spell')
- noremap sn :set nospell
- noremap se :set spell spelllang=en_us
- noremap sd :set spell spelllang=de_de
+ nnoremap sn :set nospell
+ nnoremap se :set spell spelllang=en_us
+ nnoremap sd :set spell spelllang=de_de
endif
" Add semicolon to the end of the line. Thanks to
@@ -407,10 +483,12 @@ if has('syntax')
" Use (limited) syntax based omni completion if no other omni completion is
" available. Taken from :help ft-syntax-omni.
if has('autocmd') && exists('+omnifunc')
- autocmd FileType *
- \ if &omnifunc == '' |
- \ setlocal omnifunc=syntaxcomplete#Complete |
- \ endif
+ augroup vimrc
+ autocmd FileType *
+ \ if &omnifunc == '' |
+ \ setlocal omnifunc=syntaxcomplete#Complete |
+ \ endif
+ augroup END
endif
" Highlight lines longer than 78 characters. Thanks to Tony Mechelynck
@@ -440,17 +518,20 @@ if has('syntax')
" Settings for specific filetypes.
" Haskell.
+ let g:hs_highlight_delimiters = 1
let g:hs_highlight_boolean = 1
let g:hs_highlight_types = 1
let g:hs_highlight_more_types = 1
-
" 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
- " Vim, enable folding for autogroups (a) and functions (f).
- let g:vimsyn_folding = "af"
+ " Python.
+ let g:python_highlight_all = 1
+ " Vim.
+ let g:vimsyn_embed = 0 " don't highlight embedded languages
+ let g:vimsyn_folding = 'af' " folding for autogroups (a) and functions (f)
" XML.
let g:xml_syntax_folding = 1
endif
@@ -489,12 +570,10 @@ endif
" twice.
if has('autocmd')
augroup vimrc
-" Remove all autocmds from the current group.
- autocmd!
" Go to last position of opened files. Taken from :help last-position-jump.
autocmd BufReadPost *
- \ if line("'\"") > 1 && line("'\"") <= line("$") |
+ \ if line("'\"") > 1 && line("'\"") <= line('$') |
\ execute "normal! g'\"" |
\ endif
" But not for Git commits, go to beginning of the file.
@@ -513,13 +592,17 @@ if has('autocmd')
" Automatically disable 'paste' mode when leaving insert mode. Thanks to
" Raimondi in #vim on Freenode (2010-08-14 23:01 CEST). Very useful as I only
-" want to paste once and then 'paste' gets automatically unset.
+" want to paste once and then 'paste' gets automatically unset. InsertLeave
+" doesn't exist in older Vims.
if exists('##InsertLeave')
autocmd InsertLeave * set nopaste
endif
-" Write file when running :mak[e] before 'makeprg' is called.
- autocmd QuickFixCmdPre * write
+" Write file when running :mak[e] before 'makeprg' is called. QuickFixCmdPre
+" doesn't exist in older Vims.
+ if exists('##QuickFixCmdPre')
+ autocmd QuickFixCmdPre * write
+ endif
" AFTER/FTPLUGIN AUTO COMMANDS
@@ -568,7 +651,7 @@ if has('eval')
" file it was loaded from, thus the changes you made. Thanks to the
" vimrc_example.vim file in Vim's source. Modified to use the same filetype
" for the diffed file than the filetype for the original file.
- if !exists(":DiffOrig")
+ if !exists(':DiffOrig')
command DiffOrig
\ let s:diff_orig_filetype = &filetype
\ | vertical new