美文网首页
Vim 宏替换的应用 @a

Vim 宏替换的应用 @a

作者: 千羽之城88 | 来源:发表于2019-11-01 15:40 被阅读0次

    用 lualtex 制作文本,总免不了做一些替换的工作,本来想写一个函数,本着能懒一会儿是一会儿的原则,还是用宏替换解决了。这是原文

    page3.png

    正文下面是注释:

    page4.png

    拷贝到vim中就变成了如下的内容:

    魯有兀者叔山無趾(1),踵見仲尼(2)。仲尼曰:「子不謹,前既犯患若是矣。雖今來,何及矣?」無趾曰:「吾唯不知務而輕用吾身,吾是以亡足。今吾來也,猶有尊足者存(3),吾是以務全之也。夫天無不覆,地無不載,吾以夫子為天地,安知夫子之猶若是也!」孔子曰:「丘則陋矣。夫子胡不入乎?請講以所聞!」無趾出(4)。孔子曰:「弟子勉之!夫無趾,兀者也,猶務學以復補前行之惡,而況全德之人乎!(5)」...
    
    【註】
    
    李云:「叔山,氏。」宣云:「無足趾,遂為號。」
    崔云:「無趾,故踵行。」
    宣云:「有尊於足者,不在形骸。」
    ...
    言其根器如此,天然刑戮,不可解也。
    

    首先呢,我们需要给注释的行标注序号:

    2019-11-01 14.10.57.gif

    现在注释行就变成了:

    1. 李云:「叔山,氏。」宣云:「無足趾,遂為號。」
    2. 崔云:「無趾,故踵行。」
    3. 宣云:「有尊於足者,不在形骸。」
    ...
    10. 釋文:「惡,醜。李云:『哀駘,醜貌。它其名。』」
    
    

    接下来我们要做的就是:用带序列号的行内容,替换掉原文的编号里面的内容,比如:

    
    魯有兀者叔山無趾(1 \footnote{1. 李云:「叔山,氏。」宣云:
    「無足趾,遂為號。」}),踵見仲尼(2 \footnote{2. 崔云:
    「無趾,故踵行。」})。仲尼曰:「子不謹,前既犯患若是
    矣。雖今來,何及矣?」無趾曰:「吾唯不知務而輕用吾身,
    吾是以亡足。今吾來也,猶有尊足者存(3 \footnote{3. 宣云:
    「有尊於足者,不在形骸。」})
    
    

    我们先定义一个宏:

    
    let @a="/(\\([0-9]\\+\\))^M:s/(\\([0-9]*\\))/\\='('.submatch("1").' \\footnote{'.getline(i+4).'})'/ \| let i+=1^M"
    
    # 上面的命令是:
    #   1. 搜索形如 (1) 的数字
    #   2. 将替换
    
    
    命令 解释
    /(\([0-9]\+\))^M range
    :s/../../ 替换
    \= 后面接命令返回值
    '('.submatch("1") 模式匹配的第一项
    getline(i+4)/ 获取鼠标所在行下面第 i 行
    let i+=1 递增 i
    ^M 是换行符号,Ctrl+Q Enter

    在执行宏之前,我们先将i的值重设为0:let i=0。然后执行宏a 76遍: 76@a

    这样就可以直接倒入到 texworks 里面。

    page1.png

    算了,还是制作成函数吧~

    funciton! Foot(offset)
      let g:i=0 " everytime call Foot() will renew i's value
      let @a="/(\\([0-9]\\+\\))^M:s/(\\([0-9]\\+\\))/\\='('.submatch('1').' \\footnote{'.getline(i+".a:offset.").'})'/ \| let i+=1^M"
    endfunction
    

    放到 .vimrc 里,调用的时候执行:call Foot(3)

    相关文章

      网友评论

          本文标题:Vim 宏替换的应用 @a

          本文链接:https://www.haomeiwen.com/subject/jtnfbctx.html