Markdown 使用全局计数器的vimscript模板
我正在尝试使用vimscript创建一个通用的标记模板。 每次调用模板时,我都希望增加一个计数器 功能1Markdown 使用全局计数器的vimscript模板,markdown,vim,Markdown,Vim,我正在尝试使用vimscript创建一个通用的标记模板。 每次调用模板时,我都希望增加一个计数器 功能1 #CNTR=从标记文件中读取/解析,递增 function! GetCNTR() let yogaf = readfile("yoga.js") 我读了最后一行-1last(行号)打印。但是,项(在 列表索引)不: let last=len(yogaf)-1 let item= yogaf[last] echo item let in
#CNTR=
从标记文件中读取/解析,递增
function! GetCNTR()
let yogaf = readfile("yoga.js")
我读了最后一行-1
last
(行号)打印。但是,项
(在
列表索引)不:
let last=len(yogaf)-1
let item= yogaf[last]
echo item
let indx = 0
我对vimscript模式在列表中循环有点困惑。我尝试了几种方法,包括#CNTR=*
。。。但是没有找到匹配的
for i in yogaf
if i =~ "#CNTR=\&"
let indx = i
break
else
let indx = len(yogaf)-1
endif
endfor
调用函数时,我看不到打印indx
、cnt
、或CNTR
echo indx
let cnt = yogaf[indx]
echo string(cnt)
let [g:CNTR] = cnt[6:]
echo g:CNTR
return g:CNTR
endfunction
功能2
调用function1,获取g:CNTR
,然后将模板写入标记文件
功能3
增量
g:CNTR
并将更新写入文件我不确定您试图做什么,但您在这个脚本中做的一些事情没有意义(主要是for循环)
我要试着解释一下我认为你在做什么,你应该做什么
let yogaf = readfile("yoga.js")
这会将文件作为字符串列表读入yagaf。(这很好)
这是最后一行。但是,这可以简化为只使用从列表末尾开始索引的负索引。然而,这整行是无用的,什么也不做,因为你所做的只是打印项目
let item = yogaf[-1]
接下来有一个for循环,在其中迭代中的行,并尝试查找与模式\CNTR=\&
匹配的行,如果找到该行,则将其存储在索引中。如果找不到,则将最后一行号存储在索引中
for i in yogaf
if i =~ '#CNTR=\&'
let indx = i
break
else
let indx = len(yogaf)-1
endif
endfor
在for循环的末尾,indx是一个字符串,其中包含匹配的行或文件中的行数。我真的怀疑这是你的本意
我想你想做的是找到匹配#CNTR=
的行,所以我要改变它
您可以将其与行i=~#'#CNTR='
匹配,这将匹配其中包含#CNTR=
的任何行(大小写相同)。您的另一个正则表达式#CNTR=*
意味着用零或更多=等号匹配任何带有#CNTR=*
的行。它可能匹配,但您可能希望在等号之后有任何内容,该等号应为#CNTR=..*
(
匹配任何内容*
零次或多次)
在你的for循环之后
echo indx
let cnt = yogaf[indx]
echo string(cnt)
let [g:CNTR] = cnt[6:]
echo g:CNTR
return g:CNTR
cnt(几乎)永远不会是您想要的,您可能会很幸运,但如果您的字符串匹配(它可能匹配),您将使用字符串索引列表,vim似乎返回第一行,这可能不是您想要的
对于cnt[6://code>行,我认为您试图从匹配字符串的前面剥离#CNTR
。但是,cnt不包含您想要的内容
因此,我们只需修改for循环,将g:CNTR
设置为正确的值,并在找到匹配行时返回
for i in g:yogaf
if i =~ '#CNTR='
let g:CNTR = i[6:]
return g:CNTR
endif
endfor
在此循环结束时,将设置g:CNTR
,或者您没有找到任何内容。如果您没有找到任何东西,我将g:CNTR
设置为-1并返回该值
let g:CNTR = -1
return g:CNTR
因此,完成的函数应该是这样的(删除所有无关的内容)
虽然我甚至不确定这是你想要的,因为你并没有问一个问题。 模板考虑使用一个插件(如果你的VIM是用Python支持构建的)或者
Ultisnips允许您在代码片段中使用Python。两者都允许您在代码段中使用vimscript。谢谢!我更喜欢python快速编写脚本,所以这看起来很有趣。
let g:CNTR = -1
return g:CNTR
function! GetCNTR()
let l:yogaf = readfile("yoga.js")
for i in l:yogaf
if i =~ '^#CNTR='
let g:CNTR = i[6:]
return g:CNTR
endif
endfor
let g:CNTR = -1
return g:CNTR
endfunction