str2nr({expr} [, {base} [, {quoted}]])
Number convert String to Number
strcharpart({str}, {start} [, {len}])
- String {len} characters of {str} at {start}
+ String {len} characters of {str} at
+ character {start}
strchars({expr} [, {skipcc}]) Number character length of the String {expr}
strdisplaywidth({expr} [, {col}]) Number display length of the String {expr}
strftime({format} [, {time}]) String format time with a specified format
Number index of {needle} in {haystack}
string({expr}) String String representation of {expr} value
strlen({expr}) Number length of the String {expr}
-strpart({str}, {start} [, {len}])
- String {len} bytes of {str} at byte {start}
+strpart({str}, {start} [, {len} [, {chars}]])
+ String {len} bytes/chars of {str} at
+ byte {start}
strptime({format}, {timestring})
Number Convert {timestring} to unix timestamp
strridx({haystack}, {needle} [, {start}])
byteidx({expr}, {nr}) *byteidx()*
Return byte index of the {nr}'th character in the string
- {expr}. Use zero for the first character, it returns zero.
+ {expr}. Use zero for the first character, it then returns
+ zero.
This function is only useful when there are multibyte
characters, otherwise the returned value is equal to {nr}.
Composing characters are not counted separately, their byte
{expr} in bytes.
If the argument is a Number it is first converted to a String.
For other types an error is given.
- If you want to count the number of multi-byte characters use
+ If you want to count the number of multibyte characters use
|strchars()|.
Also see |len()|, |strdisplaywidth()| and |strwidth()|.
Can also be used as a |method|: >
GetString()->strlen()
-strpart({src}, {start} [, {len}]) *strpart()*
+strpart({src}, {start} [, {len} [, {chars}]]) *strpart()*
The result is a String, which is part of {src}, starting from
byte {start}, with the byte length {len}.
- To count characters instead of bytes use |strcharpart()|.
+ When {chars} is present and TRUE then {len} is the number of
+ characters positions (composing characters are not counted
+ separately, thus "1" means one base character and any
+ following composing characters).
+ To count {start} as characters instead of bytes use
+ |strcharpart()|.
When bytes are selected which do not exist, this doesn't
result in an error, the bytes are simply omitted.
strpart("abcdefg", 3) == "defg"
< Note: To get the first character, {start} must be 0. For
- example, to get three bytes under and after the cursor: >
- strpart(getline("."), col(".") - 1, 3)
+ example, to get the character under the cursor: >
+ strpart(getline("."), col(".") - 1, 1, v:true)
<
Can also be used as a |method|: >
GetText()->strpart(5)
{"stridx", 2, 3, FEARG_1, ret_number, f_stridx},
{"string", 1, 1, FEARG_1, ret_string, f_string},
{"strlen", 1, 1, FEARG_1, ret_number, f_strlen},
- {"strpart", 2, 3, FEARG_1, ret_string, f_strpart},
+ {"strpart", 2, 4, FEARG_1, ret_string, f_strpart},
{"strptime", 2, 2, FEARG_1, ret_number,
#ifdef HAVE_STRPTIME
f_strptime
else
len = slen - n; // default len: all bytes that are available.
- /*
- * Only return the overlap between the specified part and the actual
- * string.
- */
+ // Only return the overlap between the specified part and the actual
+ // string.
if (n < 0)
{
len += n;
else if (n + len > slen)
len = slen - n;
+ if (argvars[2].v_type != VAR_UNKNOWN && argvars[3].v_type != VAR_UNKNOWN)
+ {
+ int off;
+
+ // length in characters
+ for (off = n; off < slen && len > 0; --len)
+ off += mb_ptr2len(p + off);
+ len = off - n;
+ }
+
rettv->v_type = VAR_STRING;
rettv->vval.v_string = vim_strnsave(p + n, len);
}