首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VimL无限打印列表中的值

VimL无限打印列表中的值
EN

Stack Overflow用户
提问于 2017-02-10 04:53:37
回答 2查看 65关注 0票数 2

我有一个符号列表,希望使用Vim8定时器API每隔80ms循环一次符号列表并返回该符号。我算出了这样的结果:

代码语言:javascript
复制
let s:frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']
let s:numTestimonials = len(s:frames)
let s:start = 0

function! PrintValues()
    return s:frames[s:start]
    let s:start = (s:start) + 1 % s:numTestimonials
endfunction

let timer = timer_start(80, 'PrintValues', {'repeat': -1})

但是一旦它到达列表中的最后一个符号,它就会抛出一个错误E684: list index out of range: 10。有什么办法可以实现我想要的东西吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-10 05:04:43

您需要在mod之前使用1内括号

代码语言:javascript
复制
let s:start = (s:start + 1) % s:numTestimonials

1 % s:numTestimonials始终为1,并在添加s:start之前进行计算

票数 3
EN

Stack Overflow用户

发布于 2017-02-10 05:21:30

对你的代码做了一些小的修改(在vim 7.4上测试):

代码语言:javascript
复制
let timer = timer_start(500, 'PrintValues', {'repeat': -1})
let s:frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']
let s:numTestimonials = len(s:frames)
let s:start = 0

function! PrintValues(timer)
    execute "normal! i".s:frames[s:start]
    let s:start = (s:start + 1) % s:numTestimonials
endfunction

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42146659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档