Home Explore Blog CI



neovim

22th chunk of `runtime/doc/vimeval.txt`
f151b93b43ac51b14493f110aa74fc5d5ad4448fe821a3280000000100000fa0
 either "verb" or "jective".

However, the expression inside the braces must evaluate to a valid single
variable name, e.g. this is invalid: >
	:let foo='a + b'
	:echo c{foo}d
.. since the result of expansion is "ca + bd", which is not a variable name.

						*curly-braces-function-names*
You can call and define functions by an evaluated name in a similar way.
Example: >
	:let func_end='whizz'
	:call my_func_{func_end}(parameter)

This would call the function "my_func_whizz(parameter)".

This does NOT work: >
  :let i = 3
  :let @{i} = ''  " error
  :echo @{i}      " error

==============================================================================
7. Commands						*expression-commands*

:let {var-name} = {expr1}				*:let* *E18*
			Set internal variable {var-name} to the result of the
			expression {expr1}.  The variable will get the type
			from the {expr}.  If {var-name} didn't exist yet, it
			is created.

:let {var-name}[{idx}] = {expr1}			*E689*
			Set a list item to the result of the expression
			{expr1}.  {var-name} must refer to a list and {idx}
			must be a valid index in that list.  For nested list
			the index can be repeated.
			This cannot be used to add an item to a |List|.
			This cannot be used to set a byte in a String.  You
			can do that like this: >
				:let var = var[0:2] .. 'X' .. var[4:]
<			When {var-name} is a |Blob| then {idx} can be the
			length of the blob, in which case one byte is
			appended.

							*E711* *E719*
:let {var-name}[{idx1}:{idx2}] = {expr1}		*E708* *E709* *E710*
			Set a sequence of items in a |List| to the result of
			the expression {expr1}, which must be a list with the
			correct number of items.
			{idx1} can be omitted, zero is used instead.
			{idx2} can be omitted, meaning the end of the list.
			When the selected range of items is partly past the
			end of the list, items will be added.

			*:let+=* *:let-=* *:letstar=*
			*:let/=* *:let%=* *:let.=* *:let..=* *E734*
:let {var} += {expr1}	Like ":let {var} = {var} + {expr1}".
:let {var} -= {expr1}	Like ":let {var} = {var} - {expr1}".
`:let {var} *= {expr1}`	Like ":let {var} = {var} * {expr1}".
:let {var} /= {expr1}	Like ":let {var} = {var} / {expr1}".
:let {var} %= {expr1}	Like ":let {var} = {var} % {expr1}".
:let {var} .= {expr1}	Like ":let {var} = {var} . {expr1}".
:let {var} ..= {expr1}	Like ":let {var} = {var} .. {expr1}".
			These fail if {var} was not set yet and when the type
			of {var} and {expr1} don't fit the operator.
			`+=` modifies a |List| or a |Blob| in-place instead of
			creating a new one.


:let ${env-name} = {expr1}			*:let-environment* *:let-$*
			Set environment variable {env-name} to the result of
			the expression {expr1}.  The type is always String.
:let ${env-name} .= {expr1}
			Append {expr1} to the environment variable {env-name}.
			If the environment variable didn't exist yet this
			works like "=".

:let @{reg-name} = {expr1}			*:let-register* *:let-@*
			Write the result of the expression {expr1} in register
			{reg-name}.  {reg-name} must be a single letter, and
			must be the name of a writable register (see
			|registers|).  "@@" can be used for the unnamed
			register, "@/" for the search pattern.
			If the result of {expr1} ends in a <CR> or <NL>, the
			register will be linewise, otherwise it will be set to
			charwise.
			This can be used to clear the last search pattern: >
				:let @/ = ""
<			This is different from searching for an empty string,
			that would match everywhere.

:let @{reg-name} .= {expr1}
			Append {expr1} to register {reg-name}.  If the
			register was empty it's like setting it to {expr1}.

:let &{option-name} = {expr1}			*:let-option* *:let-&*
			Set option {option-name} to the result of the
			expression {expr1}.  A String or Number value is
			always converted to the type of the option.
			For an option local to a window or buffer the effect
			is just like using the |:set| command: both the local
			value and the global value are changed.
			Example: >
			

Title: Vim Script: Curly Braces Names, and Expression Commands with ':let'
Summary
This section continues the discussion of 'curly braces names' and provides examples of their use in function calls, while also highlighting limitations. It then details the ':let' command, which is used to assign values to variables, list items, environment variables, registers, and options. It covers various forms of ':let', including assignment, appending, and arithmetic operations. It explains how to use ':let' to manipulate lists, blobs, environment variables, registers, and options, including specific considerations for each.