Bug#450410: syntax/sh.vim: posix parameter expansions

Vineet Kumar vineet at doorstop.net
Wed Nov 7 06:42:07 UTC 2007


Package: vim
Version: 1:7.0-122+1etch3
Severity: minor
Tags: patch

Vim's syntax highlighting for shell scripts marks certain parameter
expansion patterns as errors when in /bin/sh mode, but allows them for
/bin/bash.  Some of those patterns are valid posix /bin/sh, for example

${parameter%word}
${parameter%%word}
${parameter#word}
${parameter##word}

These are accepted for /bin/bash, but highlighted as errors for /bin/sh.
The attached patch allows these patterns for /bin/sh scripts as well.

-- System Information:
Debian Release: 4.0
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/dash
Kernel: Linux 2.6.18-4-686
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)

Versions of packages vim depends on:
ii  libacl1                2.2.41-1          Access control list shared library
ii  libc6                  2.3.6.ds1-13etch2 GNU C Library: Shared libraries
ii  libgpmg1               1.19.6-25         General Purpose Mouse - shared lib
ii  libncurses5            5.5-5             Shared libraries for terminal hand
ii  vim-common             1:7.0-122+1etch3  Vi IMproved - Common files
ii  vim-runtime            1:7.0-122+1etch3  Vi IMproved - Runtime files

vim recommends no packages.

-- no debconf information
-------------- next part --------------
--- /usr/share/vim/vim70/syntax/sh.vim	2007-08-29 04:00:27.000000000 -0700
+++ /ext/home/vineet/.vim/syntax/sh.vim	2007-11-06 21:43:33.000000000 -0800
@@ -367,24 +367,26 @@
 
 " Special ${parameter OPERATOR word} handling: {{{1
 " sh ksh bash : ${parameter:-word}    word is default value
+" sh ksh bash : ${parameter-word}    word is default value
 " sh ksh bash : ${parameter:=word}    assign word as default value
+" sh ksh bash : ${parameter=word}    assign word as default value
 " sh ksh bash : ${parameter:?word}    display word if parameter is null
+" sh ksh bash : ${parameter?word}    display word if parameter is null
 " sh ksh bash : ${parameter:+word}    use word if parameter is not null, otherwise nothing
-"    ksh bash : ${parameter#pattern}  remove small left  pattern
-"    ksh bash : ${parameter##pattern} remove large left  pattern
-"    ksh bash : ${parameter%pattern}  remove small right pattern
-"    ksh bash : ${parameter%%pattern} remove large right pattern
+" sh ksh bash : ${parameter+word}    use word if parameter is not null, otherwise nothing
+" sh ksh bash : ${parameter#pattern}  remove small left  pattern
+" sh ksh bash : ${parameter##pattern} remove large left  pattern
+" sh ksh bash : ${parameter%pattern}  remove small right pattern
+" sh ksh bash : ${parameter%%pattern} remove large right pattern
 syn cluster shDerefPatternList	contains=shDerefPattern,shDerefString
 syn match shDerefOpError	contained	":[[:punct:]]"
 syn match  shDerefOp	contained	":\=[-=?]"	nextgroup=@shDerefPatternList
 syn match  shDerefOp	contained	":\=+"	nextgroup=@shDerefPatternList
-if exists("b:is_bash") || exists("b:is_kornshell")
- syn match  shDerefOp	contained	"#\{1,2}"	nextgroup=@shDerefPatternList
- syn match  shDerefOp	contained	"%\{1,2}"	nextgroup=@shDerefPatternList
- syn match  shDerefPattern	contained	"[^{}]\+"	contains=shDeref,shDerefSimple,shDerefPattern,shDerefString,shCommandSub,shDerefEscape nextgroup=shDerefPattern
- syn region shDerefPattern	contained	start="{" end="}"	contains=shDeref,shDerefSimple,shDerefString,shCommandSub nextgroup=shDerefPattern
- syn match  shDerefEscape	contained	'\%(\\\\\)*\\.'
-endif
+syn match  shDerefOp	contained	"#\{1,2}"	nextgroup=@shDerefPatternList
+syn match  shDerefOp	contained	"%\{1,2}"	nextgroup=@shDerefPatternList
+syn match  shDerefPattern	contained	"[^{}]\+"	contains=shDeref,shDerefSimple,shDerefPattern,shDerefString,shCommandSub,shDerefEscape nextgroup=shDerefPattern
+syn region shDerefPattern	contained	start="{" end="}"	contains=shDeref,shDerefSimple,shDerefString,shCommandSub nextgroup=shDerefPattern
+syn match  shDerefEscape	contained	'\%(\\\\\)*\\.'
 syn region shDerefString	contained	matchgroup=shOperator start=+'+ end=+'+		contains=shStringSpecial
 syn region shDerefString	contained	matchgroup=shOperator start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial
 syn match  shDerefString	contained	"\\["']"


More information about the pkg-vim-maintainers mailing list