【发布时间】:2011-09-07 20:33:31
【问题描述】:
我有一长串不同的大学名称。我正在尝试通过将行与某些唯一关键字进行比较来构建同义词表;也就是说,在文件中,我会确定哈佛是这里的关键字:
Harvard Business School|
Harvard College|
Harvard School of Divinity|
并将它们粘贴到另一个文件中
Harvard Business School|Harvard College|Harvard School of Divinity|
我一直在通过搜索光标下的单词,将带有该单词的行拉到寄存器中,将寄存器粘贴到另一个文件中,然后使用连接命令“J”将这些行连接在一起:
[ clear register 'a' ]
0"ay0
[ move cursor to 'Harvard" and yank lines with keyword into register a ]
:g/\<<CTRL-R><CTRL-W>\>/y A
[ move to other screen and paste ]
"ap
[ join lines ]
JJJJJ
这很好用,但我希望它能够简化。具体来说,我想知道如何从寄存器中删除换行符,这样我就不必在最后一步使用 JJJJ 手动加入行。我想搜索包含光标下单词的所有行,将它们复制到“a”寄存器中,从“a”寄存器中删除换行符,然后粘贴“a”寄存器的内容。
有什么想法吗?
编辑: 我知道:
- 如何全局搜索和替换,例如%s/\n//g
- 如何在缓冲区中搜索和替换 'foo' 从单词到寄存器的内容,例如:%s/foo/a/g
- 如何搜索寄存器的内容并在缓冲区中替换为 'foo',例如:%s/a/bar/g
我需要知道的:
- 如何从寄存器 'a' 中搜索 'foo' 并将其替换为 'bar' 到寄存器 'b'
- 如何从寄存器“a”中搜索“foo”并将其替换为“bar”以注册“a”
【问题讨论】:
-
这必须在vim中完成吗?相反,如果你有一个分隔列表,这可以很容易地在 awk、python、sed、perl 等中完成。相反,这个列表是标准的,例如一所学校、一根管道和每行一个“\n”吗?或者每行是否包含其他信息?
-
只是学校和管道在线。我的问题实际上是关于 vim 而不是关于如何使用其他工具解决问题;我只提供了上下文的问题(并查看是否有任何其他 vim 解决方案)。
-
很公平,我在下面提供了我的解决方案。
标签: regex vim replace vim-registers