Vim 宏替换的应用 @a

2019-11-01  本文已影响0人  千羽之城88

用 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)

上一篇 下一篇

猜你喜欢

热点阅读