一个文本:
adfafafafafaf[1]adsfasfasfasfa
asdfadfadfafdafda[2]adfadfasfafasdfasdf[3]adfafafa
[1]aaaaaaaa
[2]bbbbbbbb
[3]ccccccc
想得到如下的内容:
adfafafafafaf\footnote{(1)aaaaaaaa}adsfasfasfasfa
asdfadfadfafdafda\footnote{(2)bbbbbbbb}adfadfasfafasdfasdf\footnote{(3)ccccccc}adfafafa
先将文本调整一下:
adfafafafafaf[1]adsfasfasfasfa
asdfadfadfafdafda[2]adfadfasfafasdfasdf[3]adfafafa
(1)aaaaaaaa
(2)bbbbbbbb
(3)ccccccc
为了防止编号在同一行导致后面的替换不成功,这一步是必须的。接着执行如下命令:
let i=1 | while(i<4) | let text='\footnote{'.getline(search('('.i.')')).'}' | let pat=['\['.i.']' ,text] | d | 0go | call line(search('\['.i.'\]')) | s/\[[0-9]*\]/\=reverse(pat)[0]/ | let i+=1 | endwhile
思路:
- 搜索包含(i)的行,放到一个变量text中,同时删除该行;
- 搜索包含[i]的行,执行替换;
- 直到循环结束
命令 | 解释 |
---|---|
getline(search('('.i.')')) | 得到 (i) 行的内容 |
let pat=[ '['.i.']' , text] | 设置一个临时列表 |
d | 清空(i)行内容 |
0go | 回到第一行 |
call line(search('['.i.']')) | 搜索[i]行 |
s/../../ | 替换[i]的内容 |
reverse(pat)[0] | 反转列表 |
" 函数
" 保存到的 _vimrc 中
function! SupSub(offset)
g/^\[[0-9]*\]/s/\[/(/|s/\]/)/
let i = 1
while( i < a:offset )
let text = '\footnote{'.getline(search('\['.i.'\]', 'b')).'}'
let pat = ['\['.i.']',text]
echo line('.')
d
0go
call line(search('\['.i.'\]'))
s/\[[0-9]*\]/\=reverse(pat)[0]/
let i += 1
let text=''
endwhile
let i=0
endfunction

网友评论