【问题标题】:How to replace bytes \xe3\x80\x80 with byte \x20 in vim?如何在vim中用字节\x20替换字节\xe3\x80\x80?
【发布时间】:2018-08-18 12:27:35
【问题描述】:

让我们创建要操作的目标文件。

python3
>>> mfile = open("f:/test.txt","wb")
>>> mfile.write(b'\xe3\x80\x80')
3
>>> mfile.close()

现在用xxd打开f:/test.txt,你会在里面看到三个字节\xe3\x80\x80,我们用utf-8编码的目标文件包含三个字节\xe3\x80\x80

python3
b'\xe3\x80\x80'.decode('utf-8')
'\u3000'

表示test.txtutf-8编码的三个字节的unicode为3000

:s/\%u3000/ /g

s/\%u3000/ /g 可以在 vim 中将字节 \xe3\x80\x80 替换为字节 \x20

问题仍然存在。

:s/\%u3000/\%u20/g 
:s/\%u3000/\%x20/g
:s/\%u3000/\x20/g

这里上面三种格式都行不通,为什么\xe3\x80\x80在vim中可以用\%u3000表示,(白空白)不能用\%u20\%x20或@表示987654341@ ?

可以表达\x20,空白是可打印字符,另外我想用latin-1的nbsp替换\xe3\x80\x80三个字节?

latin-1 编码中的nbsp 表示不间断空格,即不可打印字符,如何在 vim 中编写表达式?

:s/\%u3000/\%ua0/g 
:s/\%u3000/\%xa0/g
:s/\%u3000/\xa0/g

他们都不适合这个案子。

【问题讨论】:

    标签: vim substitution


    【解决方案1】:

    您可以通过按 ctrl+v 然后按 u 和 4 个 Unicode 字符来输入 \xe3\x80\x80u3000 字符,在你的情况下 3000 (检查 :help i_CTRL-V_digit ),因为是一个黑色字符,你只会看到一个空格,你可以输入 :set list 来查看你有这个字符的所有地方,或者在任何情况下将它添加到你的.vimrc

    set listchars=tab:▸\ ,eol:¬,trail:·,extends:#,nbsp:.
    

    现在以与输入字符相同的方式,您可以尝试在命令行中替换它,但在这种情况下可以输入 ctrl+v 您可以尝试使用命令行窗口 (:help cedit)。

    进入命令模式,在 : 按下 ctrl+f 后,它将打开命令行窗口,您可以在其中进入插入模式并键入:%s/ctrl+vu3000/ /g,完成后按回车键应用命令。

    在进入命令行窗口之前先试一试,因为使用 ctrl+v 可能会起作用,不像使用 ctrl+k (http://vim.wikia.com/wiki/Entering_special_characters)

    在图片中不是用空格替换/ /,而是替换为----,只是为了直观地看到变化。

    【讨论】:

      【解决方案2】:

      1.vim编辑文件时如何输入不可打印字符?

      在插入模式下:

      1.ctrl+v (ctrl+q if ctrl+v call paste from regitor)
      2.input u 
      3.input the unicode value of non printable characters
      4.input enter key
      

      2.vim的ex模式的替代命令如何输入不可打印的字符?

      例如,要将所有字节\xe3\x80\x80替换为\xa0,所有字节的编码都是utf-8。

      1. get the byte's unicode value 
      
      `\xe3\x80\x80`'s unicode value is `3000`,   
      `\xa0`'s unicode value is `a0`.
      
      2.press `:` into ex mode.
      3.:s/\%u3000/    
      4:ctrl+v ua0  
      do not input enter as above process
      5.go on to input `/g`.
      6.press enter.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-29
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多