Mercurial > vim
diff runtime/doc/eval.txt @ 24132:512f48dc7100 v8.2.2607
patch 8.2.2607: strcharpart() cannot include composing characters
Commit: https://github.com/vim/vim/commit/02b4d9b18a03549b68e364e428392b7a62766c74
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Mar 14 19:46:45 2021 +0100
patch 8.2.2607: strcharpart() cannot include composing characters
Problem: strcharpart() cannot include composing characters.
Solution: Add the {skipcc} argument.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 14 Mar 2021 20:00:02 +0100 |
parents | c3d1f65365c4 |
children | 9f64c420f280 |
line wrap: on
line diff
--- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1187,7 +1187,8 @@ byte under the cursor: > In Vim9 script: If expr8 is a String this results in a String that contains the expr1'th -single character from expr8. To use byte indexes use |strpart()|. +single character (including any composing characters) from expr8. To use byte +indexes use |strpart()|. Index zero gives the first byte or character. Careful: text column numbers start with one! @@ -1217,8 +1218,9 @@ In legacy Vim script the indexes are byt multibyte encodings, see |byteidx()| for computing the indexes. If expr8 is a Number it is first converted to a String. -In Vim9 script the indexes are character indexes. To use byte indexes use -|strpart()|. +In Vim9 script the indexes are character indexes and include composing +characters. To use byte indexes use |strpart()|. To use character indexes +without including composing characters use |strcharpart()|. The item at index expr1b is included, it is inclusive. For an exclusive index use the |slice()| function. @@ -2924,7 +2926,7 @@ str2list({expr} [, {utf8}]) List convert str2nr({expr} [, {base} [, {quoted}]]) Number convert String to Number strcharlen({expr}) Number character length of the String {expr} -strcharpart({str}, {start} [, {len}]) +strcharpart({str}, {start} [, {len} [, {skipcc}]]) String {len} characters of {str} at character {start} strchars({expr} [, {skipcc}]) Number character count of the String {expr} @@ -9919,7 +9921,7 @@ slice({expr}, {start} [, {end}]) *slic Similar to using a |slice| "expr[start : end]", but "end" is used exclusive. And for a string the indexes are used as character indexes instead of byte indexes, like in - |vim9script|. + |vim9script|. Also, composing characters are not counted. When {end} is omitted the slice continues to the last item. When {end} is -1 the last item is omitted. @@ -10290,12 +10292,16 @@ strcharlen({expr}) *strcharlen()* GetText()->strcharlen() -strcharpart({src}, {start} [, {len}]) *strcharpart()* +strcharpart({src}, {start} [, {len} [, {skipcc}]]) *strcharpart()* Like |strpart()| but using character index and length instead - of byte index and length. Composing characters are counted - separately. + of byte index and length. + When {skipcc} is omitted or zero, composing characters are + counted separately. + When {skipcc} set to 1, Composing characters are ignored, + similar to |slice()|. When a character index is used where a character does not - exist it is assumed to be one character. For example: > + exist it is omitted and counted as one character. For + example: > strcharpart('abc', -1, 2) < results in 'a'. @@ -10309,7 +10315,7 @@ strchars({expr} [, {skipcc}]) *strch When {skipcc} is omitted or zero, composing characters are counted separately. When {skipcc} set to 1, Composing characters are ignored. - |strcharlen()| does the same. + |strcharlen()| always does this. Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.