vim应用:终极解决windows系统gvim/vim的各种乱码(文件,菜单,提示信息)!
2011-04-15 00:53:01
查看文件的编码:
:echo &fileencoding
Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下:
encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。
fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
fileencodings: Vim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将 Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的 Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。
用英文菜单和提示最好,可以免去下面对菜单和提示信息(B,C部分)的设置
如果用英文菜单和提示在安装gvim的时候,将支持本地语言的选项去掉。
解决vim文件乱码,打开文件乱码,菜单,提示信息乱码:
有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding
在linux中修改.vimrc(在win中是_vimrc)
windows系统也可以在vim菜单项中:编辑>启动设定,直接打开_vimrc文件
A,"设置文件的代码形式
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,chinese,cp936
B,"vim的菜单乱码解决:
"同样在 _vimrc文件里以上的中文设置后加上下列命令,
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
C,"vim提示信息乱码的解决
language messages zh_CN.utf-8
:echo &fileencoding
Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下:
encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。
fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
fileencodings: Vim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将 Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的 Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。
用英文菜单和提示最好,可以免去下面对菜单和提示信息(B,C部分)的设置
如果用英文菜单和提示在安装gvim的时候,将支持本地语言的选项去掉。
解决vim文件乱码,打开文件乱码,菜单,提示信息乱码:
有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding
在linux中修改.vimrc(在win中是_vimrc)
windows系统也可以在vim菜单项中:编辑>启动设定,直接打开_vimrc文件
A,"设置文件的代码形式
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,chinese,cp936
B,"vim的菜单乱码解决:
"同样在 _vimrc文件里以上的中文设置后加上下列命令,
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
C,"vim提示信息乱码的解决
language messages zh_CN.utf-8
vim中缩进的设置以及将tab转换成空格
对于编写代码,缩进是最基本的概念之一。至于缩进是使用空格还是制表符(Tab),或者缩进是否正好使用一个制表符来表示,很多程序员,特别是 Windows 开发出身的程序员,很容易混淆。幸好,Vim 对于这些概念有非常完整的支持,足以应付各种复杂的情况。以下是相关的主要 Vim 选项:
shiftwidth(缩进的空格数);
tabstop(制表符的宽度);
expandtab(是否在缩进和遇到 Tab 键时使用空格替代;使用 noexpandtab 取消设置);
softtabstop(软制表符宽度,设置为非零数值后使用 Tab 键和 Backspace 时光标移动的格数等于该数值,但实际插入的字符仍受 tabstop 和 expandtab 控制);
autoindent(自动缩进,即每行的缩进值与上一行相等;使用 noautoindent 取消设置);
cindent(使用 C 语言的缩进方式,根据特殊字符如“{”、“}”、“:”和语句是否结束等信息自动调整缩进;在编辑 C/C++ 等类型文件时会自动设定;使用 nocindent 取消设置);
cinoptions(C 语言缩进的具体方式,请参考“:help cinoptions-values”);
paste(粘贴模式,会取消所有上述选项的影响来保证后面的操作——通常是从剪贴板粘贴代码——保持原有代码的风格;使用 nopaste 取消设置)。
下面给出一些常用的组合:
shiftwidth=4 tabstop=4:很多 Windows 出身的程序员会习惯这样的设置,让缩进等于制表符宽度。
shiftwidth=4 tabstop=8:很多 Unix 程序员的设置,仍使用较常用的 4 格缩进,但制表符宽度为标准的 8。
cinoptions=>4,n-2,{2,^-2,:2,=2,g0,h2,p5,t0,+2,(0,u0,w1,m1 shiftwidth=2 tabstop=8:标准的 GNU 编码风格的设置,对 Vim 缺省的 C 缩进风格作了很多微调,比如,if 语句下的“{”、“}”要在“if”后缩进两格,但函数定义部分“{”、“}”仍和函数名一行对齐。开源软件经常使用该种缩进风格。
在编辑代码时一个很有用的命令是调整代码缩进,可以很方便地增加(或减少)若干级缩进,并自动根据选项设定使用正确的空格或制表符。只需要使用 “V”选中你要调整的代码行,然后键入“<”(或“>”)即可增加(或减少)一级缩进;在键入“<”(或“>”)之前键入数字则可以指定增加(或减少)的缩进级数。
我们要讨论的最后一个相关的命令是“:retab”。在设定了 expandtab 选项时,该选项会把所有的制表符转换成空格。在没有设定 expandtab 选项时,使用“:retab!”可把空白字符转换成制表符(可能误转换,慎用),使用“:retab n”可以把 tabstop 重置为 n,并转换含制表符的连续空白字符为适当的制表符和空格的组合以保证含制表符的行看起来没有任何变化。详细信息请参看“:help :retab”。
新建文件类型,并且显示为高亮,方法2
1,和上面介绍第一种方法一样,先在vim安装目录下加入新文件类型:
我的安装目录是:D:\Program Files (x86)\Vim
我在~\Vim\vimfiles\ftdetect(没有目录可自己建立,unit在~\Vim\ftdetect目录下)下创建一个文件:filetypeset.vim(文件名可以任意),
在文件里写上添加的文件类型(我加入了.txt和.prop文件的支持):
au BufRead,BufNewFile *.prop set filetype=prop
au BufRead,BufNewFile *.txt set filetype=txt
2,我在D:\Program Files (x86)\Vim\vimfiles\syntax中加入相应的语法文件
txt.vim和prop.vim,在文件里可以自己定义高亮,
当然我们可以将已经有的文件脚本直接复制过来,从就是把D:\Program Files (x86)\Vim\vim73\syntax\目录下xml.vim,dtd.vim(xml.vim依赖这个文件)和c.vim直接复制过来,然后改成所需要的文件名!
好了,这种方法,使vim已经支持新的文件类型高亮了。
新建文件类型,并且显示为高亮,方法1
我用的是windows7下的Gvim,unix或linux也应当同理
vim使用命令
:help new-filetype可以查看帮助
1,在vim安装目录下加入新文件类型:
我的安装目录是:D:\Program Files (x86)\Vim
我在D:\Program Files (x86)\Vim\vimfiles\ftdetect(没有目录可自己建立,unit在~\Vim\ftdetect目录下)下创建一个文件:filetypeset.vim(文件名可以任意),
在文件里写上添加的文件类型(我加入了.txt和.prop文件的支持):
au BufRead,BufNewFile *.prop set filetype=prop
au BufRead,BufNewFile *.txt set filetype=txt
2,然后在D:\Program Files (x86)\Vim\vimfiles\ftplugin(没有目录可自己建立,unit在~\Vim\ftplugin目录下)下建立对应扩展名的插件,
新建txt.vim和prop.vim文件
在txt.vim文件中指定txt文件支持的高亮类型:
set filetype=c
我让txt支持c语言的高亮
同理在prop.vim文件中写入:
set filetype=xml
ok大功告成,vim已经支持新的文件类型高亮了。
vim(gvim)自动在新标签页中打开文件:
我的系统是win7:我的做法是:
运行 regedit 命令
在注册表中找到HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\edit\command
数据内容应当是:"d:\Program Files (x86)\Vim\vim73\gvim.exe" "%1"
改成:"d:\Program Files (x86)\Vim\vim73\gvim.exe" -p --remote-tab-silent "%1"
好了,以后双击vim支持文件类型的时候,会在已有的vim程序中打开新tab,而不是新建立一个vim程序窗口。
将文件改问gb2312的编码
1,安装的时候要选择支持本地语言!
2,set fileencoding=cp936
(cp936是gb2312的国际名,vim不持支持gb2312名字。)
VIM 多文件查找替换
VIM可以在多个文件中查,用的是:vimgrep这条命令,
**格式如::vimgrep /AAA/ **/*.* 。
**执行这条命令后,可以通过:cw命令打开匹配的窗口进行查询结果的查看。
VIM可以在多个文件中查找替换:
举例说明,如果你想将当前目录下所有类型的文件中的 oldword 替换为 newword,
**那么只需要打开当前目录下的某个文件,输入如下两条命令并回车:
:args *.*
:argdo %s/oldword/newword/egc | update
第一行,我们使用 args 命令,将当前目录下所有类型的文件都加入到参数列表中(不包括子文件夹中的文件,),以备后续操作。
args命令使用 :args */* 的话,是将当前目录下 所有在子文件夹中的目录和子文件夹中的文件(不包括下一级文件)加入参数列表中。
**执行后可以用next(n)和previous(p)选择文件的位置!
第二行,使用 argdo 命令,对参数列表中的文件进行替换操作。e 指使用正则模式,为了区分大小写。
更多例子:
查找
:args *.cpp
:argdo /word
替换
:args *.cpp
:argdo %s/word/NEW/eg | update
vim正则表达式
元字符 说明
. 匹配任意一个字符
[abc] 匹配方括号中的任意一个字符。可以使用-表示字符范围,
如[a-z0-9]匹配小写字母和阿拉伯数字。
[^abc] 在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。
/d 匹配阿拉伯数字,等同于[0-9]。
/D 匹配阿拉伯数字之外的任意字符,等同于[^0-9]。
/x 匹配十六进制数字,等同于[0-9A-Fa-f]。
/X 匹配十六进制数字,等同于[^0-9A-Fa-f]。
/w 匹配单词字母,等同于[0-9A-Za-z_]。
/W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。
/t 匹配<TAB>字符。
/s 匹配空白字符,等同于[ /t]。
/S 匹配非空白字符,等同于[^ /t]。
/a 所有的字母字符. 等同于[a-zA-Z]
/l 小写字母 [a-z]
/L 非小写字母 [^a-z]
/u 大写字母 [A-Z]
/U 非大写字母 [^A-Z]
表示数量的元字符
元字符 说明
* 匹配0-任意个
/+ 匹配1-任意个
/? 匹配0-1个
/{n,m} 匹配n-m个
/{n} 匹配n个
/{n,} 匹配n-任意个
/{,m} 匹配0-m个
/_. 匹配包含换行在内的所有字符
/{-} 表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好
/= 匹配一个可有可无的项
/_s 匹配空格或断行
/_[]
元字符 说明
/* 匹配 * 字符。
/. 匹配 . 字符。
// 匹配 / 字符。
// 匹配 / 字符。
/[ 匹配 [ 字符。
表示位置的符号
元字符 说明
$ 匹配行尾
^ 匹配行首
/< 匹配单词词首
/> 匹配单词词尾
替换变量
在正规表达式中使用 /( 和 /) 符号括起正规表达式,即可在后面使用/1、/2等变量来访问 /( 和 /) 中的内容。
懒惰模式
/{-n,m} 与/{n,m}一样,尽可能少次数地重复
/{-} 匹配它前面的项一次或0次, 尽可能地少
/| "或"操作符
/& 并列
函数式
:s/替换字符串//=函数式
在函数式中可以使用 submatch(1)、submatch(2) 等来引用 /1、/2 等的内容,而submatch(0)可以引用匹配的整个内容。
与Perl正则表达式的区别 ?
元字符的区别
Vim语法 Perl语法 含义
/+ + 1-任意个
/? ? 0-1个
/{n,m} {n,m} n-m个
/(和/) (和) 分组
vim正则表达式匹配中文字符:
[\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):
[^\x00-\xff]
m
帅~
学习
删除所有空行的正则表达式 ^$
vim有恼人的换行符 ^M
可以让Vim能自动识别UNIX格式和MS-DOS格式:
文本中既有unix的换行符,又有dos的换行符, 那么vim会认为你打开的是unix的,所以, 那些dos的换行符就会出现恼人的^M。办法是:
1)若你的vim版本大于7.1,并想用dos显示和保存,如下语句:
:e ++ff=dos
2)若你的vim版本小于等于7.1,又想把文章按照dos格式显示和保存,如下语句:
:set ff=dos
:%s/\r\+$//e
3)若你的vim版本小于等于7.1,又想把文章按照unix格式显示和保存,如下语句:
:set ff=unix
:%s/\r\+$//e
另外,显示dos换行符命令:
set list
显示换行符
set onlist
不显示换行符
:set fileformats=unix,dos
让dd命令(删除一行)不保存在剪贴板中,例如:删除空行就不会覆盖以前的复制内容。
:map <C-d> "_dd
按C-d会把删除的内容放到寄存器'_'里(默认都放到'x'里),这个寄存器不保存东西,相当于直接删除
ctrl d 是向下翻页,自己可设置不同的快捷键
发现现在win7的环境下面,omnicpp的提示信息乱码了.有其它方法????
后来发现是vim对文件的编码检测不太完整,
现在通过装fencview.vim插件, 指定iconv.dll,及装tellenc.exe来解决了...
在windows下,用git bash打开 vi file 貌似中文还是乱码呢
set ambiwidth=double 中文符号
> 我来回应