fnamemodify文件名列表从vim globpath获得,在while循环中出现错误

fnamemodify文件名列表从vim globpath获得,在while循环中出现错误,vim,Vim,我试图从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 i、 e.仅从

我试图从
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
i、 e.仅从最后一个文件中触发扩展名(
multi
,也称为
multi.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
请帮忙。
注:标题变得有点复杂,因为不知何故,SO不喜欢较短的标题。很抱歉。

在Vimscript中(与大多数其他编程语言一样),列表索引是基于0的。你需要从
0
开始,然后使用
我只是简单地看了一下代码,所以我不知道这是否有用:不应该
,而c是的,我想这也是问题所在。在vim中,就像在几乎所有常用的编程语言中一样,列表索引从零开始,然后转到len-1。我可以知道否定投票是为了什么吗?你可以把你的例子浓缩得更多,以显示它的要点;也许你会通过这个自己发现问题。此外,还有打字错误(其他未关闭的
)。不要被反对票拖得太久,但下次要更加小心!我用map()解决了它,例如
map(globpath(dir,fnm,0,1),'fnamemodify(v:val,“:t:r”))
。也谢谢你的评论。是的……我的本能告诉我名单是以1为基础的,怪我的
fortran
背景。而否决票有时真的很让人恼火,因为人们没有给出为什么……所以改进的范围就消失了……这就是为什么我问它。谢谢你的解释。很高兴我能帮忙。请不要忘记通过单击答案旁边的勾选符号来接受答案。
list index out of range: 3 
invalid arguments for function fnamemodify(files[c]), ':r:t')
invalid expression: fnamemodify(files[c]), ':r:t')
let c = 0
while c < len(files)
    files[c] = fnamemodify(files[c], ':r:t')
    let c += 1
endwhile
files = map(files, "fnamemodify(v:val, ':r:t')")