Есть встроенная функция glob()
. Чтобы получить список файлов в текущем каталоге Windows, вы можете использовать split(glob('.\\*'), "\n")
. На * nix все намного сложнее, чем на
- POSIX позволяет всем, кроме NULL, находиться в имени файла. Здесь все означает, что перевод строки ("\ n") также разрешен.
glob()
функция не возвращает имена файлов, начинающиеся с точки, если явно не запрошено (используя glob('dir/.*')
).
- Когда явно запрашивается список имен файлов, начинающихся с точки,
glob()
также показывает .
(текущий каталог) и ..
(родительский каталог) специальные каталоги.
Чтобы решить эту проблему, вы должны использовать что-то вроде this (или использовать vim с поддержкой python и собственной функцией os.listdir
python).
Если вы не против иметь frawor в зависимостях, вы можете сделать следующее:
execute frawor#Setup('0.0', {'@/os': '0.0'})
<...>
let dir_contents=s:_r.os.listdir('.')
О получении списка строк из команды оболочки: если вы знаете, что запускаемая команда не будет выводить значения NULL, вы можете использовать split(system(cmd), "\n", 1)
(возможно, без последнего аргумента, если вам не нужны пустые строки). Если вы знаете, что команда может выдавать значения NULL и хотите сохранить их, вам нужно проделать дополнительную работу:
noautocmd new
read !cmd
let s:shell_output=getline(2, line('$'))
noautocmd bwipeout!
Обратите внимание, что в этом случае значения NULL будут заменены символами новой строки в списке s:shell_output
, тогда как фактические символы новой строки будут представлены как концы строк.