LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (http://www.linuxquestions.org/questions/programming-9/)
-   -   VIM syntax highlighting: Use of AWK syntax inside shell scripts (http://www.linuxquestions.org/questions/programming-9/vim-syntax-highlighting-use-of-awk-syntax-inside-shell-scripts-4175436950/)

kaiserkarl13 11-13-2012 11:04 AM

VIM syntax highlighting: Use of AWK syntax inside shell scripts
 
I've been trying to add a simple script inside ~/.vim/after/syntax/sh.vim that will use the syntax highlighting for awk when the user does something like
Code:

#! /bin/sh
awk < myfile.txt "
  BEGIN {i=0}
  /stupid/ {$3 = ''; print; i = i + 1}
  END {print \"I found\", i, \"stupid people\"}
"

There are facilities to do this, of course, but I'm stumbling over the precise details. Here's what I have so far:

Code:

if exists('b:current_syntax')
    " Unset this, or the AWK syntax file thinks it's already loaded!
    let s:current_syntax = b:current_syntax
    unlet b:current_syntax
endif

syntax include @AwkSyntax syntax/awk.vim

if exists('s:current_syntax')
    " Undo what we did before
    let b:current_syntax=s:current_syntax
else
    unlet b:current_syntax
endif

syntax region AwkScript start=#\(^\s*g\=awk\(\s\+\p\+\)*\s\+\)\@<='#
\      end=#'# contains=@AwkSyntax matchgroup=SpecialComment
syntax region AwkScript end=#"# skip=#\\"#
\      start=#\(^\s*g\=awk\(\s\+\p\+\)*\s\+\)\@<="#
\      matchgroup=SpecialComment contains=@AwkSyntax

This works for the single-quote version, but not the double-quote version (it recognizes everything as an AWK string). I don't know how to resolve this issue. What it should do is start AWK syntax right AFTER the quotation mark (not ON it...) and avoid recognizing the entire string as a shell string. I can't seem to do both of these things at the same time.


All times are GMT -5. The time now is 07:33 AM.