Vim的编码详解和中文环境设置
很惭愧,作为vim的忠实用户,自从2年多前从help里知道了:edit ++enc=xxx这个命令之后,我就没有去了解过vim的编码设定了。这些年来,我遇到编码出错,总是:edit ++enc=xxx。今天:help了一下encoding等,终于搞清楚了相关的各个变量的作用和关系。简单的说,有三个设置。(我下面基本以中文环境来作为说明)1) 在.vimrc或者_vimrc里加入set fileencodings=utf-8,gb2312,gbk,gb18030,big5这句就基本OK了。vim会依次使用这些编码对文件进行编码的猜测。2) 如果还是不行,那么在打开文件之后,用:edit ++enc=gbk这个命令强制使用某个编码。3) 如果依然不行,请检查你的$LANG环境变量。下面是详细的说明。vim编码主要涉及三个变量。encodingvim的内部编码,包括内存数据的编码,vim配置文件的编码。encoding取自变量$LANG,如果$LANG为空,则取latin1。这个编码应该和你的终端编码保持一致的。fileencoding文件的编码。vim在加载文件的时候,会把这个编码转换成encoding参数的编码。同样的,保存文件的时候,内存的编码会由encoding转变为fileencoding。需要注意的是,在vimrc里设置这个参数,不会起作用。因为打开一个文件的时候,fileencodings或者encoding会覆盖fileencoding。关于这个,可以看下面提到的打开文件流程。fileencodings=utf-8,gbk,gb2312vim在加载一个文件的时候,会依次尝试使用fileencodings里的编码作为fileencoding。如果全部失败,那么vim会使用encoding作为fileencoding。另外,如果vim使用了错误的编码,可以使用edit ++enc=gbk这个命令。意思是,重新读取文件,并强制使用gbk作为fileencoding。这时候会忽略filencodings。以下是一些vim操作的内部流程打开文件首先从文件读入数据到内存,然后从fileencodings里依次使用各个编码来尝试转换为encoding。如果有一个成功,则中止尝试。如果找不到,则取encoding作为fileencoding。也就是说,这里有一个从fileencoding转换为encoding的过程。保存文件把内存的数据,从encoding,转换为fileencoding,然后写入文件。其实在这里最容易让人搞不清楚的就是encoding和fileencoding的区别。因为在大多数GUI特别是WINDOWS平台的编辑器里,encoding都是不需要设置的。通常这个encoding都是默认和GUI环境的编码保持一致。encoding是数据在内存里的存储编码,而fileencoding才是文件的编码。
解决vim自动补全时扫描标签太慢导致假死问题??
vim的自动补全很好用,有时Ctrl-p想让它自动补全一下,它所有include的文件都挨个扫一遍。如果路径下目录和文件很多,vim就会全部扫描建立标签,耗时很长,导致vim不响应输入,陷入假死状态。但其实我要的那个词它就在当前编辑的文件里有,不需要它扫那么多额外的文件。解决之道:法1. 使用Ctrl - x - p 或 ctrl - x - n 进行自动补全;法2. 改变vim扫描标签的规则。vim缺省的补全顺序是 .,w,b,u,t,i,它意味着扫描:1. 当前缓冲区 . 2. 其它窗口的缓冲区 window??3. 其它载入的缓冲区 b ... [/quote]具体操作:在.vimrc中添加如下一行:set cpt=.,w,b保存,退出,即可。
vim如何输入偏僻字符?
今天想输入 ℃ ,不知道如何输入。搜了下,vim果然强大,提前想好了,提供了一种变通的输入方法,成为digraph(二合字母),意即:把一个符号按两个字母输入。举例如下:
C-koC 输入摄氏度符号℃
C-ka: ? 输入字符 ?
欲知更多,请猛敲:h digraph
??VIM中不易发现的强大功能?
1. * (super star)
向下查找光标下(或附近)的。向上找用#。g*查找则不限制whole word。区别:比如在if这个单词上按*键则查找\if\,按g*键则查找if。2. C-R (magic insert)在insert模式下,C-R (register) 插入register里的内容,一个有趣的reg是=.假设你想输入123K的具体字节数,不用打开计算器,试试这个=
原创力文档

文档评论(0)