LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 820|回复: 4

用 VIM 编辑文件时的小技巧

[复制链接]
发表于 2007-5-7 16:11:37 | 显示全部楼层 |阅读模式
/***************************************************
                       转贴请保留这一段。尊重自己,尊重他人!
                          来自 http://cobalt65.cublog.cn
***************************************************/
在使用VIM 的时候,因为打开的文件编码不同,有时会出现乱码。其实在VIM7.0 中已经考虑到这个问题了。只要在 ~/.vimrc 中进行如下设置就可以打开任何文件,而不会再有乱码问题。Debian4.0 还可以放在/etc/vim/vimrc.local 中,避免自己目录中的点文件太多。
set encoding=utf8
set fileencodings=utf8,gbk

下面对以上设置进行简单地解释,更详细的请用 :help encoding 自己看。
第一句设置VIM 中使用的编码方式。它将影响保存在缓存、寄存器、表达式以及viminfo 文件中文本。总之,这会影响所有VIM 能处理的文本。需要注意的是,如果在编辑时临时改变这个参数,对VIM 中当前存在的文本没什么影响,但可能会使一些非ASC 码出现问题。通常,保持起始时的默认值,或者在启动VIM 时就设定好它。如本例中的做法。对于GTK+2 的程序,强烈建议使用utf-8 编码。设置时默认utf8 是utf-8 的别名。
第二句设置文件编码。这个fileencodings 不同于上面的encoding。它只在读写文件时才会发挥作用。看了上面的语句,你可能已经猜到,它其实是一个可选的字符编码列表。当读写文件时,VIM 会优先用utf8 进行尝试,如果不行的话就转到第二条,在这里就是gbk。如果以上两条都不行,也就是说这个文件中的编码比较混乱,即有utf8 和gbk 都无法处理的字符,VIM 就会自动把fileencodings 这条语句清空,即set fileencodings= ,同时它会强制使用跟encoding 一样的编码读写文件。不过,在绝大多数情况下,不可能有这样的文件
;-) 呵呵。
其实VIM 中还有一个类似的参数叫fileencoding,它才是真正在读写文件时起作用的参数,但只需设定了fileencodings 就可以不用管它了。注意有无“s”!有关这两者的密切关系,请自行去看 help。
还有最后一点要说明的是:当以上转换发生在utf8或其它utf变体之间时,没任何问题。但当encoding 不是utf8 时,可能会导致一点非ACS 码的问题。如果想克服这个问题的话,请使用++bad=keep,如在保存文件时用 :w ++bad=keep,但这么做有可能使问题更严重。
PS:++bad 参数我没用过,因为如我所讲,绝大多数情况下不可能有这样的文件。

如果你不想按以上所说在系统中设定这两个参数,只想能正常读写不同编码的文件,请不
要担心。VIM 还有一个很好的临时性的方法。像这样 :edit ++enc=big5 filename,就可以
big5 编码方式打开一个文件了。保存时用 :w ++enc=big5 filename。big5 可以换成你机器上有的locale 中的任意一种。前提是你的机器能正常显示。祝用得开心!
发表于 2007-5-9 08:59:02 | 显示全部楼层
$ cat ~/.vimrc
  1. " 自动补全命令时候使用菜单式匹配列表
  2. set wildmenu
  3. " 允许退格键删除
  4. set backspace=2
  5. " 启用鼠标
  6. set mouse=a
  7. " 文件类型
  8. filetype on
  9. filetype plugin on
  10. filetype indent on
  11. " 设置编码自动识别, 中文引号显示
  12. "set fileencodings=utf-8,cp936,big5,euc-jp,euc-kr,latin1,ucs-bom
  13. set fileencodings=utf-8,gbk
  14. set ambiwidth=double
  15. " 移动长行
  16. nnoremap <Down> gj
  17. nnoremap <Up> gk
  18. " 高亮
  19. syntax on
  20. " 设置高亮搜索
  21. set hlsearch
  22. " 输入字符串就显示匹配点
  23. set incsearch
  24. " 输入的命令显示出来,看的清楚些。
  25. set showcmd
  26. " 打开当前目录文件列表
  27. map <F3> :e .<CR>
  28. " Taglist
  29. let Tlist_File_Fold_Auto_Close=1
  30. set updatetime=1000
  31. map <F4> :Tlist<CR>
  32. " 按 F8 智能补全
  33. inoremap <F8> <C-x><C-o>
  34. " vim 自动补全 Python 代码
  35. " 来自http://vim.sourceforge.net/scripts/script.php?script_id=850
  36. autocmd FileType python set complete+=k~/.vim/tools/pydiction
  37. " 自动使用新文件模板
  38. autocmd BufNewFile *.py 0r ~/.vim/template/simple.py
  39. "Format the statusline
  40. "Nice statusbar
  41. set laststatus=2
  42. set statusline=
  43. set statusline+=%2*%-3.3n%0*\ " buffer number
  44. set statusline+=%f\ " file name
  45. set statusline+=%h%1*%m%r%w%0* " flag
  46. set statusline+=[
  47. if v:version >= 600
  48. set statusline+=%{strlen(&ft)?&ft:'none'}, " filetype
  49. set statusline+=%{&encoding}, " encoding
  50. endif
  51. set statusline+=%{&fileformat}] " file format
  52. if filereadable(expand("$VIM/vimfiles/plugin/vimbuddy.vim"))
  53. set statusline+=\ %{VimBuddy()} " vim buddy
  54. endif
  55. set statusline+=%= " right align
  56. "set statusline+=%2*0x%-8B\ " current char
  57. set statusline+=0x%-8B\ " current char
  58. set statusline+=%-14.(%l,%c%V%)\ %<%P " offset
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-5-9 10:05:19 | 显示全部楼层
Post by jhuangjiahua
$ cat ~/.vimrc

  1. " Taglist
  2. let Tlist_File_Fold_Auto_Close=1
复制代码

这个不错,谢谢华华。
回复 支持 反对

使用道具 举报

发表于 2007-5-9 11:14:32 | 显示全部楼层
debian
apt-get install vim-scripts
装了vim-scripts之后有taglist,但是并没有起作用,
后来发现是没有把这个路径加入到runtime路径中,不知道是不是官方打包的问题
不知道大家有没有遇到这个问题,我的taglist需要手动添加不然没法用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-10 08:57:03 | 显示全部楼层
其实我用 Debian4.0 的时候大多数内容都已经在 runtime 和系统配置中自动安装好了。用不着像二楼版主那么麻烦的。不过其中一些内容还是要自己写的 :-)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表