分页: 1 / 1

求助,用VIM的":e XXX"命令打开多个文件,关闭倒数第二个后语法高亮失效,如何解决?

发表于 : 2011-09-27 22:49
zwdnet
就是首先打开一个文件,比如a.cpp
"vim a.cpp"
然后在 vim里用":e b.cpp"打开b.cpp文件,这个时侯vim里就同时有两个文件了,再用":e c.cpp"命令打开第三个。
这个时侯如果我用":bd"命令关闭了c.cpp后,剩下两个文件的高亮显示正常,再次用":bd"关闭b.cpp,此时vim里就剩a.cpp一个文件了,但a.cpp的高亮显示完全消失了,整个文件都是一个颜色。如果我用":syntax on",a.cpp的高亮显示又恢复了。但每次都这样很烦,我想设置每次运行":bd"命令后让vim自动执行":syntax on"这个命令,参考这里http://vimcdoc.sourceforge.net/doc/autocmd.html,用

代码: 全选

:autocmd BufHidden syntax on
或者

代码: 全选

:autocmd BufDelete syntax on
都没有用,问题依旧。请问要用什么命令,使vim关闭多个文件的一个的时侯自动执行 ":syntax on"命令?谢谢!

Re: 求助,用VIM的":e XXX"命令打开多个文件,关闭倒数第二个后语法高亮失效,如何解决?

发表于 : 2011-09-27 23:30
lilydjwg
没遇到过,关注。

Re: 求助,用VIM的":e XXX"命令打开多个文件,关闭倒数第二个后语法高亮失效,如何解决?

发表于 : 2011-09-27 23:48
fanhe
你肯定装了什么乱七八糟的插件
检查自动命令

Re: 求助,用VIM的":e XXX"命令打开多个文件,关闭倒数第二个后语法高亮失效,如何解决?

发表于 : 2011-09-28 0:24
surmise
为什么不用tabnew阿?

Re: 求助,用VIM的":e XXX"命令打开多个文件,关闭倒数第二个后语法高亮失效,如何解决?

发表于 : 2011-09-28 23:58
zwdnet
fanhe 写了:你肯定装了什么乱七八糟的插件
检查自动命令
没错,我照网上的把VIM打造成IDE的文章弄的,这是我的vimrc文件。

代码: 全选

runtime! debian.vim
"设置编码
set encoding=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
set fileencodings=utf-8,ucs-bom,chinese

"语言设置
set langmenu=zh_CN.UTF-8

"设置语法高亮
syntax enable
syntax on

"设置配色方案
colorscheme torte

"可以在buffer的任何地方使用鼠标
set mouse=a
set selection=exclusive
set selectmode=mouse,key

"高亮显示匹配的括号
set showmatch

"去掉vi一致性
set nocompatible

"设置缩进
set tabstop=8
set softtabstop=8
set shiftwidth=8
set autoindent
set cindent
if &term=="xterm"
	set t_Co=8
	set t_Sb=^[[4%dm
	set t_Sf=^[[3%dm
endif

"打开文件类型自动检测功能
filetype on

"设置taglist
let Tlist_Show_One_File=0   "显示多个文件的tags
let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow=1 "在taglist是最后一个窗口时退出vim
let Tlist_Use_SingleClick=1 "单击时跳转
let Tlist_GainFocus_On_ToggleOpen=1 "打开taglist时获得输入焦点
let Tlist_Process_File_Always=1 "不管taglist窗口是否打开,始终解析文件中的tag

"设置WinManager插件
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>
map <silent> <F9> :WMToggle<cr> "将F9绑定至WinManager,即打开WimManager

"设置CSCOPE
set cscopequickfix=s-,c-,d-,i-,t-,e- "设定是否使用quickfix窗口显示cscope结果

"设置Grep插件
nnoremap <silent> <F3> :Grep<CR>

"设置一键编译
map <F6> :make<CR>

"设置自动补全
"filetype plugin indent on   "打开文件类型检测
"set completeopt=longest,menu "关掉智能补全时的预览窗口

"启动vim时如果存在tags则自动加载
if exists("tags")
	set tags=./tags
endif

"设置按F12就更新tags的方法
map <F12> :call Do_CsTag()<CR>
nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>
function Do_CsTag()
	    let dir = getcwd()
	    if filereadable("tags")
		    if(g:iswindows==1)
	            let tagsdeleted=delete(dir."\\"."tags")
			else
				let tagsdeleted=delete("./"."tags")
			endif
		    if(tagsdeleted!=0)
	            echohl WarningMsg | echo "Fail to do tags! I cannot delete the tags" | echohl None
				return
			endif
		endif
		
		if has("cscope")
			silent! execute "cs kill -1"
		endif
		
	    if filereadable("cscope.files")
			if(g:iswindows==1)
	            let csfilesdeleted=delete(dir."\\"."cscope.files")
			else
				let csfilesdeleted=delete("./"."cscope.files")
			endif
			if(csfilesdeleted!=0)
	            echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.files" | echohl None
				return
			endif
		endif
										    
	    if filereadable("cscope.out")
			if(g:iswindows==1)
	            let csoutdeleted=delete(dir."\\"."cscope.out")
			else
				let csoutdeleted=delete("./"."cscope.out")
			endif
			if(csoutdeleted!=0)
	            echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl None
				return
			endif
		endif
										    
		if(executable('ctags'))
			"silent! execute "!ctags -R --c-types=+p --fields=+S *"
			silent! execute "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ."
		endif
			
	    if(executable('cscope') && has("cscope") )
			if(g:iswindows!=1)
	            silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"
			else
				silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
		    endif
			silent! execute "!cscope -b"
			execute "normal :"
															        
			if filereadable("cscope.out")
				execute "cs add cscope.out"
			endif
		endif
endfunction

"设置默认shell
set shell=bash

"设置VIM记录的历史数
set history=400

"设置当文件被外部改变的时侯自动读入文件
if exists("&autoread")
	set autoread
endif

"设置ambiwidth
set ambiwidth=double

"设置文件类型
set ffs=unix,dos,mac

"设置增量搜索模式
set incsearch

"设置静音模式
set noerrorbells
set novisualbell
set t_vb=

"不要备份文件
set nobackup
set nowb

"下面的试过了,无效,所以注释掉。
"关闭缓冲区时自动执行的命令
"autocmd BufDelete syntax on


Re: 求助,用VIM的":e XXX"命令打开多个文件,关闭倒数第二个后语法高亮失效,如何解决?

发表于 : 2011-09-29 0:12
zwdnet
surmise 写了:为什么不用tabnew阿?
谢谢,刚刚搜了,还是用不惯啊,打开两个文件,用":tabclose"关了一个,窗口顶部还是有2个文件的MiniBuf提示。

Re: 求助,用VIM的":e XXX"命令打开多个文件,关闭倒数第二个后语法高亮失效,如何解决?

发表于 : 2012-07-17 1:32
用电器
zwdnet 写了:
surmise 写了:为什么不用tabnew阿?
谢谢,刚刚搜了,还是用不惯啊,打开两个文件,用":tabclose"关了一个,窗口顶部还是有2个文件的MiniBuf提示。
应该是minibufexpl.vim插件的bug。我这里出现了完全相同的问题,尝试移除该插件后即告解决。
或者你可以看一下该插件的代码?我是没时间弄啦,而且也不懂 :em06