vim - syn match lines which contain only / but not // -


to match lines contain forward slash(/), can use following in syntax file

syntax match colorpath "\v/.*$" #highlight link colorpath comment1 

to match lines have double forward slash(//), can use same statement

syntax match colorpath2 "\v//.*$" #highlight link colorpath2 comment2 

but first part overwrites second 1 shown in image1. also, in line 1 patha not colored, if use "\v./.$" color entire line .

image 1

image 2

is there way can differentiate 2 lines shown in image2?

this simple problem of adapting regular expressions needs.

to include patha before /, need match it. .*/.*$ match entire line (as you've found out); . matches anything (also whitespace), , * greedy match. have ask characters can contained inside colorpath, , cannot. let's assume can consist of whitespace. regular expression atom \s (and equivalent [^[:space:]] inside collection). this, arrive at:

syntax match colorpath "\s*/.*$" 

second problem obscures colorpath2, because colorpath2 subset of colorpath. need make sets of matches disjunct, example this:

syntax match colorpath "\s*[^/[:space:]]/[^/].*$" 

this says: non-whitespace, no slash (and still no whitespace) before slash, single slash, followed no slash, end of line. previous command works if there indeed path characters before slash (so fails on /pathx). fix that, have add branches matching @ start of line, , after whitespace (of course, if syntax allows places):

syntax match colorpath "\%(\s*[^/[:space:]]\|^\|\s\zs\)/[^/].*$" 

another way express negative lookbehind , lookahead; less readable, avoids manual joining of \s , [^/] in previous command, , automatically handles corner case of single slash @ start, without additional branches.

syntax match colorpath "\s*/\@<!//\@!.*$" 

this because atoms assert match, not consume anything. see :help /zero-width details.


Comments

Popular posts from this blog

angular - Ionic slides - dynamically add slides before and after -

minify - Minimizing css files -

Add a dynamic header in angular 2 http provider -