Home Explore Blog CI



neovim

9th chunk of `runtime/doc/vimeval.txt`
7cda0e4e978c4ff56b09635a50d66cc9ffc66aad22fcc0040000000100000fa2
 is similar to zero.  Omitting the last index is
similar to -1. >
	:let endblob = myblob[2:]	" from item 2 to the end: 0z2233
	:let shortblob = myblob[2:2]	" Blob with one byte: 0z22
	:let otherblob = myblob[:]	" make a copy of the Blob

If the first index is beyond the last byte of the Blob or the second index is
before the first index, the result is an empty Blob.  There is no error
message.

If the second index is equal to or greater than the length of the Blob the
length minus one is used: >
	:echo myblob[2:8]		" result: 0z2233


Blob modification ~
							*blob-modification*
To change a specific byte of a blob use |:let| this way: >
	:let blob[4] = 0x44

When the index is just one beyond the end of the Blob, it is appended. Any
higher index is an error.

To change a sequence of bytes the [:] notation can be used: >
	let blob[1:3] = 0z445566
The length of the replaced bytes must be exactly the same as the value
provided. *E972*

To change part of a blob you can specify the first and last byte to be
modified.  The value must have the same number of bytes in the range: >
	:let blob[3:5] = 0z334455

To add items to a Blob in-place, you can use |:let+=| (|blob-concatenation|): >
	:let blobA = 0z1122
	:let blobA += 0z3344
<
When two variables refer to the same Blob, changing one Blob in-place will
cause the referenced Blob to be changed in-place: >
	:let blobA = 0z1122
	:let blobB = blobA
	:let blobB += 0z3344
	:echo blobA
	0z11223344
<
You can also use the functions |add()|, |remove()| and |insert()|.


Blob identity ~

Blobs can be compared for equality: >
	if blob == 0z001122
And for equal identity: >
	if blob is otherblob
<							*blob-identity* *E977*
When variable "aa" is a Blob and you assign it to another variable "bb", both
variables refer to the same Blob.  Then the "is" operator returns true.

When making a copy using [:] or |copy()| the values are the same, but the
identity is different: >
	:let blob = 0z112233
	:let blob2 = blob
	:echo blob == blob2
<	1 >
	:echo blob is blob2
<	1 >
	:let blob3 = blob[:]
	:echo blob == blob3
<	1 >
	:echo blob is blob3
<	0

Making a copy of a Blob is done with the |copy()| function.  Using [:] also
works, as explained above.


1.6 More about variables ~
							*more-variables*
If you need to know the type of a variable or expression, use the |type()|
function.

When the '!' flag is included in the 'shada' option, global variables that
start with an uppercase letter, and don't contain a lowercase letter, are
stored in the shada file |shada-file|.

When the 'sessionoptions' option contains "global", global variables that
start with an uppercase letter and contain at least one lowercase letter are
stored in the session file |session-file|.

variable name		can be stored where ~
my_var_6		not
My_Var_6		session file
MY_VAR_6		shada file


It's possible to form a variable name with curly braces, see
|curly-braces-names|.

==============================================================================
2. Expression syntax					*expression-syntax*

Expression syntax summary, from least to most significant:

|expr1|	expr2
	expr2 ? expr1 : expr1	if-then-else

|expr2|	expr3
	expr3 || expr3 ...	logical OR

|expr3|	expr4
	expr4 && expr4 ...	logical AND

|expr4|	expr5
	expr5 == expr5		equal
	expr5 != expr5		not equal
	expr5 >	 expr5		greater than
	expr5 >= expr5		greater than or equal
	expr5 <	 expr5		smaller than
	expr5 <= expr5		smaller than or equal
	expr5 =~ expr5		regexp matches
	expr5 !~ expr5		regexp doesn't match

	expr5 ==? expr5		equal, ignoring case
	expr5 ==# expr5		equal, match case
	etc.			As above, append ? for ignoring case, # for
				matching case

	expr5 is expr5		same |List|, |Dictionary| or |Blob| instance
	expr5 isnot expr5	different |List|, |Dictionary| or |Blob|
				instance

|expr5|	expr6
	expr6 +	 expr6 ...	number addition, list or blob concatenation
	expr6 -	 expr6 ...	number subtraction
	expr6 .	 expr6 ...	string concatenation
	expr6 .. expr6 ...	string concatenation

|expr6|

Title: Blob Modification, Identity, and Variable Storage; Expression Syntax
Summary
This section details blob modification by replacing bytes and adding items, including the effects of in-place changes on variables referencing the same blob. It covers blob identity, explaining how the 'is' operator checks for the same blob instance, while copying creates distinct instances with equal values. The section briefly touches on variable types, shada file, and session file storage. Finally, it summarizes Vim's expression syntax, listing operators from least to most significant, covering conditional expressions, logical operators, comparison operators (including case-sensitive and case-insensitive options), and concatenation.