 			3: name: "punctuation.assignment.parameter.viml"
 
 	expr:
-		name: "storage.function.viml"
-		match: '(\\|\\||&&|==(\\?|#)?|(!|>|<)=(#|\\?)?|(=|!)~(?!\\/)(#|\\?)?|(>|<)(#|\\?)is|isnot|\\.|\\*|\\\\|%)'
+		patterns: [
+			name: "keyword.operator.logical.viml"
+			match: '(\\|\\||&&|==(\\?|#)?|(!|>|<)=(#|\\?)?|(=|!)~(?!\\/)(#|\\?)?|(>|<)(#|\\?)is|isnot|\\*|\\\\|%)'
+			
+			{match: "(?<=\\S)!", name: "storage.modifier.force.viml"}
+			{match: "!(?=\\S)",  name: "keyword.operator.logical.not.viml"}
+			{match: "\\(",       name: "punctuation.expression.bracket.round.begin.viml"}
+			{match: "\\)",       name: "punctuation.expression.bracket.round.end.viml"}
+			{match: "\\|",       name: "punctuation.separator.statement.viml"}
+			{match: ":",         name: "punctuation.separator.key-value.viml"}
+			{match: "\\.?=",     name: "keyword.operator.assignment.viml"}
+			{match: "\\.",       name: "punctuation.delimiter.property.dot.viml"}
+		]
 	
 	keyword:
 		patterns: [{
 			name: "keyword.control.viml"
-			match: "\\b(if|while|for|unlet|return|end(if|for|while)?|au(g|group)|else(if)?|do|in|:)\\b"
+			match: "\\b(if|while|for|unlet|return|end(if|for|while)?|else(if)?|do|in|:)\\b"
 		}, {
 			name: "storage.type.let.viml"
 			match: "\\blet\\b"

			{include: "#hashbang"}
			{include: "#numbers"}
			{include: "#funcDef"}
			{include: "#parameter"}
			{include: "#expr"}
			{include: "#keyword"}

	
	supportType:
		name: "support.type.viml"
		match: "(<).*?(>)"
		captures:
			1: name: "punctuation.definition.bracket.angle.begin.viml"
			2: name: "punctuation.definition.bracket.angle.end.viml"
	
	supportVariable:
		name: "support.variable.viml"
