从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'寄存器的内容。

有任何想法吗?

编辑:我知道:

  • 如何搜索和替换全球,例如%s / n // g
  • 如何在一个缓冲区中搜索和替换'foo'到一个寄存器的内容,例如:%s / foo / a / g
  • 如何搜索寄存器的内容并用缓冲区中的'foo'替换,例如:%s / a / bar / g
  • 我需要知道的是:

  • 如何用'bar'从寄存器'a'搜索'foo'并将其替换为'b'
  • 如何用'bar'从寄存器'a'中搜索'foo'并将其替换为'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正常模式序列清除寄存器aqa开始记录一个新的宏,并且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

    上一篇: remove newlines from a register in vim?

    下一篇: Vim : How to add a new line