markdown - vimscript templating with global-counter -
i trying create generic markdown template, using vimscript. each time template called, increment counter.
function 1
#cntr= read/parsed markdown file, incremented
function! getcntr() let yogaf = readfile("yoga.js") i read last-line - 1. last (the line number) prints. however, item (the value @ list index) not:
let last=len(yogaf)-1 let item= yogaf[last] echo item let indx = 0 i'm little confused vimscript pattern looping through list. tried several things, including #cntr=*... no luck finding match!
in yogaf if =~ "#cntr=\&" let indx = break else let indx = len(yogaf)-1 endif endfor when function called, don't see indx, cnt, or cntr printed.
echo indx let cnt = yogaf[indx] echo string(cnt) let [g:cntr] = cnt[6:] echo g:cntr return g:cntr endfunction function2
calls function1, gets g:cntr, writes template markdown file
function3
increments g:cntr , writes update file
i'm not sure trying of things in script don't make sense (mainly loop).
i'm going try , explain think doing , should doing
let yogaf = readfile("yoga.js") this reads in file list of strings yagaf. (this fine)
let last=len(yogaf)-1 let item= yogaf[last] this gets last line. can simplified using negative index index end of list. whole line useless , nothing cause print item
let item = yogaf[-1] next have loop iterate on lines in , try , find line matches pattern #cntr=\& if find store in index. if don't find store last line number in index.
for in yogaf if =~ '#cntr=\&' let indx = break else let indx = len(yogaf)-1 endif endfor at end of loop indx either string containing line matches or number of lines in file. doubt meant do.
i think meant find line matched #cntr= thats i'm going change do.
you can match line i =~# '#cntr=' match line contains #cntr= in (and has same case). other regex #cntr=* means match line #cntr=* 0 or more = equal signs. might match wanted after equal sign have been #cntr=.* (. matches * 0 or more times)
after loop had
echo indx let cnt = yogaf[indx] echo string(cnt) let [g:cntr] = cnt[6:] echo g:cntr return g:cntr cnt (almost) never want lucky if string matched (which did) indexing list string , vim seems return first line isn't want.
for line cnt[6:] think trying strip #cntr front of string matched. cnt doesn't contain want.
so lets modify loop set g:cntr correct value , return if matching line found.
for in g:yogaf if =~ '#cntr=' let g:cntr = i[6:] return g:cntr endif endfor at end of loop g:cntr either set or didn't find anything. if didn't find set g:cntr equal -1 , return that.
let g:cntr = -1 return g:cntr so completed function should (with extraneous stuff removed)
function! getcntr() let l:yogaf = readfile("yoga.js") in l:yogaf if =~ '^#cntr=' let g:cntr = i[6:] return g:cntr endif endfor let g:cntr = -1 return g:cntr endfunction although i'm not sure want because didn't ask question.
Comments
Post a Comment