]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - vimrc
vimrc: Enable 'hlsearch'.
[config/dotfiles.git] / vimrc
diff --git a/vimrc b/vimrc
index 7a56542261ea0682a55968a44c47c452edff838b..20685e94930d75e6b0ba75f06fea735d339f4bf1 100644 (file)
--- a/vimrc
+++ b/vimrc
@@ -190,6 +190,10 @@ if exists('+cursorline')
     set cursorline
 endif
 
+" Highlight all matches on the screen when searching. Use <C-L> (see below) to
+" remove the highlighting until the next search.
+set hlsearch
+
 " Display tabs, trailing space, non breakable spaces and long lines (when
 " wrapping is disabled).
 set list
@@ -202,9 +206,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
@@ -259,6 +288,33 @@ cmap <Left>  <Nop>
 cnoremap <C-P> <Up>
 cnoremap <C-N> <Down>
 
+if has('eval')
+" Don't move the cursor to the first column for certain scroll commands (<C-F,
+" <C-B>, <C-D>, <C-U>). 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 "<Bslash><Lt>"; Vim documentation reference: :help <>.
+    nnoremap <silent> <C-F>
+        \ :call <SID>TemporaryNostartofline("<Bslash><Lt>C-F>")<CR>
+    nnoremap <silent> <C-B>
+        \ :call <SID>TemporaryNostartofline("<Bslash><Lt>C-B>")<CR>
+    nnoremap <silent> <C-D>
+        \ :call <SID>TemporaryNostartofline("<Bslash><Lt>C-D>")<CR>
+    nnoremap <silent> <C-U>
+        \ :call <SID>TemporaryNostartofline("<Bslash><Lt>C-U>")<CR>
+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<CR>.
 nnoremap <silent> <C-Z> :update<CR>:stop<CR>
@@ -267,9 +323,10 @@ nnoremap <silent> <C-Z> :update<CR>:stop<CR>
 " in #vim on Freenode (2011-08-15 00:17 CEST).
 nnoremap <C-G> 2<C-G>
 
-" Use <Space> to move down a page and - to move up one like in mutt.
-nnoremap <Space> <C-F>
-nnoremap - <C-B>
+" Use <Space> to move down a page and - to move up one like in mutt. Don't use
+" nnoremap so the <C-F>/<C-B> 'nostartofline' fix (see above) works.
+nmap <Space> <C-F>
+nmap - <C-B>
 
 " Go to next and previous buffer. Thanks to elik in #vim on Freenode
 " (2010-05-16 18:38 CEST) for this idea.
@@ -294,9 +351,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
@@ -478,7 +535,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
@@ -520,7 +577,7 @@ if has('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.
@@ -598,7 +655,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