从 vim globpath 获得的 fnamemodify 文件名列表在 while 循环中给出错误
fnamemodify filename list obtained from vim globpath giving error inside while loop
我正在尝试从 viml
中的 globpath()
获取根文件名。
使用之前的 satting dir 和 fnm 名称,我有:
echo dir
echo fnm
echo fnamemodify(globpath(dir, fnm), ':r:t')
这是给予
/Devel/IO_EOS/objs
*.mod
Devel/IO_EOS/objs/constants.mod
Devel/IO_EOS/objs/mpublic.mod
Devel/IO_EOS/objs/mutil
即扩展名仅从最后一个文件(mutil
,也被命名为 mutil.mod
)
因此,我尝试将文件拆分为列表并将扩展名和路径设为:
let files = filter(split(globpath(dir, fnm), '\n'), '!isdirectory(v:val)')
echo files len(files)
let c = 1
while c <= len(files))
files[c] = fnamemodify(files[c]), ':r:t')
let c += 1
endwhile
现在,这些文件是那些文件的列表,并且正确地作为一个列表,暂时不起作用。
引用的错误是:
list index out of range: 3
invalid arguments for function fnamemodify(files[c]), ':r:t')
invalid expression: fnamemodify(files[c]), ':r:t')
请帮忙。
注意:标题变得有点复杂,因为不知何故 SO 对较短的标题不满意。抱歉。
在 Vimscript 中(与在大多数其他编程语言中一样),列表索引是基于 0 的。需要从0
开始,用<
比较:
let c = 0
while c < len(files)
files[c] = fnamemodify(files[c], ':r:t')
let c += 1
endwhile
但是,当您遍历并替换同一个列表时,您可以通过 map()
:
files = map(files, "fnamemodify(v:val, ':r:t')")
我正在尝试从 viml
中的 globpath()
获取根文件名。
使用之前的 satting dir 和 fnm 名称,我有:
echo dir
echo fnm
echo fnamemodify(globpath(dir, fnm), ':r:t')
这是给予
/Devel/IO_EOS/objs
*.mod
Devel/IO_EOS/objs/constants.mod
Devel/IO_EOS/objs/mpublic.mod
Devel/IO_EOS/objs/mutil
即扩展名仅从最后一个文件(mutil
,也被命名为 mutil.mod
)
因此,我尝试将文件拆分为列表并将扩展名和路径设为:
let files = filter(split(globpath(dir, fnm), '\n'), '!isdirectory(v:val)')
echo files len(files)
let c = 1
while c <= len(files))
files[c] = fnamemodify(files[c]), ':r:t')
let c += 1
endwhile
现在,这些文件是那些文件的列表,并且正确地作为一个列表,暂时不起作用。 引用的错误是:
list index out of range: 3
invalid arguments for function fnamemodify(files[c]), ':r:t')
invalid expression: fnamemodify(files[c]), ':r:t')
请帮忙。 注意:标题变得有点复杂,因为不知何故 SO 对较短的标题不满意。抱歉。
在 Vimscript 中(与在大多数其他编程语言中一样),列表索引是基于 0 的。需要从0
开始,用<
比较:
let c = 0
while c < len(files)
files[c] = fnamemodify(files[c], ':r:t')
let c += 1
endwhile
但是,当您遍历并替换同一个列表时,您可以通过 map()
:
files = map(files, "fnamemodify(v:val, ':r:t')")