vim IDE平台-打造属于自己的配置

一、前言

目前工作环境基本以Linux为主,自然用到VIM也很多,很早就对如何提高VIM的使用效率有所研究,限于时间关系,也没做个系统记录和资料积累,时间久了又容易忘,好久没写文档了,算是对自己一个交代。本文所涉及的配置和插件在附件中有下载。

二、环境

开篇之前,有必要交代一下系统环境和常用软件版本。

操作系统: centos 6.2,2.6.32-431.el6.i686

git 版本: 3.2.29

yum版本: 1.8

vim版本 : 7.2.411

三、vim配置

3.1 基本配置

包括一些基本的语法,缩进,代码折叠,高亮模式,窗口分割等,具体如下:

syn on              " 打开语法高亮
set expandtab " 转义tab,当写python代码时很有用
set tabstop= " 设置tab键的宽度
set softtabstop=
set backspace= " 设置退格键可用
set smartindent " 智能对齐方式
set shiftwidth= " 换行时行间交错使用4个空格
set autoindent " 自动对齐
set cindent "设置C/C++缩进方式
"set ai! " 设置自动缩进 set nu! " 显示行号
set linebreak " 整词换行
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
set autochdir " 自动设置目录为正在编辑的文件所在的目录
set hidden " 没有保存的缓冲区可以自动被隐藏 set scrolloff= "-------------------------------------------------------------------------------- " 查找/替换相关的设置 "-------------------------------------------------------------------------------- set hlsearch " 高亮显示搜索结果 set incsearch " 查询时非常方便,如要查找book单词,当输入到/b时,会自动找到 " 第一个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的 " 单词,依次类推,进行查找时,使用此设置会快速找到答案,当你 " 找要匹配的单词时,别忘记回车 set gdefault " 替换时所有的行内匹配都被替换,而不是只有第一个 set showmatch " 设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号 colorscheme desert "设置颜色模式 "-------------------------------------------------------------------------------- " 代码折叠 "-------------------------------------------------------------------------------- set foldmethod=syntax set foldlevel= " Don't autofold anything (but I can still fold manually) "set foldopen-=search " don't open folds when you search into them "set foldopen-=undo " don't open folds when you undo stuff "set foldcolumn=4 " 窗口操作的快捷键 "--------------------------------------------------------------------------------
" 垂直分割当前窗口
nmap wv <C-w>v
" 关闭当前窗口
nmap wc <C-w>c
" 水平分割当前窗口
nmap ws <C-w>s

3.2 插件管理

前期基本对VIM插件未进行管理,导致所有的插件都集中在.vim目录下,这对于删除一个插件来说还是比较麻烦的,目前管理vim插件的工具有几个,比较出名的如pathogen和vundle这两类,这两个插件各有优势,应用领域有所不同,关键区别如下:

pathogen: 解决多插件文件分散问题, 集中管理插件目录,增加,删除插件都很方便,

vundle: 解决自动搜索和下载插件问题, 方便插件的安装和更新,使插件能够时刻保持与线上版本一致

3.2.1 pathogen的安装与配置

1) 下载:git clone https://github.com/tpope/vim-pathogen

2)  在.vim目录下新建 autoload和bundle目录

3) 将下载的pathogen包中的pathogen.vim拷贝到~/.vim/autoload

4)  配置pathogen: 在~/.vimrc中配置如下一句:

call pathogen#infect()

注意:此句一定要配置再filetype plugin on 之前

5) 作用:配好后,pathogen会自动加载位于bundle目录下的所有插件

3.2.2 vundle配置

1) 下载:git clone https://github.com/gmarik/vundle.git

2) 安装:将其复制到~/.vim/bundle目录

3) 配置:

    set nocompatible               " be iMproved
filetype off " required! /** 从这行开始,vimrc配置 **/ set rtp+=~/.vim/bundle/vundle/
call vundle#rc() " let Vundle manage Vundle
" required!
Bundle 'gmarik/vundle' " Github上非vim-scripts仓库插件格式(github用户名/插件名)
Bundle 'tpope/vim-fugitive'
Bundle 'tpope/vim-rails.git' " Github vim-scripts仓库插件格式
Bundle 'python.vim' " 非上述两种模式
Bundle 'git://git.wincent.com/command-t.git'
" ... filetype plugin indent on " 必须有这句

四 、其它插件安装

4.1 Taglist

作用:显示文件变量、宏、函数等tag,  以tags文件为基础,结合ctags软件使用

下载:http://sourceforge.net/projects/vim-taglist/files/vim-taglist/

安装:直接拷贝vim-taglist目录到~/.vim/bundle

配置:

"--------------------------------------------------------------------------------

" TagList :Tlist

"--------------------------------------------------------------------------------

let Tlist_Show_One_File=

let Tlist_Exit_OnlyWindow = 

"let Tlist_Use_Right_Window=1

效果截图:

4.2 winmanager

作用:规划布局各插件在vim中的显示,使其显示分明

下载:http://www.vim.org/scripts/script.php?script_id=95

安装:解压目录放到~/.vim/bundle下

配置:

"--------------------------------------------------------------------------------

" WinManager :WMToggle

"--------------------------------------------------------------------------------

let g:winManagerWindowLayout='FileExplorer|TagList'

"是nomal模式的命令,不是Ex模式的

nmap wm :WMToggle<cr>  "快捷键

使用: 直接在vim命令行模式输入WMToggle即可显示winmanager布局,再次输入WMToggle即可关闭布局

效果图:

4.3 MiniBufExplorer

作用:显示打开的文件标签栏,即类似于tab效果,方便文件间切换

下载: http://www.vim.org/scripts/script.php?script_id=159

安装:直接将下载文件解压放至~/.vim/bundle

配置:

"--------------------------------------------------------------------------------

" MiniBufExp

"--------------------------------------------------------------------------------

let g:miniBufExplMapWindowNavArrows = 1  “按左右箭头切换文件标签,再按enter键即可打开选择的文件标签

let g:miniBufExplMapCTabSwitchBufs = 1   "按Tab键也可达到切换效果

使用: 当打开winmanger布局时,用ctrl+w+w命令进入FileExplorer窗口, 按上下选择键选择文件回车打开,即可再miniBufExplorer窗口显示打开的文件标签.

效果:如winmanager截图,最上面的小窗口所示,同时打开了3个文件

4.4 grep.vim

作用:类似于grep功能,查找关键字

下载: http://www.vim.org/scripts/script.php?script_id=311

安装: 解压目录至~/.vim/bundle

配置:

"直接按下<F3>键来查找光标所在的字符串

nnoremap <silent> <F3> :Rgrep<CR>

使用: 移动光标至关键字处,按F3,会在vim命令行处显示查找相关关键字的提示,按enter键进入查找,然后选择查找目录,默认是当前目录,按回车后会出现查找模式,默认为*,即只要包含此管键字的文件行都会被查找出来,要退出查找过程也很简单,按ESC键即可。

效果如下:如要查找about_pages关键字,鼠标移动到该处,会作相应的提示,最后一张是查找结果图

4.5 a.vim

作用:头文件和源文件快速切换,这对于C/C++项目来说还是很方便的

下载: http://www.vim.org/scripts/script.php?script_id=31

安装: 解压目录至 ~/.vim/bundle

配置:

nnoremap <silent> <F12> :A<CR>

使用: 按F12键则可在源文件和头文件之间切换

4.6 omnicppcomplete

作用: 智能C/C++库补全, 为了使用此控件,还要下载专门的C++源库文件,同时得先安装好ctags软件以便生成tags文件

下载:

#omnicomplete下载
http://www.vim.org/scripts/script.php?script_id=1520 #文件结构类似于
|--omnicppcomplete
|---after
|    |---ftplugin
|---autoload
|    |---omni
|    |   |---common
|    |   |---cpp
|---doc
#C++源库下载
http://www.vim.org/scripts/script.php?script_id=2358

安装:

1) 对于omnicppcomplete, 解压文件到~/.vim,  有after、autoload、doc三个目录, autoload下有omni子目录,注意使用bundle来管理时,如果将包解压在~/.vim/bundle下时会识别不到,omni补全将失效;

2) 对于源码,将其解压到指定目录,如/usr/local/cpp_src, 进入该目录,执行ctags命令生成tags文件,具体如下:

cd /usr/local/cpp_src
tar -jxvf cpp_src.tar.bz2
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . #不能简单的执行ctags -R, 需要带参数才能识别C++库
move tags cpp  #重命名,非必须为区别起见

配置:

set completeopt=longest,menu    " 关掉智能补全时的预览窗口

filetype plugin indent on       " 加了这句才可以用智能补全

let OmniCpp_MayCompleteDot =  " autocomplete with
let OmniCpp_MayCompleteArrow = " autocomplete with ->
let OmniCpp_MayCompleteScope = " autocomplete with ::
let OmniCpp_SelectFirstItem = " select first item (but don't insert)
let OmniCpp_NamespaceSearch = " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = " show function prototype in popup window
let OmniCpp_GlobalScopeSearch= " enable the global scope search
let OmniCpp_DisplayMode= " Class scope completion mode: always show all members
let OmniCpp_ShowScopeInAbbr= " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
"默认以std 命名空间为准, using namespace std
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]  
"加载CPP库tags文件
set tags+=/usr/local/cpp_src/cpp

使用效果如下图:

4.7 cscope

作用: 此插件作用相信用过的人谁用谁知道,windows下有SourceInsights, Linux 下也有Cscope来撑腰,通过它可以方便的查看函数定义及其函数调用关系

安装:http://cscope.sourceforge.net/,  下载源码包,编译安装,由于现在vim7.2已经集成有cscope,所以如果vim版本是7以上的话就不用安装了,同时为方便操作,cscope提供了大量的快捷键来操作以提高操作效率,快捷键映射需借助cscope_maps.vim插件,下载地址:在vim.org上有,可自行网上下载,下载后直接安装在~/.vim/bundle/cscope下

配置:

"--------------------------------------------------------------------------------

" cscope

"--------------------------------------------------------------------------------

cs add /home/src/cscope.out /home/src

:set cscopequickfix=s-,c-,d-,i-,t-,e-

:set cscopetag

" 按下面这种组合键有技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪

" 就回到nomal状态了

" <C-_>s的按法是先按"Ctrl+Shift+-",然后很快再按"s"

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<cr><cr> :cw<cr>  "查找C代码符号

nmap <C-_>g :cs find g <C-R>=expand("<cword>")<cr><cr> :cw<cr>  "查找本定义

nmap <C-_>c :cs find c <C-R>=expand("<cword>")<cr><cr> :cw<cr>   "查找调用本函数的函数

nmap <C-_>t :cs find t <C-R>=expand("<cword>")<cr><cr> :cw<cr>   "查找本字符串

nmap <C-_>e :cs find e <C-R>=expand("<cword>")<cr><cr> :cw<cr>    "查找本egrep模式

nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<cr><cr>    "查找本文件

nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<cr><cr> :cw<cr>  "查找包含本文件的文件

nmap <C-_>d :cs find d <C-R>=expand("<cword>")<cr><cr> :cw<cr>  " 查找本函数调用函数

使用:

1) 先生成cscope数据库文件,如在/home/src/下,执行 cscope -Rbq, 即可生成cscope.out文件

2)配置:然后可像上述配置一样将cscope.out文件加载到vimrc中,也可手动加载,执行: cs add cscope.out /home/src

3)快捷键: 将光标移至函数名称处,先按ctrl+下划线,再快速按相应字母即可实现相应的查找功能。

4.8 其它插件

还有一些其它插件,根据需求来安装,如markdown,python, emmet等,这些直接下载相应文件到bundle目录即可,markdown还需要一些配置,可参考附件vimrc文件

五、总结

终于总结完了,在用vim的过程中,遇到很多问题,虽然用了很久,但深知还有很多功能尚未用到,还有待挖掘,只能不断学习总结。

六、附件

6.1 vimrc

call pathogen#infect()
set expandtab
set tabstop= " 设置tab键的宽度
set softtabstop=
set shiftwidth=
set backspace= " 设置退格键可用 set nu! " 显示行号 set linebreak " 整词换行 set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去 set autochdir " 自动设置目录为正在编辑的文件所在的目录 set hidden " 没有保存的缓冲区可以自动被隐藏 set scrolloff= "-------------------------------------------------------------------------------- " 查找/替换相关的设置 "-------------------------------------------------------------------------------- set hlsearch " 高亮显示搜索结果 set incsearch " 查询时非常方便,如要查找book单词,当输入到/b时,会自动找到 " 第一个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的 " 单词,依次类推,进行查找时,使用此设置会快速找到答案,当你 " 找要匹配的单词时,别忘记回车 set gdefault " 替换时所有的行内匹配都被替换,而不是只有第一个 "-------------------------------------------------------------------------------- " 状态栏相关的设置 "-------------------------------------------------------------------------------- set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%] set laststatus= " always show the status line set ruler " 在编辑过程中,在右下角显示光标位置的状态行 "-------------------------------------------------------------------------------- " 编程相关的设置 "-------------------------------------------------------------------------------- set completeopt=longest,menu " 关掉智能补全时的预览窗口 filetype plugin indent on " 加了这句才可以用智能补全 let OmniCpp_MayCompleteDot = " autocomplete with
let OmniCpp_MayCompleteArrow = " autocomplete with ->
let OmniCpp_MayCompleteScope = " autocomplete with ::
let OmniCpp_SelectFirstItem = " select first item (but don't insert)
let OmniCpp_NamespaceSearch = " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = " show function prototype in popup window
let OmniCpp_GlobalScopeSearch= " enable the global scope search
let OmniCpp_DisplayMode= " Class scope completion mode: always show all members
let OmniCpp_ShowScopeInAbbr= " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"] "set tags=./tags
"set tags+=/usr/include/c++/tags
set tags+=/usr/local/cpp_src/cpp syn on " 打开语法高亮 set showmatch " 设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号 set smartindent " 智能对齐方式 set shiftwidth= " 换行时行间交错使用4个空格 set autoindent " 自动对齐 set cindent "设置C/C++缩进方式
"set ai! " 设置自动缩进 colorscheme desert "-------------------------------------------------------------------------------- " 代码折叠 "-------------------------------------------------------------------------------- set foldmethod=syntax set foldlevel= " Don't autofold anything (but I can still fold manually) "set foldopen-=search " don't open folds when you search into them "set foldopen-=undo " don't open folds when you undo stuff "set foldcolumn=4 " 窗口操作的快捷键 "--------------------------------------------------------------------------------
" 垂直分割当前窗口
nmap wv <C-w>v
" 关闭当前窗口
nmap wc <C-w>c
" 水平分割当前窗口
nmap ws <C-w>s "############################################################################### " The following is the Plugins' setting "############################################################################### "-------------------------------------------------------------------------------- " TagList :Tlist "-------------------------------------------------------------------------------- let Tlist_Show_One_File= let Tlist_Exit_OnlyWindow = "let Tlist_Use_Right_Window=1 "-------------------------------------------------------------------------------- " netrw 文件浏览器 :e <PATH> "-------------------------------------------------------------------------------- "let g:netrw_winsize = 30 " 浏览器宽度 "-------------------------------------------------------------------------------- " QuickFix "--------------------------------------------------------------------------------
" 切换到下一个结果
nmap <F6> :cn<cr>
" 切换到上一个结果
nmap <F7> :cp<cr> "-------------------------------------------------------------------------------- " WinManager :WMToggle "-------------------------------------------------------------------------------- let g:winManagerWindowLayout='FileExplorer|TagList' "是nomal模式的命令,不是Ex模式的 nmap wm :WMToggle<cr> "-------------------------------------------------------------------------------- " MiniBufExp "-------------------------------------------------------------------------------- let g:miniBufExplMapWindowNavArrows = let g:miniBufExplMapCTabSwitchBufs = "-------------------------------------------------------------------------------- " cscope "-------------------------------------------------------------------------------- cs add /home/src/cscope.out /home/src :set cscopequickfix=s-,c-,d-,i-,t-,e- :set cscopetag " 按下面这种组合键有技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪 " 就回到nomal状态了 " <C-_>s的按法是先按"Ctrl+Shift+-",然后很快再按"s" nmap <C-_>s :cs find s <C-R>=expand("<cword>")<cr><cr> :cw<cr> nmap <C-_>g :cs find g <C-R>=expand("<cword>")<cr><cr> :cw<cr> nmap <C-_>c :cs find c <C-R>=expand("<cword>")<cr><cr> :cw<cr> nmap <C-_>t :cs find t <C-R>=expand("<cword>")<cr><cr> :cw<cr> nmap <C-_>e :cs find e <C-R>=expand("<cword>")<cr><cr> :cw<cr> nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<cr><cr> nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<cr><cr> :cw<cr> nmap <C-_>d :cs find d <C-R>=expand("<cword>")<cr><cr> :cw<cr> "-------------------------------------------------------------------------------- " Grep "-------------------------------------------------------------------------------- "直接按下<F3>键来查找光标所在的字符串 nnoremap <silent> <F3> :Rgrep<CR> "-------------------------------------------------------------------------------- " A "-------------------------------------------------------------------------------- nnoremap <silent> <F12> :A<CR> " NERD_commenter "-------------------------------------------------------------------------------- let NERD_c_alt_style = " 将C语言的注释符号改为//, 默认是/**/ "nmap <F5> ,cc "-------------------------------------------------------------------------------- " SuperTab :SuperTabHelp "-------------------------------------------------------------------------------- let g:SuperTabRetainCompletionType = let g:SuperTabDefaultCompletionType = "<C-X><C-O>" "-------------------------------------------------------------------------------- " CVim :help csupport "-------------------------------------------------------------------------------- let g:C_Comments = "no" " 用C++的注释风格 let g:C_BraceOnNewLine = "no" " '{'是否独自一行 let g:C_AuthorName = "Wen Qiuliang" let g:C_Project="F9" let g:C_TypeOfH = "c" " *.h文件的文件类型是C还是C++ let g:user_emmet_settings = {
\ 'php' : {
\ 'extends' : 'html',
\ 'filters' : 'c',
\ },
\ 'xml' : {
\ 'extends' : 'html',
\ },
\ 'haml' : {
\ 'extends' : 'html',
\ },
\} " vim markdown config
au BufRead,BufNewFile *.{md,mdown,mkd,mkdn,markdown,mdwn} set filetype=mkd
let g:vim_markdown_folding_disabled=
let g:vim_markdown_frontmatter=

6.2  插件

本文所涉及的所有插件都上传在github中,地址如下:

https://git.oschina.net/ballwql/vim-plugin.git

vim IDE平台-打造属于自己的配置的更多相关文章

  1. 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明

    第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明 设置后台列表页面可以直接修改字段内容 在当前APP里的adminx.py文件里的 ...

  2. 第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置

    第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置 设置后台某个字段的排序规则 在当前APP里的adminx.py文件里的数据表管理器里设置 order ...

  3. Vim 神器的打造方式

    Vim 神器的打造方式     [字体:大 中 小]   Vim 是一个上古神器,本篇文章主要持续总结使用 Vim 的过程中不得不了解的一些指令和注意事项,以及持续分享一个前端工作者不得不安装的一些插 ...

  4. VIM IDE

    打造VIM IDE(针对C语言开发者)   ================================使用vim打造IDE, 针对C语言开发者建议使用gvim================== ...

  5. Eclipse IDE for C/C++ Developers安装配置详解

    Eclipse IDE for C/C++ Developers安装配置详解(转) 转自:http://hi.baidu.com/ltb6w/item/986532efd712460f570f1ddc ...

  6. 基于Impala平台打造交互查询系统

    本文来自网易云社区 原创: 蒋鸿翔 DataFunTalk 本文根据网易大数据蒋鸿翔老师DataFun Talk--"大数据从底层处理到数据驱动业务"中分享的<基于Impal ...

  7. 开源IDE CodeBlocks的下载安装、配置、简单编程

    如果没有集成开发环境(IDE),在linux下开发程序将非常繁琐,IDE是指将编辑.编译.调试等功能集成在一个桌面环境上,这样就大大方便了用户.IDE一般包括代码编辑器.编译器.调试器和图形界面用户工 ...

  8. dotfiles for linux/unix users automatically! (python Vim IDE)

    Here is a brief introduction and package of dotfiles for linux/unix user. I think there are enough i ...

  9. Linux平台上轻松安装与配置Domino

    Linux平台上轻松安装与配置Domino Domino Server的编译安装过程中需要用到libstdc++-2.9和glibc-2.1.1(或者其更高的版本)两个编译模块,它们是Linux开发编 ...

随机推荐

  1. Jmeter常用函数之__CSVRead使用

    __CSVRead函数用于对脚本进行参数话,当脚本中不同变量需要不同参数值时,可以考虑__CSVRead函数. 以登录的用户名.密码为例:实际进行压力测试时,需要模拟使用不同的用户并发访问系统,此时需 ...

  2. 关于jQuery里面的选择器

    一.JQuery选择器的概述 选择器是JQuery的根基,在JQuery中,对事件处理.遍历DOM和Ajax操作都依赖于选择器. 二.选择器的优势 1.简洁的语法 2.支持CSS1.0到CSS3.0选 ...

  3. 第2章 如何构建布局良好的Windows程序

    01.菜单栏(MenuStrip) 设置快捷键方式: 方式一:1.设置菜单项的Text属性为(打开(&F)), 首先必须按住alt+主菜单快捷键进入到对应的主菜单, 然后直接按F就可以打开子窗 ...

  4. JavaScript 事件入门

    一.事件介绍 JavaScript 有三种事件模型:内联模型.脚本模型和 DOM2 模型. 二.内联模型 //在 HTML 中把事件处理函数作为属性执行 JS 代码 <input type=&q ...

  5. C#仿google日历asp.net简单三层版本

    网上搜了很多xgcalendar的例子都是Php开发的,而且官方站上的asp.net/MVC版 在vs10 08 都报错. 所以自己重新用三层写了一下希望对大家有帮助 废话不多说了 先看看它都有些什么 ...

  6. AngularJS1.3一些技巧

    前言 框架选择.在上一篇文章评论中,有人说angular1.3是个过时的东西,建议使用angular2.其实这种说法很像拿jQuery1.x和jQuery2.x做比较,新的版本当然会有优化优势的地方, ...

  7. C4.5(决策树)

    C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法.它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述,每一个元组属于一个互斥的类别中的某一类.C4.5的目标是通过学习, ...

  8. Oracle12C相关

    1.jar包安装到MVN本地库 mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1 ...

  9. [转]DevExpress v13.2 Beta版重要更新

    昨日,DevExpress隆重宣布发布v13.2.3测试版,想抢先尝鲜的朋友可以在这里下载哦.希望使用DevExpress旧版本的朋友,看到这些更新后能尽快更新你的代码,以免造成不必要的麻烦. Das ...

  10. 1分钟实现Autodesk Vault登录对话框

      .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courie ...