Change File Encoding to utf-8 via vim in a script

不羁岁月 提交于 2019-11-28 15:39:06

This is the simplest way I know of to do this easily from the command line:

vim +"argdo se bomb | se fileencoding=utf-8 | w" $(find . -type f -name *.php)

Or better yet if the number of files is expected to be pretty large:

find . -type f -name *.php | xargs vim +"argdo se bomb | se fileencoding=utf-8 | w"

You could put your commands in a file, let's call it script.vim:

set bomb
set fileencoding=utf-8
wq

Then you invoke Vim with the -S (source) option to execute the script on the file you wish to fix. To do this on a bunch of files you could do

find . -type f -name "*.php" -exec vim -S script.vim {} \;

You could also put the Vim commands on the command line using the + option, but I think it may be more readable like this.

Note: I have not tested this.

You may actually want set nobomb (BOM = byte order mark), especially in the [not windows] world.

e.g., I had a script that didn't work as there was a byte order mark at the start. It isn't usually displayed in editors (even with set list in vi), or on the console, so its difficult to spot.

The file looked like this

#!/usr/bin/perl
...

But trying to run it, I get

./filename
./filename: line 1: #!/usr/bin/perl: No such file or directory

Not displayed, but at the start of the file, is the 3 byte BOM. So, as far as linux is concerned, the file doesn't start with #!

The solution is

vi filename
:set nobomb
:set fileencoding=utf-8
:wq

This removes the BOM at the start of the file, making it correct utf8.

NB Windows uses the BOM to identify a text file as being utf8, rather than ANSI. Linux (and the official spec) doesn't.

The accepted answer will keep the last file open in Vim. This problem can be easily resolved using the -c option of Vim,

vim +"argdo set bomb | set fileencoding=utf-8 | w" -c ":q" file1.txt file2.txt

If you need only process one file, the following will also work,

vim -c ':set bomb' -c ':set fileencoding=utf-8' -c ':wq' file1.txt
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!