]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - vimrc
vimrc: Display highest buffer number in 'statusline'.
[config/dotfiles.git] / vimrc
diff --git a/vimrc b/vimrc
index 15660a46cd0a363fab1be4cee820cf2237f22233..87724343ab8db6aabc870b759245d3bb8b61b9bc 100644 (file)
--- a/vimrc
+++ b/vimrc
@@ -79,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
 
@@ -194,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 "/<nr>" (e.g. "/05") where <nr>
+    " 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
@@ -286,9 +319,9 @@ nnoremap <C-W>O <C-W>p<C-W>o
 " Maps to change spell language between English and German and disable spell
 " checking.
 if exists('+spell')
-    noremap <silent> <Leader>sn :set nospell<CR>
-    noremap <silent> <Leader>se :set spell spelllang=en_us<CR>
-    noremap <silent> <Leader>sd :set spell spelllang=de_de<CR>
+    nnoremap <silent> <Leader>sn :set nospell<CR>
+    nnoremap <silent> <Leader>se :set spell spelllang=en_us<CR>
+    nnoremap <silent> <Leader>sd :set spell spelllang=de_de<CR>
 endif
 
 " Add semicolon to the end of the line. Thanks to
@@ -422,10 +455,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
@@ -468,7 +503,7 @@ if has('syntax')
     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)
+    let g:vimsyn_folding = 'af' " folding for autogroups (a) and functions (f)
     " XML.
     let g:xml_syntax_folding = 1
 endif
@@ -507,12 +542,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.
@@ -531,13 +564,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
 
@@ -586,7 +623,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