There is an outstanding issue in Vim's shell syntax file. A patch was made that broke syntax that used almost any changes. I originally made my own patch that worked for the most part, but in heavily neasted commands it broke down. In the mailing list the following change was proposed. I am supplying this diff for my own sanity so when my syntax file gets reset and is still broken I can apply the diff :)

Download: sh-vim.diff
diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim
index 13d74dbc1..42151f41b 100644
--- a/runtime/syntax/sh.vim
+++ b/runtime/syntax/sh.vim
@@ -335,7 +335,7 @@ syn match   shEscape        contained       '\%(^\)\@!\%(\\\\\)*\\.'        nextgroup=shComment
 " systems too, however, so the following syntax will flag $(..) as
 " an Error under /bin/sh.  By consensus of vimdev'ers!
 if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix")
- syn region shCommandSub matchgroup=shCmdSubRegion start="\$(\ze[^(]\|$"  skip='\\\\\|\\.' end=")"  contains=@shCommandSubList
+ syn region shCommandSub matchgroup=shCmdSubRegion start="\$(\ze[^(]\?"  skip='\\\\\|\\.' end=")"  contains=@shCommandSubList
  syn region shArithmetic matchgroup=shArithRegion  start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList
  syn region shArithmetic matchgroup=shArithRegion  start="\$\[" skip='\\\\\|\\.' end="\]" contains=@shArithList
  syn match  shSkipInitWS contained     "^\s\+"
    
Vim Dev Mailing List Thread - Archive (Google Groups)