Like above, but append/add/subtract the value for each
|List| item.
- *:let=<<* *:let-heredoc* *E990* *E991*
+ *:let=<<* *:let-heredoc*
+ *E990* *E991* *E172* *E221*
:let {var-name} =<< [trim] {marker}
text...
text...
Set internal variable {var-name} to a List containing
the lines of text bounded by the string {marker}.
{marker} must not contain white space.
+ {marker} cannot start with a lower case character.
The last line should end only with the {marker} string
without any other character. Watch out for white
space after {marker}!
- If {marker} is not supplied, then "." is used as the
- default marker.
Without "trim" any white space characters in the lines
of text are preserved. If "trim" is specified before
text_indent_len = -1;
}
- // The marker is the next word. Default marker is "."
+ // The marker is the next word.
if (*cmd != NUL && *cmd != '"')
{
marker = skipwhite(cmd);
return NULL;
}
*p = NUL;
+ if (vim_islower(*marker))
+ {
+ emsg(_("E221: Marker cannot start with lower case letter"));
+ return NULL;
+ }
}
else
- marker = (char_u *)".";
+ {
+ emsg(_("E172: Missing marker"));
+ return NULL;
+ }
l = list_alloc();
if (l == NULL)
call assert_fails('source XheredocFail', 'E126:')
call delete('XheredocFail')
- let text =<< trim END
+ let text =<< trim CodeEnd
func MissingEnd()
let v =<< END
endfunc
- END
+ CodeEnd
call writefile(text, 'XheredocWrong')
call assert_fails('source XheredocWrong', 'E126:')
call delete('XheredocWrong')
+
+ let text =<< trim TEXTend
+ let v =<< " comment
+ TEXTend
+ call writefile(text, 'XheredocNoMarker')
+ call assert_fails('source XheredocNoMarker', 'E172:')
+ call delete('XheredocNoMarker')
+
+ let text =<< trim TEXTend
+ let v =<< text
+ TEXTend
+ call writefile(text, 'XheredocBadMarker')
+ call assert_fails('source XheredocBadMarker', 'E221:')
+ call delete('XheredocBadMarker')
endfunc
" Test for the setting a variable using the heredoc syntax
call assert_equal(["Some sample text", "\tText with indent", " !@#$%^&*()-+_={}|[]\\~`:\";'<>?,./"], var1)
- let var2 =<<
+ let var2 =<< XXX
Editor
-.
+XXX
call assert_equal(['Editor'], var2)
let var3 =<<END
!!!
call assert_equal(['Line1', ' line2', "\tLine3", '!!!',], var1)
- let var1 =<< trim
+ let var1 =<< trim XX
Line1
- .
+ XX
call assert_equal(['Line1'], var1)
" ignore "endfunc"
call assert_equal(['something', 'python << xx'], var1)
" ignore "append"
- let var1 =<<
+ let var1 =<< E
something
app
-.
+E
call assert_equal(['something', 'app'], var1)
" ignore "append" with trim
- let var1 =<< trim
+ let var1 =<< trim END
something
app
- .
+ END
call assert_equal(['something', 'app'], var1)
endfunc