Always show status bar.
authorIain Patterson <me@iain.cx>
Wed, 14 Dec 2005 11:01:24 +0000 (11:01 +0000)
committerIain Patterson <me@iain.cx>
Wed, 14 Dec 2005 11:01:24 +0000 (11:01 +0000)
Blue status bar.
Use ,l to cycle between list formats.
  nolist.
  list with tabs replaced by \___.
  list with tabs replaced by \___ and EOL denoted by $.
Use ,c to cycle between case-sensitive and -insensitive matching.
Status bar shows list format, case matching and code of character under cursor.
Set wide columns for diff view.
Restore terminal columns on exit.
Change indent options for different file types.

git-svn-id: https://svn.cambridge.iain.cx/profile/trunk@11 6be0d1a5-5cfe-0310-89b6-964be062b18b

.vimrc

diff --git a/.vimrc b/.vimrc
index 9ca37c6..5a3622a 100755 (executable)
--- a/.vimrc
+++ b/.vimrc
@@ -12,19 +12,144 @@ se incsearch
 se ignorecase
 se smartcase
 se shm=aot
+se laststatus=2
 syn enable
 if has("gui_running")
   se guifont=Bitstream\ Vera\ Sans\ Mono\ 12
   colo darkblue
 endif
+highlight StatusLine guifg=white guibg=blue ctermbg=white ctermfg=blue
 if has("win32")
   se guifont=Bitstream_Vera_Sans_Mono:h10:cANSI
 endif
+:autocmd!
+
+" Initialise list format per buffer.
+au BufEnter * let b:iainlist = 0
+
+fun Cycle_List()
+  let b:iainlist += 1
+  if b:iainlist > 2 | let b:iainlist = 0 | endif
+  if b:iainlist == 0
+    set nolist
+  elseif b:iainlist == 1
+    set lcs=tab:\\_,trail:_,extends:<,precedes:>
+    set list
+  else
+    set lcs=tab:\\_,trail:_,extends:<,precedes:>,eol:$
+    set list
+  endif
+endfun
+
+fun Show_List()
+  if b:iainlist == 0
+    " No list.
+    return "  "
+  elseif b:iainlist == 1
+    " Just tabs.
+    return "\\_"
+  else
+    " Full list.
+    return "\.\$"
+  endif
+endfun
+
+" Save the current window width so if we change it we can restore it
+" when we quit.
+let andyoldcols=&columns
+
+" This expands the terminal to display two 80-column files side-by-side
+" when vim is opened in diff mode.
+if &diff | let &columns = 164 | endif
+
 map <C-"> viwvbi"<ESC>ea"<ESC>
 map - yyp:s/./-/g<RETURN>:let @/=''<RETURN>:<RETURN>
 map = yyp:s/./=/g<RETURN>:let @/=''<RETURN>:<RETURN>
 command W :w
-:autocmd!
-autocmd Syntax c se cinkeys=0{,0},0),:,0#,!^F,o,O,e
-autocmd Syntax perl se cinkeys=0{,0},0),:,!^F,o,O,e
-autocmd Syntax php se cinkeys=0{,0},0),:,!^F,o,O,e
+se tags=~/.ctags
+
+fun Invert_Case()
+  let &ic = ! &ic
+endfun
+
+fun Show_Case()
+  if &ic | return "ca" | else | return "Ca" | endif
+endfun
+
+set statusline=%2n\:\ %<%t\ [%{Show_List()}][%{Show_Case()}]%y%m%r%=%b\ 0\x%02B\ (%3.6c,%-4.6l)\ %4.6L\ %P
+" Swap case-sensitivity with ,c.
+map ,c :call Invert_Case()<CR>:<CR>
+" Cycle list styles with ,l.
+map ,l :call Cycle_List()<CR>:<CR>
+
+au VimLeave * if exists("andyoldcols") | let &columns=andyoldcols | endif
+
+" Autocommands to setup features we only want in certain modes...
+
+" ... For C/C++ files:
+
+au BufEnter * if &ft == "c" || &ft == "cpp" | call CMode_map() | endif
+au BufLeave * if &ft == "c" || &ft == "cpp" | call CMode_unmap() | endif
+
+" ... For Perl files:
+
+au BufEnter * if &ft == "perl" | call PerlMode_map() | endif
+au BufLeave * if &ft == "perl" | call PerlMode_unmap() | endif
+
+" ... For PHP files:
+
+au BufEnter * if &ft == "php" | call PHPMode_map() | endif
+au BufLeave * if &ft == "php" | call PHPMode_unmap() | endif
+
+" ... For makefiles:
+
+au BufEnter * if &ft == "make" | call MakeMode_map() | endif
+au BufLeave * if &ft == "make" | call MakeMode_unmap() | endif
+
+" Functions to call when we enter/leave a programming language buffer...
+
+" ... For C-like languages:
+
+fun CMode_map()
+  set cinkeys=0{,0},:,0#,!^F,o,O,e
+  set cinwords=if,else,while,do,for,switch
+endfun
+
+fun CMode_unmap()
+endfun
+
+" .. For Perl files:
+
+fun PerlMode_map()
+  set cinkeys=0{,0},:,!^F,o,O,e
+  set cinwords=if,else,while,do,for,eval
+  set foldmethod=indent
+endfun
+
+fun PerlMode_unmap()
+  set foldmethod=manual
+endfun
+
+fun PHPMode_map()
+  set nocindent
+  set autoindent
+  set foldmethod=indent
+endfun
+
+fun PHPMode_unmap()
+  set noautoindent
+  set cindent
+  set foldmethod=manual
+endfun
+
+" ... For makefiles:
+
+fun MakeMode_map()
+  set list
+  set noexpandtab
+endfun
+
+fun MakeMode_unmap()
+  set nolist
+  set expandtab
+endfun