diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-06-16 20:03:43 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-06-16 20:03:43 +0200 |
commit | 84cf6bd81bec93b49166cd48fccc7087fdbaa6fc (patch) | |
tree | 63d744fbf9ac7db5246a60b48aa0396aaaa22c18 /runtime | |
parent | 9af78769eeae0318e07aa8b6af4d6e2244481ca7 (diff) | |
download | vim-git-84cf6bd81bec93b49166cd48fccc7087fdbaa6fc.tar.gz |
patch 8.2.0988: getting directory contents is always case sortedv8.2.0988
Problem: Getting directory contents is always case sorted.
Solution: Add sort options and v:collate. (Christian Brabandt, closes #6229)
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/doc/eval.txt | 60 | ||||
-rw-r--r-- | runtime/doc/mlang.txt | 12 |
2 files changed, 59 insertions, 13 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 816aeca14..4ab8bbd1e 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1745,6 +1745,14 @@ v:cmdbang Set like v:cmdarg for a file read/write command. When a "!" was used the value is 1, otherwise it is 0. Note that this can only be used in autocommands. For user commands |<bang>| can be used. + *v:collate* *collate-variable* +v:collate The current locale setting for collation order of the runtime + environment. This allows Vim scripts to be aware of the + current locale encoding. Technical: it's the value of + LC_COLLATE. When not using a locale the value is "C". + This variable can not be set directly, use the |:language| + command. + See |multi-lang|. *v:completed_item* *completed_item-variable* v:completed_item @@ -2683,8 +2691,10 @@ pyxeval({expr}) any evaluate |python_x| expression rand([{expr}]) Number get pseudo-random number range({expr} [, {max} [, {stride}]]) List items from {expr} to {max} -readdir({dir} [, {expr}]) List file names in {dir} selected by {expr} -readdirex({dir} [, {expr}]) List file info in {dir} selected by {expr} +readdir({dir} [, {expr} [, {dict}]]) + List file names in {dir} selected by {expr} +readdirex({dir} [, {expr} [, {dict}]]) + List file info in {dir} selected by {expr} readfile({fname} [, {type} [, {max}]]) List get list of lines from file {fname} reduce({object}, {func} [, {initial}]) @@ -7904,11 +7914,12 @@ rand([{expr}]) *rand()* *random* :echo rand(seed) :echo rand(seed) % 16 " random number 0 - 15 < -readdir({directory} [, {expr}]) *readdir()* +readdir({directory} [, {expr} [, {dict}]]) *readdir()* Return a list with file and directory names in {directory}. You can also use |glob()| if you don't need to do complicated things, such as limiting the number of matches. - The list will be sorted (case sensitive). + The list will be sorted (case sensitive), see the {dict} + argument below for changing the sort order. When {expr} is omitted all entries are included. When {expr} is given, it is evaluated to check what to do: @@ -7926,18 +7937,38 @@ readdir({directory} [, {expr}]) *readdir()* < To skip hidden and backup files: > readdir(dirname, {n -> n !~ '^\.\|\~$'}) +< The optional {dict} argument allows for further custom + values. Currently this is used to specify if and how sorting + should be performed. The dict can have the following members: + + sort How to sort the result returned from the system. + Valid values are: + "none" do not sort (fastest method) + "case" sort case sensitive (byte value of + each character, technically, using + strcmp()) (default) + "icase" sort case insensitive (technically + using strcasecmp()) + "collate" sort using the collation order + of the "POSIX" or "C" |locale| + (technically using strcoll()) + Other values are silently ignored. + + For example, to get a list of all files in the current + directory without sorting the individual entries: > + readdir('.', '1', #{sort: 'none'}) < If you want to get a directory tree: > - function! s:tree(dir) - return {a:dir : map(readdir(a:dir), + function! s:tree(dir) + return {a:dir : map(readdir(a:dir), \ {_, x -> isdirectory(x) ? - \ {x : s:tree(a:dir . '/' . x)} : x})} - endfunction - echo s:tree(".") + \ {x : s:tree(a:dir . '/' . x)} : x})} + endfunction + echo s:tree(".") < Can also be used as a |method|: > GetDirName()->readdir() < -readdirex({directory} [, {expr}]) *readdirex()* +readdirex({directory} [, {expr} [, {dict}]]) *readdirex()* Extended version of |readdir()|. Return a list of Dictionaries with file and directory information in {directory}. @@ -7946,7 +7977,9 @@ readdirex({directory} [, {expr}]) *readdirex()* This is much faster than calling |readdir()| then calling |getfperm()|, |getfsize()|, |getftime()| and |getftype()| for each file and directory especially on MS-Windows. - The list will be sorted by name (case sensitive). + The list will by default be sorted by name (case sensitive), + the sorting can be changed by using the optional {dict} + argument, see |readdir()|. The Dictionary for file and directory information has the following items: @@ -7987,6 +8020,11 @@ readdirex({directory} [, {expr}]) *readdirex()* For example, to get a list of files ending in ".txt": > readdirex(dirname, {e -> e.name =~ '.txt$'}) < + For example, to get a list of all files in the current + directory without sorting the individual entries: > + readdirex(dirname, '1', #{sort: 'none'}) + +< Can also be used as a |method|: > GetDirName()->readdirex() < diff --git a/runtime/doc/mlang.txt b/runtime/doc/mlang.txt index 629907c16..b453a39e3 100644 --- a/runtime/doc/mlang.txt +++ b/runtime/doc/mlang.txt @@ -37,6 +37,7 @@ use of "-" and "_". :lan[guage] mes[sages] :lan[guage] cty[pe] :lan[guage] tim[e] +:lan[guage] col[late] Print the current language (aka locale). With the "messages" argument the language used for messages is printed. Technical: LC_MESSAGES. @@ -44,15 +45,19 @@ use of "-" and "_". character encoding is printed. Technical: LC_CTYPE. With the "time" argument the language used for strftime() is printed. Technical: LC_TIME. + With the "collate" argument the language used for + collation order is printed. Technical: LC_COLLATE. Without argument all parts of the locale are printed (this is system dependent). The current language can also be obtained with the - |v:lang|, |v:ctype| and |v:lc_time| variables. + |v:lang|, |v:ctype|, |v:collate| and |v:lc_time| + variables. :lan[guage] {name} :lan[guage] mes[sages] {name} :lan[guage] cty[pe] {name} :lan[guage] tim[e] {name} +:lan[guage] col[late] {name} Set the current language (aka locale) to {name}. The locale {name} must be a valid locale on your system. Some systems accept aliases like "en" or @@ -72,7 +77,10 @@ use of "-" and "_". With the "time" argument the language used for time and date messages is set. This affects strftime(). This sets $LC_TIME. - Without an argument both are set, and additionally + With the "collate" argument the language used for the + collation order is set. This affects sorting of + characters. This sets $LC_COLLATE. + Without an argument all are set, and additionally $LANG is set. When compiled with the |+float| feature the LC_NUMERIC value will always be set to "C", so that floating |