LinuxSir.cn,穿越时空的Linuxsir!

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

VIM的配置文件求助

[复制链接]
发表于 2009-4-15 14:25:52 | 显示全部楼层 |阅读模式
我在用Win XP系统时就在使用VIM了,自己也整出了一个适合自己的配置文件,
现在在使用Archlinux当然就把Win下的配置文件复制过来,放在~/.vimrc里,但发现我运行VIM时提示了很多错误,真让人不明白了,难道Win下的VIM与Linux下的配置有很大的不同吗?

以下是错误信息:

  1. [lwkyy@Asins ~]$ vim
  2. 处理 /home/lwkyy/.vimrc 时发生错误:
  3. 第    1 行:
  4. E488: 多余的尾部字符: nocp^M
  5. 第    2 行:
  6. E474: 无效的参数: encoding=chinese^M
  7. 第    4 行:
  8. E15: 无效的表达式: has("win32")^M
  9. 第  267 行:
  10. E171: 缺少 :endif
  11. 请按 ENTER 或其它命令继续
复制代码


以下是我的配置文件的内容:

  1. set nocompatible
  2. set encoding=chinese
  3. set fileencodings=utf-8,chinese
  4. if has("win32")
  5.     set fileencoding=chinese
  6. else
  7.     set fileencoding=utf-8
  8. endif

  9. let &termencoding=&encoding

  10. "设置中文菜单 .UTF-8
  11. lan mes zh_CN
  12. set langmenu=zh_CN
  13. source $VIMRUNTIME/delmenu.vim
  14. source $VIMRUNTIME/menu.vim

  15. "设置中文帮助文档
  16. if version >= 603
  17.     set helplang=cn
  18. endif
  19. source $VIMRUNTIME/vimrc_example.vim
  20. ""source $VIMRUNTIME/mswin.vim
  21. ""behave mswin

  22. set diffexpr=MyDiff()
  23. function MyDiff()
  24.   let opt = '-a --binary '
  25.   if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  26.   if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  27.   let arg1 = v:fname_in
  28.   if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  29.   let arg2 = v:fname_new
  30.   if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  31.   let arg3 = v:fname_out
  32.   if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  33.   let eq = ''
  34.   if $VIMRUNTIME =~ ' '
  35.     if &sh =~ '\<cmd'
  36.       let cmd = '""' . $VIMRUNTIME . '\diff"'
  37.       let eq = '"'
  38.     else
  39.       let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
  40.     endif
  41.   else
  42.     let cmd = $VIMRUNTIME . '\diff'
  43.   endif
  44.   silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
  45. endfunction



  46. set number                  " 显示行号
  47. set ruler                   " 打开状态栏标尺
  48. set shiftwidth=4            " 设定 << 和 >> 命令移动时的宽度为 4
  49. set softtabstop=4           " 使得按退格键时可以一次删掉 4 个空格
  50. set tabstop=4               " 设定 tab 长度为 4
  51. set nobackup                " 覆盖文件时不备份
  52. syntax on                   " 自动语法高亮
  53. set autochdir               " 自动切换当前目录为当前文件所在的目录
  54. set autoindent cindent cinoptions=g0
  55.                             " 打开自动缩进和 C 语言风格的缩进模式,
  56.                             " 定制 C 语言缩进风格
  57. set backspace=indent,eol,start
  58.                             " 不设定的话在插入状态无法用退格键和 Delete
  59.                             " 键删除回车符
  60. set whichwrap=b,s,<,>,[,]   " 设定退格键、空格键以及左右方向键在行首行尾时的
  61.                             " 行为,不影响 h 和 l 键
  62. set backupcopy=yes          " 设置备份时的行为为覆盖
  63. if v:version >= 700
  64.     set completeopt=menu,longest,preview
  65.                             " 自动补全(ctrl-p)时的一些选项:
  66.                             " 多于一项时显示菜单,最长选择,
  67.                             " 显示当前选择的额外信息
  68. endif
  69. set wildmenu                " 启动具有菜单项提示的命令行自动完成
  70. set ignorecase smartcase    " 搜索时忽略大小写,但在有一个或以上大写字母时
  71.                             " 仍保持对大小写敏感
  72. set incsearch               " 输入搜索内容时就显示搜索结果
  73. set hlsearch                " 搜索时高亮显示被找到的文本
  74. set laststatus=2            " 显示状态栏 (默认值为 1, 无法显示状态栏)
  75. set cmdheight=1             " 设定命令行的行数为 1
  76. function! CurDir()
  77.     let curdir = substitute(getcwd(), '/Users/amir/', "~/", "g")
  78.     return curdir
  79. endfunction
  80. set statusline=\ %F%m%r%h\ %w\ \ CWD:\ %r%{CurDir()}%h\ \ \ Line:\ %l/%L:%c
  81.                             " 设置在状态行显示的信息如下:
  82.                             " %F    当前文件名
  83.                             " %m    当前文件修改状态
  84.                             " %r    当前文件是否只读
  85.                             " %Y    当前文件类型
  86.                             " %{&fileformat}
  87.                             "       当前文件编码
  88.                             " %b    当前光标处字符的 ASCII 码值
  89.                             " %B    当前光标处字符的十六进制值
  90.                             " %l    当前光标行号
  91.                             " %c    当前光标列号
  92.                             " %V    当前光标虚拟列号 (根据字符所占字节数计算)
  93.                             " %p    当前行占总行数的百分比
  94.                             " %%    百分号
  95.                             " %L    当前文件总行数
  96. set textwidth=78                        " 设置一行显示的字数
  97. colorscheme murphy                        " 设定背景为夜间模式
  98. set nowrapscan


  99. "Highlight current
  100. if has("gui_running")
  101.   set cursorline
  102.   hi cursorline guibg=#333333
  103.   hi CursorColumn guibg=#333333
  104. endif

  105. "Omni menu colors
  106. hi Pmenu guibg=#333333
  107. hi PmenuSel guibg=#555555 guifg=#ffffff

  108. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  109. " => VIM userinterface
  110. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  111. "Set 7 lines to the curors - when moving vertical..
  112. set so=7

  113. "Do not redraw, when running macros.. lazyredraw
  114. set lz

  115. "Change buffer - without saving
  116. set hid

  117. "Set magic on
  118. set magic

  119. "No sound on errors.
  120. set noerrorbells
  121. set novisualbell
  122. set t_vb=

  123. "show matching bracets
  124. set showmatch

  125. "How many tenths of a second to blink
  126. set mat=2

  127. " Tag List设置 -- 显示函数列表
  128. nnoremap <silent> <F9> :TlistToggle<CR>
  129. let Tlist_Use_SingleClick=1
  130. let Tlist_File_Fold_Auto_Close=1


  131. """"""""""""""""""""""""""""""
  132. " winManager setting
  133. """"""""""""""""""""""""""""""
  134. let g:winManagerWindowLayout = "BufExplorer,FileExplorer|TagList"
  135. let g:winManagerWidth = 30
  136. let g:defaultExplorer = 0
  137. nmap <C-W><C-F> :FirstExplorerWindow<cr>
  138. nmap <C-W><C-B> :BottomExplorerWindow<cr>
  139. nmap <silent> <F8> :WMToggle<cr>

  140. """"""""""""""""""""""""""""""
  141. " netrw setting
  142. """"""""""""""""""""""""""""""
  143. let g:netrw_winsize = 30
  144. nmap <silent> <leader>fe :Sexplore!<cr>

  145. let Tlist_File_Fold_Auto_Close=1



  146. " let g:template_load = 1
  147. " let g:template_tags_replacing = 1
  148. " let g:T_AUTHOR = "Asins"
  149. " let g:T_AUTHOR_EMAIL = "asinsimple@gmail.com"
  150. " let g:T_AUTHOR_WEBSITE = "http://www.studynote.cn"
  151. " let g:T_DATE_FORMAT = "%c"

  152. "自动实例括号
  153. inoremap ( ()<ESC>i
  154. inoremap ) <c-r>=ClosePair(')')<CR>
  155. inoremap { {}<ESC>i
  156. inoremap } <c-r>=ClosePair('}')<CR>
  157. inoremap [ []<ESC>i
  158. inoremap ] <c-r>=ClosePair(']')<CR>
  159. inoremap < <><ESC>i
  160. inoremap > <c-r>=ClosePair('>')<CR>
  161. " inoremap ' ''<ESC>i
  162. " inoremap " ""<ESC>i
  163. function ClosePair(char)
  164.         if getline('.')[col('.') - 1] == a:char
  165.                 return "\<Right>"
  166.         else
  167.                 return a:char
  168.         endif
  169. endf


  170. " 保存文件,用习惯了Ctrl+S了
  171. " nmap <C-s> <esc>:w<CR>
  172. " imap <C-s> <esc>:w<CR>
  173. noremap <C-S> :update<CR>
  174. vnoremap <C-S> <C-C>:update<CR>
  175. inoremap <C-S> <C-O>:update<CR>


  176. set lines=40
  177. set columns=100

  178. "菜单栏、工具栏显示与隐藏的切换
  179. set guioptions-=T
  180. set guioptions-=m
  181. map <silent> <F4> :if &guioptions =~# 'T' <Bar>
  182.         \set guioptions-=T <Bar>
  183.         \set guioptions-=m <bar>
  184.     \else <Bar>
  185.         \set guioptions+=T <Bar>
  186.         \set guioptions+=m <Bar>
  187.     \endif<CR>


  188. " Tabs 的快捷键设置


  189. set guifont=YaHei\ Console\ Hybrid\ 12
  190. set fileencodings=utf-8,gb2312,utf-16,big5
  191. set textwidth=200


  192. let g:WC_min_len=3 " 当输入到第3个字母时才自动补全,自己可以改变之.
  193. autocmd BufEnter * call DoWordComplete() " 每个buffer自动启用自动补全filetype plugin o

  194. " Python 文件的一般设置,比如不要 tab 等
  195. autocmd FileType python setlocal et | setlocal sta | setlocal sw=4

  196.        
  197. " 日历插件设置
  198. " let g:calendar_diary = /calendar
  199. " map ca :Calendar<cr>


  200. " 让 gvim 支持 Alt+n 来切换标签页
  201. function! BufPos_ActivateBuffer(num)
  202.     let l:count = 1
  203.     for i in range(1, bufnr("$"))
  204.         if buflisted(i) && getbufvar(i, "&modifiable")
  205.             if l:count == a:num
  206.                 exe "buffer " . i
  207.                 return
  208.             endif
  209.             let l:count = l:count + 1
  210.         endif
  211.     endfor
  212.     echo "No buffer!"
  213. endfunction
  214. function! BufPos_Initialize()
  215.     for i in range(1, 9)
  216.         exe "map <M-" . i . "> :call BufPos_ActivateBuffer(" . i . ")<CR>"
  217.     endfor
  218.     exe "map <M-0> :call BufPos_ActivateBuffer(10)<CR>"
  219. endfunction
  220. autocmd VimEnter * call BufPos_Initialize()

  221. " 按F11键让VIM全屏
  222. if has('gui_running') && has("win32")
  223.         map <F11> <Esc>:call libcallnr("gvimfullscreen.dll", "ToggleFullScreen", 0)<CR>
  224. endif
复制代码


不知为什么提示说条一行就有错,真不知是哪里有错了,请知道的朋友提点一下吧!先谢谢了!
发表于 2009-4-15 14:31:58 | 显示全部楼层
第    1 行:
E488: 多余的尾部字符: nocp^M
第    2 行:
E474: 无效的参数: encoding=chinese^M
第    4 行:
E15: 无效的表达式: has("win32")^M
第  267 行:

都明显告诉你是什么出错了...还问.
将配置文件转成unix格式看看
回复 支持 反对

使用道具 举报

发表于 2009-4-15 14:42:36 | 显示全部楼层
当然就把Win下的配置文件复制过来
Windows 真是让人又爱又恨啊,我想它一定是故意不支持 Unix-like 的。

用 dos2unix 命令吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-15 14:48:21 | 显示全部楼层
好的,你是说这个文件的换行符的问题吗?
archlinux下没有dos2unix命令啊,官网的源里也没有啊,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-15 15:29:24 | 显示全部楼层
还是没有解决的这问题啊,dos2unix,我装好了,使用命令
dos2unix ~/.vimrc ~/.vimrc
这样再次运行时错误是没有了,但进入VIM后的中文提示全都变成乱码了,同时这个配置文件里的所有中文也都成了乱码,

Update:通过使用命令dos2unix -U ~/.vimrc ~/.vimrc搞定了(英文不好没养成看帮助文档的习惯,不好意思!),配置文件没有问题,里面的中文正常,开启VIM时也没有错误提示
但进入VIM后提示为乱码的问题没有解决,这应该是我的配置文件的问题,因为在没有使用这个文档之前VIM者已经是中文提示了。

Update:把我的配置中的
  1. set encoding=chinese
  2. set fileencodings=utf-8,chinese
  3. if has("win32")
  4.     set fileencoding=chinese
  5. else
  6.     set fileencoding=utf-8
  7. endif
复制代码
这几行注释掉或者删掉就OK了,不知是什么原因。还得去装个BufEnter,好像没有这人插件
回复 支持 反对

使用道具 举报

发表于 2009-4-15 15:48:03 | 显示全部楼层
vim本身不就有转换功能?
用vim打开dos格式文本,会自动识别为[dos]格式
然后设置成unix格式,保存
:set fileformat=unix
:wq

中文乱码是编码问题
我是Debian,语言zh_CN.UTF-8
在.vimrc里这样设置文件编码检测,可以转换各种中文编码
fileencodings=utf-8,gbk,big5,gb18030,utf-16
:set 可以看到当前使用的编码fileencoding
要以新的编码保存文件,像这样
:set fileencoding=utf-8
:wq


vim提示乱码?
这是encoding=chinese的错吧
我试了下
:set encoding=chinese
vim提示就乱码
:set encoding=utf-8
就正常
回复 支持 反对

使用道具 举报

发表于 2009-4-15 15:50:53 | 显示全部楼层
应该用iconv 转换成utf8的格式。关于^M,在vim里用%s/\r//就好了。
回复 支持 反对

使用道具 举报

发表于 2009-4-16 10:10:22 | 显示全部楼层
Post by ginkgo;1974739
应该用iconv 转换成utf8的格式。关于^M,在vim里用%s/\r//就好了。


^M 问题一般确实用 vim 就可以解决,不过一般 .vimrc 出问题可能导致 vim 根本进不去,所以 .vimrc 文件本身的问题还是直接用外部命令搞定简单。
回复 支持 反对

使用道具 举报

发表于 2009-4-16 21:01:23 | 显示全部楼层
Post by poet;1975128
^M 问题一般确实用 vim 就可以解决,不过一般 .vimrc 出问题可能导致 vim 根本进不去,所以 .vimrc 文件本身的问题还是直接用外部命令搞定简单。


一般,vimrc文件出问题不可能导致vim根本进不去...
回复 支持 反对

使用道具 举报

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

本版积分规则

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