linux字体,bashrc的问题的解决

0、查看文件

:set ff   #查看文件类型  这里是fileformat=unix
:set ff=dos  设置为dos模式, 也可以用 sed -i 's/$/
/' 
:set ff=unix  设置为unix模式,也可以用一下方式转换为unix模式:sed -i 's/.$//g'
:set fileencoding  #查看现在文本的编码
:set fenc=编码  #转换当前文本的编码为指定的编码
:set enc=编码  #以指定的编码显示文本,但不保存到文件中。

1、打开vim,查看文件的编码方式

:set fileencoding 

 

 2、因为不知道什么原因,~/.bashrc中编码方式发生了变化

中文字符都乱掉了

 查看编码方式,发现不知道为什么变成了latin1

后来网上查到:vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照 fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。

 1)encoding

encoding是Vim内部使用的字符编码方式。当我们设置了encoding之后。Vim内部全部的buffer、寄存器、脚本中的字符串等,全都使用这个编码。Vim 在工作的时候。假设编码方式与它的内部编码不一致,它会先把编码转换成内部编码。假设工作用的编码中含有无法转换为内部编码的字符,在这些字符就会丢失。因此,在选择 Vim 的内部编码的时候,一定要使用一种表现能力足够强的编码,以免影响正常工作。因为encoding选项涉及到Vim中全部字符的内部表示,因此仅仅能在Vim启动的时候设置一次。在Vim工作过程中改动encoding会造成许多的问题。用户手冊上建议仅仅在 .vimrc中改变它的值,其实似乎也仅仅有在 .vimrc中改变它的值才有意义。假设没有特别的理由,请始终将encoding设置为utf-8。为了避免在非UTF-8的系统如Windows下,菜单和系统提示出现乱码。可同一时候做这几项设置:

set encoding=utf-8
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8

(2)termencoding
  termencoding是Vim用于屏幕显示的编码。在显示的时候,Vim会把内部编码转换为屏幕编码,再用于输出。内部编码中含有无法转换为屏幕编码的字符时。该字符会变成问号,但不会影响对它的编辑操作。假设termencoding没有设置,则直接使用encoding不进行转换。举个样例。当你在Windows下通过telnet登录Linux工作站时。因为Windows的telnet是GBK编码的,而Linux下使用UTF-8编码。你在telnet下的Vim中就会乱码。此时有两种消除乱码的方式:一是把Vim的encoding改为gbk。还有一种方法是保持encoding为utf-8,把termencoding改为gbk,让Vim在显示的时候转码。显然。使用前一种方法时,假设遇到编辑的文件里含有GBK无法表示的字符时,这些字符就会丢失。但假设使用后一种方法。尽管因为终端所限,这些字符无法显示,但在编辑过程中这些字符是不会丢失的。对于图形界面下的GVim,它的显示不依赖TERM,因此termencoding对于它没有意义。在GTK2下的GVim 中,termencoding永远是utf-8,而且不能改动。而Windows下的GVim则忽略termencoding的存在。

(3)fileencoding
 当Vim从磁盘上读取文件的时候。会对文件的编码进行探測。假设文件的编码方式和Vim的内部编码方式不同,Vim就会对编码进行转换。转换完成后,Vim会将fileencoding选项设置为文件的编码。当Vim存盘的时候。假设encoding和fileencoding不一样,Vim就会进行编码转换。因此。通过打开文件后设置fileencoding。我们能够将文件由一种编码转换为还有一种编码。可是,由前面的介绍能够看出,fileencoding是在打开文件的时候。由Vim进行探測后自己主动设置的。因此。假设出现乱码,我们无法通过在打开文件后又一次设置fileencoding来纠正乱码。简而言之,fileencoding是Vim中当前编辑的文件的字符编码方式,Vim保存文件时也会将文件保存为这样的字符编码方式 (无论是否新文件都如此)。
(4)fileencodings
编码的自己主动识别是通过设置fileencodings实现的,注意是复数形式。fileencodings是一个用逗号分隔的列表。列表中的每一项是一种编码的名称。当我们打开文件的时候,VIM按顺序使用fileencodings中的编码进行尝试解码。假设成功的话,就使用该编码方式进行解码。并将fileencoding设置为这个值,假设失败的话,就继续试验下一个编码。因此。我们在设置fileencodings的时候,一定要把要求严格的、当文件不是这个编码的时候更easy出现解码失败的编码方式放在前面,把宽松的编码方式放在后面。比如。latin1是一种很宽松的编码方式,不论什么一种编码方式得到的文本,用latin1进行解码。都不会发生解码失败——当然,解码得到的结果自然也就是理所当然的“乱码”。因此,假设你把latin1放到了fileencodings的第一位的话,打开不论什么中文文件都是乱码也就是理所当然的了。

原文地址:https://www.cnblogs.com/djx571/p/11983767.html