Currently I have JavaScript (.js) files that contain multiline strings. Vim's syntax highlighting does not seem to support these, as seen in the image below: Improper multiline syntax highlighting

Anything below the first line is not properly recognized as a string, and everything after the end quote is incorrectly considered a string. Any way to fix this?

  • 1
    I know this doesn't answer your question, but your choice of string formatting is usually discouraged in javascript. See google-styleguide.googlecode.com/svn/trunk/… for reference and a way to avoid this problem. – SBI Feb 19 '15 at 12:28
  • Yeah my main reason for this format was that I'm not very good at SQL, so when I run into issues I copy and paste the SQL into a MySQL client to test things, and then when I've figured it out I put it back in my project. I found this syntax the easiest to convert to a single line of SQL. – Greg Feb 19 '15 at 16:53

The /usr/share/vim/vim74/syntax/javascript.vim uses this to define what a "string region" is in Javascript:

syn region javaScriptStringD start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ contains=javaScriptSpecial,@htmlPreproc

The end option matches either the " character, or the end of the line $, which is why the syntax highlighting stops after the first line.

We can override this by making a ~/.vim/after/syntax/javascript.vim file with:

syn region javaScriptStringD start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=javaScriptSpecial,@htmlPreproc
syn region javaScriptStringS start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=javaScriptSpecial,@htmlPreproc

One line for "strings", and another for 'strings'. We just removed the |$ part (| for "or", $ for end of line).

Note: I think it would be better to only highlight the string if the previous line escapes the \n (ie. ends with \). I happen to know that the C syntax does this, but I can't seem to steal borrow that and get it working in Javascript :-/

| improve this answer | |

Your Answer

