Vim 上标替换(Subscript and superscript Substitute)

一个文本:

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

思路

  1. 搜索包含(i)的行,放到一个变量text中,同时删除该行;
  2. 搜索包含[i]的行,执行替换;
  3. 直到循环结束
命令 解释
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
Vim 上标替换(Subscript and superscript Substitute)_第1张图片
替换动画

你可能感兴趣的:(Vim 上标替换(Subscript and superscript Substitute))