Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
random572705
V2EX  ›  Linux

vim 编辑文件时,中文字符自动折行会添加额外的换行符,如何解决?

  •  1
     
  •   random572705 · Dec 24, 2019 · 5708 views
    This topic created in 2513 days ago, the information mentioned may be changed or developed.

    问题描述:

    1. 如图 1 所示,使用 vim 编辑一个文件。
    2. 如图 2 所示,把窗口调小,令其发生折行,此时被折行的行末要么会有一个">",要么会有一个"换行符"。
    3. 如图 3 所示,使用鼠标选中图 2 的内容,复制粘贴到 txt 中,会有异常的">"和"换行"。
    4. 请问如何让 vim 不显示">"和"换行符"?想解决的是显示问题,而不是复制粘贴问题。

    l9qR6P.png  l9q40S.png  l9LruV.png 

    Supplement 1  ·  Dec 24, 2019

    由此问题产生的上层问题:

     iTerm2终端使用"Trigger"功能实现正则匹配高亮特定字符串时,由于Trigger的匹配规则是遇到换行则匹配,因此vim这里的断行会导致正则匹配失败,如下图所示,正则表达式为"折行测.?试"。  本问题主要是想简单地解决这个问题,而不想拆分成多段正则。

    lC3nOA.png
    13 replies  •  2019-12-27 10:08:05 +08:00
    keelii
    keelii
    Dec 24, 2019
    1
    set showbreak
    random572705
    random572705
    OP
    Dec 24, 2019
    2
    @keelii 这个命令是在折行后的行首增加额外的提示符,并不能去除">"和"换行符"。
    runinhard
    runinhard
    Dec 24, 2019
    3
    搭车问下,换行后行尾有个 ” \ “,是什么原因,怎么破
    1iuh
    1iuh
    Dec 24, 2019
    4
    @random572705 #2 ">" 可以去掉,但是换行是去不掉的。 如果只是想复制出来的不换行,不包含其他符号。给你两个方案。

    1. 复制出来之后批量查找替换一下。

    2. 设置一下,让 vim 和系统共用粘贴板,然后在 vim 里面使用 yy 复制。
    1iuh
    1iuh
    Dec 24, 2019
    5
    @random572705 #2 刚刚审错题了, 不想自动换行 :set nowrap 就行了
    random572705
    random572705
    OP
    Dec 24, 2019
    6
    @1iuh 感谢回复。见第一条附言,不是想取消自动换行,因此"set nowrap"不适用。另外"set showbreak=+++"在我的环境上(macOS_10.15)是在行首添加额外字符,无法去除行尾的">",不知是什么原因?
    1iuh
    1iuh
    Dec 24, 2019 via iPhone
    7
    @random572705 那我有点不明白你的问题了,是想就像你截图这样显示两行,但是没有>和换行符? 如果不是为了复制的话,感觉这样没有什么意义。 不如你说一下原始需求,大家才好想办法。
    random572705
    random572705
    OP
    Dec 24, 2019
    8
    @1iuh 原始需求如附言所提,未折行时(第一张图)能正常高亮,折行后(第二张图)无法高亮,因为"折行测试"四个字中间多了一个"换行符"导致的。
    ysc3839
    ysc3839
    Dec 24, 2019
    9
    建议想办法让正则表达式忽略换行符?不然估计没什么好办法了。
    random572705
    random572705
    OP
    Dec 24, 2019
    10
    @ysc3839 感谢回复。iTerm2 文档看了一圈,未找到开启多行匹配的方法....根因在于 vim 对宽字符折行时加了换行符,常规字符没有这个问题。
    ysc3839
    ysc3839
    Dec 24, 2019 via Android❤️1
    11
    @random572705 我估计没办法,正则的多行匹配是 . 可以匹配多行,不是你这种中间有换行符然后忽略。
    random572705
    random572705
    OP
    Dec 25, 2019
    12
    @ysc3839 正则是可以匹配多行,但是 iTerm2 的实现是遇到换行符就触发匹配,因此无法匹配多行。
    random572705
    random572705
    OP
    Dec 27, 2019
    13
    手动置顶
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   965 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 19:25 · PVG 03:25 · LAX 11:25 · JFK 14:25
    ♥ Do have faith in what you're doing.