vim中的查找与替换一例
拿到一个单词表,想要将之导入到supermemo 2006中去。然而与supermemo 2006中的Q&A txt 格式不一样,所以需要处理一下。用程序当然就用python了,不过想试试vim是否能够搞定。
单词表格式如下:
…………
9.slip v. 滑动,滑落;忽略
10.slide v. 滑动,滑落 n. 滑动;滑面;幻灯片
11.bacteria n. 细菌
12.breed n. 种,品种 v. 繁殖,产仔
13.budget n. 预算 v. 编预算,作安排
14.candidate n. 候选人
15.campus n. 校园
16.liberal a. 慷慨的;丰富的;自由的
17.transform v. 转变,变革;变换
…………
supermemo中的Q&A txt格式如下:
…………
Q: slip
A: v. 滑动,滑落;忽略
Q: slide
A: v. 滑动,滑落 n. 滑动;滑面;幻灯片
…………
1:先将单词复制到vim保存到一个文件
2:首先将单词与中文解释分成二行,第二行需要以A: 开始
命令模式下输入:%s/\(\l\) \(ad\|vt\|vi\|a\|n\|v\)\./\1\rA: \2\./g后得到如下
9.slip
A: v. 滑动,滑落;忽略
10.slide
A: v. 滑动,滑落 n. 滑动;滑面;幻灯片
3:将以数字开始的行,替换为以Q: 开始的行,并在前添加一空白行
命令模式下输入:%s/\d\+\./\rQ: /g后得到
Q: slip
A: v. 滑动,滑落;忽略
Q: slide
A: v. 滑动,滑落 n. 滑动;滑面;幻灯片
4:保存,此格式Q&A文件应该可以导入到supermemo中,作为一个单词库。
老夫试了一下发现单词都出来了,就是中文部分要不是乱码要不就是空白,说明文件格式是正确的,就是可能答案部分的编码不正确的原因,需要研究一个supermemo 2006的Q&A txt文件的格式。
替换命令如下
:[范围]s/from/to/[选项]
[范围]:
如果不输入,则为当前行。也可以是形如1,30表示1到20行。%表示全文搜索。.表示当前行。$表示最后一行。所以可以用.,$表示当前行到最后一行
[选项]:
g所有匹配项,c确认替换
from部分:
* 任意次匹配
\+ 匹配一次以上
\= 匹配0次或一次
\{3,5} 匹配3到5次
\| 或者
\& 二个并列的同时匹配
\d 数字
\D 非数字
\x 十六进制数
\X 非十六进制数
\s 空白字符
\S 非空白字符
\l 小写字母
\L 非小写字母
\u 大写字母
\U 非大写字母
to部分:
反向引用\1...\9表示第一到第九个匹配的内容,\0整个匹配的内容
下面解释一下二个替换命令
:%s/\(\l\) \(ad\|vt\|vi\|a\|n\|v\)\./\1\rA: \2\./g
1 2 ------------3--------- 4 5 6 7
--------8------------------ ------9---
1:%表示全局查找
7:g表示全部替换
2:一个小写字母
3:ad或者vt或vi或a或n或v
8:表示查找【小写字母+空格+ad.或者vt.或vi.或a.或n.或v.】
4:第一个匹配内容即2
5:换行
6:第二个匹配内容即3
9:表示替换为【匹配的小写字母+换行+A:+空格+匹配的ad.或者vt.或vi.或a.或n.或v.】
如:
9.slip v. 滑动,滑落;忽略
替换为
9.slip
A: v. 滑动,滑落;忽略
:%s/\d\+\./\rQ: /g
1 -2--- -3---
1:%表示全局查找
2:表示查找以一个以上数字+.
3:表示替换为换行+Q:空格
如:
9.slip
替换成
Q: slip
没有评论:
发表评论