+au Filetype c,cpp,cs,objc,java map <buffer> <F4> :cnext<CR>
+au Filetype c,cpp,cs,objc,java map <buffer> <S-F4> :cprevious<CR>
+
+au Filetype c,cpp,cs,objc set makeprg=make
+au Filetype c,cpp,cs,objc map <buffer> <F7> :make<CR>
+au Filetype java map <buffer> <F7> :!ant -f ../build.xml<CR>
+
+" If FSwitch exists
+runtime! plugin/fswitch.vim
+if exists(":FSHere")
+ au Filetype c,cpp,objc map <buffer> <F11> :vsplit<CR>:FSRight<CR>
+ au Filetype c,cpp,objc map <buffer> <S-F11> :FSHere<CR>
+
+ " Substitute lib <-> include, otherwise take the same directory
+ au BufEnter *.c* let b:fswitchlocs='reg:/lib/include/,rel:.'
+ au BufEnter *.h* let b:fswitchlocs='reg:/include/lib/,rel:.'
+ "au BufEnter *.c* let b:fswitchlocs='rel:.,rel:../inc*/**,rel:../../inc*/**'
+
+ au BufEnter *.cpp,*.cc,*.cxx let b:fswitchdst='h,hxx,hpp,hh'
+ au BufEnter *.h,*.hh,*.hxx let b:fswitchdst='cc,c,cxx,cpp'
+else
+ au Filetype c,cpp,cs,objc,java map <buffer> <F11> :AS<CR>
+ au Filetype c,cpp,cs,objc,java map <buffer> <S-F11> :A<CR>
+endif
+
+
+"Prepend the namespace to an identifier, e.g. 'std::' before 'map' excluding
+"those in C/C++ comments.
+function PrependCppNamespaceToIdent(ns, id)
+
+ " To match Not to match
+ "
+ "|id |// id
+ "| id |// /* */ id
+ "|/* */ /* */ id |/* */ // id
+ "|id /* */ |/* id
+ "|*/ id | * id
+ " |/* id */
+ " |::id
+ " |/**/ ::id
+ " |#include <id>
+ "
+ " In order to not match '* id' it is assumed that multi-line comment lines
+ " in the middle begin with a star.
+
+ " If #include and // and /* and ^* and :: is not prepend:
+ execute ':%s@\(\(#include\|\/\/\|\/\*\|^\s*\*[^/]\).*\|::\)\@<!\<' . a:id . '\>@' . a:ns . '::' . a:id . '@ge'
+ " If #include and // and :: is not prepend, but */ is, and no further /* or // are found
+ execute ':%s@\(\(#include\|\/\/\).*\)\@<!\*\/\(\/[^\/\*]\|[^\/]\)*\zs\(::\)\@<!\<' . a:id . '\>@' . a:ns . '::' . a:id . '@ge'