如何在Vim中用字节\ x20替换字节\ xe3 \ x80 \ x80?

时间:2018-08-18 12:27:36

标签: vim substitution

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

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

现在用f:/test.txt打开xxd,您将在其中看到三个字节\xe3\x80\x80,用utf-8编码的目标文件包含三个字节\xe3\x80\x80

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

这意味着使用test.txt进行utf-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表示,(空白)不能用{{1 }}或\%u20\%x20

\x20可以表示,白色空格是可打印字符,还有,我想用拉丁文1的\x20替换三个字节\xe3\x80\x80吗?

latin-1编码中的nbsp表示不间断空格,它是NON PRINTABLE CHARACTERS,如何在vim中编写表达式?

nbsp

他们都不适合这个案子。

2 个答案:

答案 0 :(得分:3)

您可以通过按 ctrl + v ,然后按 u ,然后按\xe3\x80\x80u3000字符。对于您的情况3000(请检查:help i_CTRL-V_digit),使用4个Unicode字符,因为它是黑色字符,您只能看到一个空格,所以您只能输入:set list来查看所有的位置拥有该字符,或者将其添加到您的.vimrc

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

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

进入命令模式,并在按:后按 ctrl + f ,它将打开命令行窗口,您可以在其中进入插入模式并输入:%s/ ctrl + v u 3000/ /g,完成后按Enter以应用命令。

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

enter image description here

在图像中,而不是用空格/ /代替,而是用----代替,只是为了直观地看到更改。

答案 1 :(得分:0)

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.