如何使用 Vim map/filter 的扩展修饰符?

How to use expand modifiers with Vim map/filter?

我正在尝试获取我的缓冲区的绝对路径列表,但不知道如何将 :p 添加到 expand,就像在 expand("v:val:p") 中一样。

let l:buffers = filter(range(1, bufnr('$')), 'buflisted(v:val)')
let l:buffiles = map(copy(l:buffers), 'expand(bufname(v:val).":p")')

上面的方法不起作用,将 :p 附加到作为缓冲区加载的每个文件名的末尾。 .例如

  ['.vim/vimrc:p']

在映射或过滤器表达式中传递扩展修饰符的正确方法是什么?

正确的方法是:h getbufinfo()

let l:files = map(getbufinfo({'buflisted': 1}), 'v:val.name')

关于任意文件名扩展,就是:h fnamemodify()用的

echo fnamemodify('filename.ext', ':p')

另一方面,:h expand() 执行 :h cmdline-special 的扩展。