从vim中的寄存器中删除换行符?
我有很多不同名称的大学名单。 我试图通过将行与某些唯一关键字进行比较来构建同义词表; 也就是说,在文件中,我将确定哈佛是这里的关键词:
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'寄存器的内容。
有任何想法吗?
编辑:我知道:
我需要知道的是:
要直接使用注册表中a
文本进行操作,您可以使用以下命令:
:let @a=substitute(strtrans(@a),'^@',' ','g')
然后,当你粘贴注册,你应该得到你想要的结果, a
在后面。
您不需要从寄存器中删除换行符,也可以按多个J
:使用以下映射,它将为"apgVJ
:
nnoremap <expr> gV "`[".getregtype(v:register)[0]."`]"
该映射使您可以在粘贴后立即选择粘贴的文本。 选定区域上的J
连接区域中的所有行(除非区域只有一行:此处J
行为与没有选择的J
,将当前行连接到下一行)。 gV
tip也可以用于替换: "apgV:s/{pattern}/{replacement}<CR>
更方便,然后使用"ap:let @a=substitute(@a, '{pattern}', '{replacement}', '{flags}')
除非你定义了一些智能映射。
另一个提示是,可以使用qaq
正常模式序列清除寄存器a
: qa
开始记录一个新的宏,并且q
立即停止它,将空字符串留在记录宏a
寄存器中。
游戏后期,但由于其他人似乎已经解决了错误的问题,并且自Google为我提供了解决方案,我觉得有义务提供我的解决方案。
在"a
积累模式匹配为一行
:g/pattern/ norm "apkJ"addu
或使用未命名的寄存器
:g/pattern/ norm pkJddu
它不会删除寄存器中的换行符,因为它不需要。
如果你在规范代码的末尾删除了u
,它将消耗文件中已经使用过的行,这可能会使文件的手动处理更容易,因为你不必读取已经被使用的东西照顾。
引用:
[ join lines ]
JJJJJ
一个问题,为什么不使用5J
或可视模式,或者:%j
(加入文件中的所有行)?
无关:
"How do you mark text between "" in code blocks,
not to be colour coded?"
链接地址: http://www.djcxy.com/p/49335.html