V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
random572705
V2EX  ›  Linux

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

  •  1
     
  •   random572705 · 2019-12-24 11:24:48 +08:00 · 4747 次点击
    这是一个创建于 1822 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题描述:

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

    l9qR6P.png  l9q40S.png  l9LruV.png 

    第 1 条附言  ·  2019-12-24 14:28:46 +08:00

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

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

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

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

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