1  "
  2  " @(#)  This is vimrc for vim/gvim.
  3  "       This vimrc file will automatically configure itself based on
  4  "       the system it runs on (Windows/Unix).
  5  "       This vimrc file has been tested on SPARC/Solaris, Intel/Linux
  6  "       and Windows NT/ME
  7  "
  8  "       Config Notes:
  9  "       Unix:
 10  "           1. Create a directory: ~/vimtmp and move .viminfo there
 11  "           2. Link: ln -s .vimrc .gvimrc   
 12  "           3. If gvim is executed, .vimrc will be executed twice.
 13  "              First as .vimrc and then as .gvimrc. This is good!
 14  "       Windows:
 15  "           1. Create a directory: $HOME\vimtmp
 16  "           2. Move .viminfo (if it exists) to $HOME\vimtmp 
 17  "           3. Name .vimrc as _vimrc in $HOME   
 18  "
 19  "              Make sure there is no _gvimrc in $HOME. This creates a conflict. 
 20  "           4. Optional. In the Windows Global settings below, change the preferences
 21  "              to suit your needs.
 22  "
 23  " @(#)  01/07/25-03/07/21 xaos@darksmile.net, "http://www.darksmile.net/vimindex.html"
 24  "
 25  " Windows Global Settings. Font and scheme preferences
 26  "
 27  let mywinfont="Lucida_Console:h12:cANSI"
 28  let $myscheme=$VIMRUNTIME . '\colors\koehler.vim'
 29  let $myxscheme=$VIMRUNTIME . '/colors/koehler.vim'
 30  "
 31  " If full gui has been reached then run these additional commands. Unix only!
 32  "
 33  if has("gui_running") && &term == "builtin_gui"
 34      if &syntax == "" && isdirectory($VIMRUNTIME)
 35          syntax on
 36          set hlsearch
 37      endif
 38      map <F37> :set list!^M
 39      imap <F37> ^[:set list!^Ma
 40      highlight Normal guibg=white
 41      highlight Cursor guibg=green guifg=NONE
 42      set guifont=-schumacher-clean-medium-r-normal-*-*-160-*-*-c-*-iso646.1991-irv
 43      "
 44      " This is also nice. Run as :F2 to change font
 45      command! F2 set guifont=-dec-terminal-medium-r-wide-*-*-140-*-*-c-*-iso8859-1
 46      if filereadable( $myxscheme )
 47          source $myxscheme
 48      endif
 49  else
 50      "
 51      " This needs to be set up front
 52      "
 53      set nocompatible
 54      "
 55      " Set up according to platform
 56      " 
 57      if has("win32") || has("win16")
 58          let osys="windows"
 59          behave mswin
 60          source $VIMRUNTIME/mswin.vim
 61      else
 62          let osys=system('uname -s')
 63          "
 64          " What was the name that we were called as?
 65          "
 66          let vinvoke=fnamemodify($_, ":p")
 67          let fullp=substitute(vinvoke, '^\(.*[/]\).*$', '\1', "")
 68          "
 69          " It's possible that $VIMRUNTIME does not exist.
 70          " Let's see if there is a dir vimshare below where we were started
 71          "
 72          if isdirectory($VIMRUNTIME) == 0
 73              let vimshare=fullp . "vimshare"
 74              if isdirectory(vimshare) == 1
 75                  let $VIMRUNTIME=vimshare . "/vim" . substitute(v:version, "50", "5", "")
 76                  let &helpfile=vimshare . "/vim" . substitute(v:version, "50", "5", "") . "/doc/help.txt"
 77              endif
 78          endif
 79      endif
 80      if &t_Co > 2
 81          set bg=dark
 82          syntax on
 83          set nohlsearch
 84          highlight Comment term=bold ctermfg=2
 85          highlight Constant term=underline ctermfg=7
 86      endif
 87      if osys == "windows" && has("gui_running")
 88          syntax on
 89          set hlsearch
 90          let &guifont=mywinfont
 91          if filereadable( $myscheme )
 92              source $myscheme
 93          endif
 94      endif
 95      if version >= 600
 96          filetype plugin indent on
 97          autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g`\"" | endif
 98          "
 99          " fold options
100          "
101          "set foldmethod=indent
102          "set foldmethod=expr
103          "set foldexpr=getline(v:lnum)[0]==\"\\t\"
104      else
105          autocmd BufReadPost * if line("'\"") && line("'\"") <= line("$") | exe "normal `\"" | endif
106      endif
107      "
108      " Find out where the backups and viminfo are kept
109      " If term is blank at this point, this must be a windows system
110      "
111      if osys == "windows"
112          let vimtdir=$HOME . '\vimtmp'
113          if isdirectory(vimtdir) == 0
114              let vimtdir=$HOME
115          endif
116          let &viminfo="'20," . '%,n' . vimtdir . '\.viminfo'
117      else
118          let myuid=substitute(system('id'), '^uid=\([0-9]*\)(.*', '\1', "")
119          let vimtdir=$HOME . '/vimtmp'
120          if isdirectory(vimtdir) == 0
121              let vimtdir=$HOME
122          endif
123          if myuid == "0" && osys =~ "SunOS"
124              let vimtdir='/var/vimtmp'
125          endif
126          let &viminfo="'20," . '%,n' . vimtdir . '/.viminfo'
127          "
128          " Setup a proper include file path
129          "
130          if $INCLUDE == ""
131              if osys =~ "SunOS"
132                  let &path="/usr/include,/usr/openwin/include,/usr/dt/include,/usr/local/include"
133              else
134                  let &path="/usr/include,/usr/X11R6/include,/usr/openwin/include,/usr/local/include"
135              endif
136          else
137              let &path=substitute($INCLUDE, ':', ',', "g")
138          endif
139      endif
140      set backup
141      let &backupdir=vimtdir
142      set history=100
143      set number
144      set nowrap
145      set tabstop=4
146      set shiftwidth=4
147      set statusline=%<%F%h%m%r%=\[%B\]\ %l,%c%V\ %P
148      set laststatus=2
149      set showcmd
150      set gcr=a:blinkon0
151      set errorbells
152      set visualbell
153      set nowarn
154      set ignorecase
155      set smartcase
156      "
157      " The following function and maps allow for [[ and ]] to search for a
158      " single char under the cursor.
159      " 
160      function Cchar()
161          let c = getline(line("."))[col(".") - 1]
162          let @/ = c
163      endfunction
164      map [[ :call Cchar()^Mn
165      map ]] :call Cchar()^MN
166      "
167      " Use F4 to switch between hex and ASCII editing
168      "
169      function Fxxd()
170          let c=getline(".")
171          if c =~ '^[0-9a-f]\{7}:'
172              :%!xxd -r
173          else
174              :%!xxd -g4
175          endif
176      endfunction
177      map <F4> :call Fxxd()^M
178      map ^_ gf
179      if &term == "xterm"
180          " Delete
181          map ^V^? x
182          " End
183          map ^[[26~ 100%
184          " Home
185          map ^[[25~ :1^M
186          " F2
187          map ^[[12~ :w^M
188          imap ^[[12~ ^[:w^Mi
189          " F3
190          map ^[[13~ :q^M
191          imap ^[[13~ ^[:q^M
192          " F10
193          map ^[[21~ :wq!^M
194          imap ^[[21~ ^[:wq!^M
195          " F11
196          map ^V^[[24~ :set list!^M
197          imap ^V^[[24~ ^[:set list!^Mi
198      else
199          if osys != "windows"
200              map ^V^[[3~ x " Delete
201              imap ^V^[[3~ ^H
202              map ^V^[[2~ i     " Insert
203              imap ^V^[[2~ ^V^[
204              map ^V^[[4~ 100%  " End
205              map ^V^[[1~ :1^M   " Home
206              map ^V^[[5~ ^V^B    " PgUp
207              map ^V^[[6~ ^V^F    " PgDn
208              map ^[[[A :h^M        " F1
209              map ^[[28~ :h^M
210          endif
211      endif
212      map <F2> :w^M
213      imap <F2> ^[:w^Ma
214      map <F3> :q^M
215      imap <F3> ^[:q^M
216      map <F10> :wq!^M
217      imap <F10> ^[:wq!^M
218  endif
219  "
220  " Some commands which must be run twice!
221  " 
222  if version >= 600
223      set cmdwinheight&
224  endif
225  set cmdheight&