2017-02-09 63 views
2

我有一個符號列表,並希望使用Vim8計時器API在符號列表中循環每80ms並返回該符號。我制定了這樣的事:VimL在列表中的打印值無窮大

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。任何想法如何實現我想要的?

回答

3

您需要國防部

let s:start = (s:start + 1) % s:numTestimonials 

1 % s:numTestimonials有1括號內始終爲1和添加S前計算:啓動

+0

D'哦...我雖然有原來的,但它給我關於一些其他語法錯誤的問題。感謝你的回答!現在想出如何在狀態線段中打印返回的值 – mhartington

2

對代碼進行一些小變化(測試VIM 7.4 ):

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 

enter image description here