vim 配置 php 环境

让我们开始DIY吧~!! 终端下执行命令:whereis vim     将列出vim安装的路径。 否则执行 sudo apt-get install vim 安装vim 。 成功安装了vim,只需要在用户根目录下创建.vimrc文件,在配置文件下写入如下信息。 比如: "引号代表注释 set hlsearch                  "高亮度反白 set backspace=2               "可随时用倒退键删除 set autoindent                 "自动缩排 set ruler                      "可显示最后一行的状态 set showmode                 "左下角那一行的状态 set nu                        "可以在每一行的最前面显示行号 set bg=dark                   "显示不同的底色色调 syntax on                     "进行语法检验,颜色显示 set wrap                      "自动折行 set shiftwidth=4 set tabstop=4 set softtabstop=4 set expandtab                  "将tab替换为相应数量空格 set smartindent ######下面可根据自己的需要,可以不选用############# set guifont=Dorid Sans Mono:h14:uft8  "gvim字体设置 set encoding=utf8               "设置内部编码为utf8 set fileencoding=utf8            "当前编辑的文件编码 set fileencodings=uft8-bom,utf8,gbk,gb2312,big5   "打开支持编码的文件 "解决consle输出乱码 language messages zh_CN.utf-8 "解决菜单乱码 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim 一、如何安装phpcomplete插件 如果是VIM7.0以上,不需要再下载 phpcomplete.vim 这个插件,因为安装时自带了,在目录/usr/share/vim/vim73/autoload/phpcomplete.vim中。 在 ~/.vimrc 中添加这样两行: filetype plugin on autocmd FileType php set omnifunc=phpcomplete#CompletePHP 如何使用: vi index.php 插入一段php代码后比如: htmlsp 先按下 Ctrl+x进入^X模式,再按下 Ctrl+o, 就能看到提示列表框,以及对应的function,还有对应的函数定义比如参数等等 Ctrl+n, Ctrl+p 来上下选择,ESC 来取消提示 [attachment=28884] 二、如何安装php documentor插件 http://www.vim.org/scripts/script.php?script_id=1355 根据官网提供的安装实例,我们进行以下操作: 下载php-doc.vim cp ./php-doc.vim /usr/share/vim/vim73/autoload/php-doc.vim install details Installation ========= For example include into your .vimrc: vi  ~\.vimrc source /usr/share/vim/vim73/autoload/php-doc.vim inoremap <C-P> <ESC>:call PhpDocSingle()<CR>i nnoremap <C-P> :call PhpDocSingle()<CR> vnoremap <C-P> :call PhpDocRange()<CR> 如何使用: 在函数定义出注释按ctrl+p即可 [attachment=28886] 三、如何安装NERDTree插件 http://www.vim.org/scripts/script.php?script_id=1658 然后解压,解压缩后把plugin,doc,syntax,nerdtree_plugin四个目录复制到/usr/share/vim/vim73/目录下,即可完成安装。 进入vim后 :NERDTree开启 如何使用 1、在终端界面,输入vim 2、输入  :NERDTree ,回车 3、进入当前目录的树形界面,通过h,j键或者小键盘上下键,能移动选中的目录或文件 4、按u键到上级目录,按o键打开或者关闭文件。目录前面有+号,摁Enter会展开目录,文件前面是-号,摁Enter会在右侧窗口展现该文件的内容,并光标的焦点focus右侧。 5、ctr+w+h  光标focus左侧树形目录,ctrl+w+l 光标focus右侧文件显示窗口。多次摁 ctrl+w,光标自动在左右侧窗口切换 6、光标focus左侧树形窗口,摁? 弹出NERDTree的帮助,再次摁?关闭帮助显示 7、输入:q回车,关闭光标所在窗口 图片上传张数限制,不秀效果了。照做即可!!! 四、如何安装neocomplcache代码自动补全函数提示(支持C/C++,java,python,PHP,javascrip众多语言 ) http://www.vim.org/scripts/script.php?script_id=2620 然后解压,解压缩后把autoload,plugin,doc三个目录复制到/usr/share/vim/vim73/ 添加一下内容到~/.vimrc文件中 if &term=="xterm" set t_Co=8 set t_Sb=^[[4%dm set t_Sf=^[[3%dm endif let g:neocomplcache_enable_at_startup = 1 五、如何安装zencodeing   引起美工业内13级地震的超级利器 http://www.vim.org/scripts/script.php?script_id=2981 下载得到 解压缩后把三个目录复制到/usr/share/vim/vim73/ 方法二 在用户根目录下创建~/ .vim文件夹 ,将加压后得到的三个目录放入此文件夹即可。 测试是否安装成功 : 输入 html:4s 按住Ctrl 再按下 “y” 和“,” 看到发生了什么?震惊了吗?? 以上插件安装都必须重新启动vim生效 原文地址:http://bbs.php100.com/simple/?t370371.html

vim配置vimrc详解

一、vim/gvim 环境变量 1. vimrc的存放位置: 系统 vimrc 文件: "$VIM/vimrc" 用户 vimrc 文件: "$HOME/.vimrc" 用户 exrc 文件: "$HOME/.exrc" 系统 gvimrc 文件: "$VIM/gvimrc" 用户 gvimrc 文件: "$HOME/.gvimrc" 系统菜单文件: "$VIMRUNTIME/menu.vim" $VIM 预设值: "/usr/share/vim"   2.windows下:(例如gvim 安装在D:/vim/) $VIMRUNTIME  : d:/vim/vim73 $VIM                  : d:/vim/ 插件安装位置: 默认位置   :          $VIMRUNTIME 自定义插件目录: $VIM/vimfiles  (如果没有vimfiles就新建一个,建议将插件安装在这)   1). 上面插件安装管理目录还不是很清晰,可以用vim的vundle插件,每个插件会安装在各自的文件夹中,而不是像上面那样混合在一起,比如Tagbar插件就会在vundle文件夹下自动生成tagbar文件夹保存tagbar插件。同时vimrc文件要稍作修改可以自行baidu ,google很简单。 2). 如果要使用vundle更新插件,还要安装git (当然也可以手动更新直接下载覆盖到 vundle/ 下对应插件文件夹里)       二、 vimrc文件内容:   "是否兼容VI,compatible为兼容,nocompatible为不完全兼容 "如果设置为compatible,则tab将不会变成空格 set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim "设置鼠标运行模式为WINDOWS模式 behave mswin " Multi-encoding setting, MUST BE IN THE BEGINNING OF .vimrc! " if has("multi_byte") " When 'fileencodings' starts with 'ucs-bom', don't do this manually "set bomb set fileencodings=ucs-bom,utf-8,chinese,taiwan,japan,korea,latin1 " CJK environment detection and corresponding setting if v:lang =~ "^zh_CN" " Simplified Chinese, on Unix euc-cn, on MS-Windows cp936 set encoding=chinese set termencoding=chinese if &fileencoding == '' set fileencoding=chinese endif elseif v:lang =~ "^zh_TW" " Traditional Chinese, on Unix euc-tw, on MS-Windows cp950 set encoding=taiwan set termencoding=taiwan if &fileencoding == '' set fileencoding=taiwan endif elseif v:lang =~ "^ja_JP" " Japanese, on Unix euc-jp, on MS-Windows cp932 set encoding=japan set termencoding=japan if &fileencoding == '' set fileencoding=japan endif elseif v:lang =~ "^ko" " Korean on Unix euc-kr, on MS-Windows cp949 set encoding=korea set termencoding=korea if &fileencoding == '' set fileencoding=korea endif endif " Detect UTF-8 locale, and override CJK setting if needed if v:lang =~ "utf8$" || v:lang =~ "UTF-8$" set encoding=utf-8 endif else echoerr 'Sorry, this version of (g)Vim was not compiled with "multi_byte"' endif "解决菜单乱码 set encoding=utf-8 "fileencodings需要注意顺序,前面的字符集应该比后面的字符集大 set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 set langmenu=zh_CN.utf-8 set imcmdline source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim "解决consle输出乱码 language messages zh_CN.utf-8 "自动检测文件类型并加载相应的设置,snipMate插件需要打开这个配置选项 filetype plugin indent on "语法高亮 syntax on "自动缩进 set autoindent "设置 Backspace 和 Delete 的灵活程度,backspace=2 则没有任何限制 "设置在哪些模式下使用鼠标功能,mouse=a 表示所有模式 set mouse=a set backspace=2 "不自动换行 set nowrap "设置超过100字符自动换行 "set textwidth=100 "设置超过100列的字符带下划线 "au BufWinEnter * let w:m2=matchadd('Underlined', '\%>100v.\+', -1) "syn match out80 /\%80v./ containedin=ALL "hi out80 guifg=white guibg=red "智能对齐方式 set smartindent "一个tab是4个字符 set tabstop=4 "按一次tab前进4个字符 set softtabstop=4 "用空格代替tab set expandtab "设置自动缩进 set ai! "缩进的字符个数 set cindent shiftwidth=4 "set autoindent shiftwidth=2 "设置折叠模式 set foldcolumn=4 "光标遇到折叠,折叠就打开 "set foldopen=all "移开折叠时自动关闭折叠 "set foldclose=all "zf zo zc zd zr zm zR zM zn zi zN "依缩进折叠 "   manual  手工定义折叠 "   indent  更多的缩进表示更高级别的折叠 "   expr    用表达式来定义折叠 "   syntax  用语法高亮来定义折叠 "   diff    对没有更改的文本进行折叠 "   marker  对文中的标志折叠 set foldmethod=syntax "启动时不要自动折叠代码 set foldlevel=100 "依标记折叠 set foldmethod=marker "显示行号 set number "打开光标的行列位置显示功能 set ruler "显示中文引号 set ambiwidth=double "行高亮 set cursorline "列高亮,与函数列表有冲突 set cursorcolumn "设置命令行的高度 set cmdheight=2 "高亮搜索的关键字 set hlsearch "搜索忽略大小写 set ignorecase "设置命令历史行数 set history=100 "启动的时候不显示那个援助索马里儿童的提示 "set shortmess=atI "不要闪烁 "set novisualbell "显示TAB健 set list set listchars=tab:>-,trail:- "高亮字符,让其不受100列限制 ":highlight OverLength ctermbg=red ctermfg=white guibg=grey guifg=white ":match OverLength '\%101v.*' "设置VIM状态栏 set laststatus=2 "显示状态栏(默认值为1, 无法显示状态栏) set statusline= set statusline+=%2*%-3.3n%0*\ " buffer number set statusline+=%f\ " file name set statusline+=%h%1*%m%r%w%0* " flag set statusline+=[ if v:version >= 600 set statusline+=%{strlen(&ft)?&ft:'none'}, " filetype set statusline+=%{&fileencoding}, " encoding endif set statusline+=%{&fileformat}] " file format set statusline+=%= " right align "set statusline+=%2*0x%-8B\ " current char set statusline+=0x%-8B\ " current char set statusline+=%-14.(%l,%c%V%)\ %<%P " offset if filereadable(expand("$VIM/vimfiles/plugin/vimbuddy.vim")) set statusline+=\ %{VimBuddy()} " vim buddy endif "状态行颜色 "highlight StatusLine guifg=SlateBlue guibg=Yellow "highlight StatusLineNC guifg=Gray guibg=White "设置路径,多个路径用逗号分隔 set path=.,"E:/Web/htdocs",, "去掉有关vi一致性模式,避免以前版本的一些bug和局限 set nocp "增强模式中的命令行自动完成操作 set wildmenu "执行 Vim 缺省提供的 .vimrc 文件的示例,包含了打开语法加亮显示等最常用的功能 source $VIMRUNTIME/vimrc_example.vim "缺省不产生备份文件 set nobackup "在输入括号时光标会短暂地跳到与之相匹配的括号处,不影响输入 set showmatch "正确地处理中文字符的折行和拼接 set formatoptions+=mM "设定文件浏览器目录为当前目录 set bsdir=buffer "自动切换当前目录为当前文件所在的目录 set autochdir "自动重新加载外部修改内容 "set autoread "使PHP识别EOT字符串 hi link phpheredoc string "允许在有未保存的修改时切换缓冲区 set hidden "选中一段文字并全文搜索这段文字 vmap <silent> ,/ y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> vmap <silent> ,? y?<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> "进入当前编辑的文件的目录 autocmd BufEnter * exec "cd %:p:h" "保存文件的格式顺序 set fileformats=dos,unix "配色(更多的配色见colors目录和http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html) "colorscheme peacock_light colorscheme peacock_desert "设置字体 if has("gui") if has("win32") "启动时会弹出字体选择框,如果取消,则采用系统默认字体 "set guifont=* "Windows默认使用的字体,字体较粗 "set guifont=Fixedsys "中文显示变形,字体较粗 "set guifont=Monospace:h9 "中文显示变形,字体较细 "set guifont=Consolas:h9 "中文显示变形,字体较细 "set guifont=Lucida\ Console:h9 "中文显示变形,字体较细 set guifont=Monaco:h9 "中文显示变形,字体较细 "set guifont=Andale\ Mono:h10 "中文显示变形,字体较细 "set guifont=Bitstream\ Vera\ Sans\ Mono:h9 "需要运行修改版的gvim才能识别 "set guifont=YaHei\ Consolas\ Hybrid:h9 "如果guifontwide采用中文字体,汉字将自动使用guifontwide,英文自动使用guifont set guifontwide=YaHei\ Consolas\ Hybrid:h9 else set guifont=SimSun:h10 endif "set columns=128 lines=36 endif "启动后最大化 au GUIEnter * simalt ~x "置粘贴模式,这样粘贴过来的程序代码就不会错位了。 "set paste "设置帮助信息 set helplang=cn "自动保存session和viminfo "缺省的sessionoptions选项包括:blank,buffers,curdir,folds,help,options,tabpages,winsize "也就是会话文件会恢复当前编辑环境的空窗口、所有的缓冲区、当前目录、折叠(fold)相关的信息、帮助窗口、所有的选项和映射、所有的标签页(tab)、窗口大小 "set sessionoptions-=curdir "au VimLeave * mksession! $VIMRUNTIME/Session.vim "au VimLeave * wviminfo! $VIMRUNTIME/_viminfo "source $VIMRUNTIME/Session.vim "rviminfo $VIMRUNTIME/_viminfo "记录上次关闭的文件及状态 set viminfo='10,\"100,:20,%,n$VIMRUNTIME/_viminfo au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif "设置插件SuperTab "设置按下<Tab>后默认的补全方式, 默认是<C-P>, "现在改为<C-X><C-O>. 关于<C-P>的补全方式, "还有其他的补全方式, 可以看看下面的一些帮助: ":help ins-completion ":help compl-omni let g:SuperTabRetainCompletionType=2 "0 - 不记录上次的补全方式 "1 - 记住上次的补全方式,直到用其他的补全命令改变它 "2 - 记住上次的补全方式,直到按ESC退出插入模式为止 let g:SuperTabDefaultCompletionType="<C-X><C-O>" set diffexpr=MyDiff() function! MyDiff() let opt = '-a --binary ' if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif let arg1 = v:fname_in if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif let arg2 = v:fname_new if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif let arg3 = v:fname_out if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif let eq = '' if $VIMRUNTIME =~ ' ' if &sh =~ '\<cmd' let cmd = '""' . $VIMRUNTIME . '\diff"' let eq = '"' else let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"' endif else let cmd = $VIMRUNTIME . '\diff' endif silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq endfunction "phpDocumentor "this includes the script and maps the combination <ctrl> + p "to the doc functions. source $VIM\vimfiles\plugin\php-doc.vim imap <A-/> <ESC>:call PhpDocSingle()<CR>i nmap <A-/> :call PhpDocSingle()<CR> vmap <A-/> :call PhpDocRange()<CR> "You can obtain the completion dictionary file from: "http://cvs.php.net/viewvc.cgi/phpdoc/funclist.txt set dictionary+=$VIM\vimfiles\syntax\function.txt "Use the dictionary completion set complete-=k complete+=k "Alt + -> 打开下一个文件 map <M-right> <ESC>:bn<RETURN> "Alt + <- 打开上一个文件 map <M-left> <ESC>:bp<RETURN> "使用TAB键自动完成 "This function determines, wether we are on "the start of the line text(then tab indents) "or if we want to try auto completion function! InsertTabWrapper() let col=col('.')-1 if !col || getline('.')[col-1] !~ '\k' return "\<TAB>" else return "\<C-N>" endif endfunction "使用SuperTab之后,就可以关闭该设置了 "inoremap <TAB> <C-R>=InsertTabWrapper()<CR> "平台判断 function! GetSystem() if (has("win32") || has("win95") || has("win64") || has("win16")) return "windows" elseif has("unix") return "linux" elseif has("mac") return "mac" endif endfunction "取得光标处的匹配 function! GetPatternAtCursor(pat) let col = col('.') - 1 let line = getline('.') let ebeg = -1 let cont = match(line, a:pat, 0) while (ebeg >= 0 || (0 <= cont) && (cont <= col)) let contn = matchend(line, a:pat, cont) if (cont <= col) && (col < contn) let ebeg = match(line, a:pat, cont) let elen = contn - ebeg break else let cont = match(line, a:pat, contn) endif endwh if ebeg >= 0 return strpart(line, ebeg, elen) else return "" endif endfunction "打开链接 function! OpenUrl() let s:url = GetPatternAtCursor('\v(https?://|ftp://|file:/{3}|www\.)((\w|-)+\.)+(\w|-)+(:\d+)?(/(\w|[~@#$%^&+=/.?-])+)?') "echo s:url if s:url == "" echohl WarningMsg echomsg '在光标处未发现URL!' echohl None else if GetSystem() == "windows" call system("explorer " . s:url) else call system("firefox " . s:url . " &") endif endif unlet s:url endfunction nmap <C-LeftMouse> :call OpenUrl()<CR> "放大字体 function <SID>FontSize_Enlarge() if GetSystem() == "linux" let pattern = '\<\d\+$' elseif GetSystem() == "windows" let pattern = ':h\zs\d\+\ze:' endif let fontsize = matchstr(&gfn, pattern) let cmd = substitute(&gfn, pattern, string(fontsize + 1), 'g') let &gfn=cmd let fontsize = matchstr(&gfw, pattern) let cmd = substitute(&gfw, pattern, string(fontsize + 1), 'g') let &gfw=cmd endfunction nnoremap <A-+> :call <SID>FontSize_Enlarge()<CR> "缩小字体 function <SID>FontSize_Reduce() if GetSystem() == "linux" let pattern = '\<\d\+$' elseif GetSystem() == "windows" let pattern = ':h\zs\d\+\ze:' endif let fontsize = matchstr(&gfn, pattern) let cmd = substitute(&gfn, pattern, string(fontsize - 1), 'g') let &gfn=cmd let fontsize = matchstr(&gfw, pattern) let cmd = substitute(&gfw, pattern, string(fontsize - 1), 'g') let &gfw=cmd endfunction nnoremap <A--> :call <SID>FontSize_Reduce()<CR> "html自动输入匹配标签,输入>之后自动完成匹配标签 au FileType xhtml,xml so ~/.vim/ftplugin/html_autoclosetag.vim "能够漂亮的显示.NFO文件 function! SetFileEncodings(encodings) let b:myfileencodingsbak=&fileencodings let &fileencodings=a:encodings endfunction function! RestoreFileEncodings() let &fileencodings=b:myfileencodingsbak unlet b:myfileencodingsbak endfunction au BufReadPre *.nfo call SetFileEncodings('cp437')|set ambiwidth=single au BufReadPost *.nfo call RestoreFileEncodings() """""""""""""""""""""""""""""" " 设置lookupfile插件 """""""""""""""""""""""""""""" let g:LookupFile_MinPatLength = 2               "最少输入2个字符才开始查找 let g:LookupFile_PreserveLastPattern = 0        "不保存上次查找的字符串 let g:LookupFile_PreservePatternHistory = 1     "保存查找历史 let g:LookupFile_AlwaysAcceptFirst = 1          "回车打开第一个匹配项目 let g:LookupFile_AllowNewFiles = 0              "不允许创建不存在的文件 if filereadable("./filenametags")               "设置tag文件的名字 let g:LookupFile_TagExpr = '"./filenametags"' endif "映射LookupFile为,lf nmap <silent> ,lf <Plug>LookupFile<CR> "映射LUBufs为,lb nmap <silent> ,lb :LUBufs<CR> "映射LUWalk为,lw nmap <silent> ,lw :LUWalk<CR> "映射LUPath为,lp nmap <silent> ,lp :LUPath<CR> "F2处理行尾的空格以及文件尾部的多余空行 "Automatically remove trailing spaces when saving a file. autocmd BufRead,BufWrite * if ! &bin | silent! %s/\s\+$//ge | endif "Remove indenting on empty line map <F2> :w<CR>:call CleanupBuffer(1)<CR>:noh<CR> function! CleanupBuffer(keep) " Skip binary files if (&bin > 0) return endif " Remove spaces and tabs from end of every line, if possible silent! %s/\s\+$//ge " Save current line number let lnum = line(".") " number of last line let lastline = line("$") let n        = lastline " while loop while (1) " content of last line let line = getline(n) " remove spaces and tab if (!empty(line)) break endif let n = n - 1 endwhile " Delete all empty lines at the end of file let start = n+1+a:keep if (start < lastline) execute n+1+a:keep . "," . lastline . "d" endif " after clean spaces and tabs, jump back exec "normal " . lnum . "G" endfunction "快速查找(插件grep插件,需要grep软件) "nnoremap <silent> <F3> :Grep<CR> "给n映射一个快捷键,习惯上喜欢用F3 nmap <F3> n "给n映射一个快捷键,习惯上喜欢用F3 nmap <S-F3> N "PHP语法检查 "map <F4> :!E:/Web/Server/PHP/php.exe -l %<CR> function! CheckPHPSyntax() setlocal makeprg=E:/Web/Server/PHP/php.exe\ -l\ -n\ -d\ html_errors=off setlocal shellpipe=> " Use error format for parsing PHP error output setlocal errorformat=%m\ in\ %f\ on\ line\ %l make % endfunction " Perform :PHP_CheckSyntax() map <F4> :call CheckPHPSyntax()<CR> "PHP代码美化 "map <C-A-F4> :!ZendCodeAnalyzer.exe %<CR> "PHP代码通过Zend加密 function! ZendEncodePHP() let currentfile=fnamemodify(bufname("%"), ":p") let newfile=fnamemodify(bufname("%"), ":p:h") . "\\" . fnamemodify(bufname("%"), ":t:r") . ".zend." . fnamemodify(bufname("%"), ":e") execute "!\"E:\\Web\\Tools\\ZendGuard\\bin\\zendenc.exe\"" . ' ' . currentfile . ' ' . newfile endfunction map <C-F4> :call ZendEncodePHP()<CR> "使用IE预览网页 function! BrowseWebPage() let filepath=substitute(getcwd()."\\".bufname("%"), 'E:\\Web\\htdocs\\', "http://localhost/", "g") let filepath=substitute(filepath,"\\","\/","g") silent execute "!\"explorer\""." ".filepath endfunction map <S-F4> :call BrowseWebPage()<CR> "F6打开或关闭nerd_tree和taglist "由于nerd_tree和taglist采用了trinity插件打开 "所以具体的设置以trinity.vim为准 nmap <F6>  :TrinityToggleTagListAndNERDTree<CR> "F7单独切换打开nerd_tree(nerd_tree插件) let g:NERDChristmasTree = 1              "色彩显示 let g:NERDTreeShowHidden = 1             "显示隐藏文件 let g:NERDTreeWinPos = 'left'            "窗口显示位置 let g:NERDTreeHighlightCursorline = 0    "高亮当前行 nmap <F7>  :TrinityToggleNERDTree<CR> "netrw设置(自带目录树插件) let g:netrw_winsize=30 let g:netrw_liststyle=1 let g:netrw_timefmt='%Y-%m-%d %H:%M:%S' nmap <silent> <C-F7> :Sexplore!<cr> "Ctrl + F7打开project插件 nmap <silent> <A-F7>  :Project<CR> "F8单独切换打开taglist(taglist插件) if GetSystem() == "windows"                    "设定Windows系统中ctags程序的位置 let g:Tlist_Ctags_Cmd = $VIMRUNTIME.'\ctags' else let g:Tlist_Ctags_Cmd = '/usr/bin/ctags' endif "let g:Tlist_Sort_Type = 'name'          "以名称顺序排序,默认以位置顺序(order) let g:Tlist_Show_One_File = 1           "不同时显示多个文件的tag,只显示当前文件的 let g:Tlist_Exit_OnlyWindow = 1         "如果taglist窗口是最后一个窗口,则退出vim lef g:Tlist_File_Fold_Auto_Close = 1    "当光标不在编辑文件里面的时候全部折叠 let g:Tlist_Use_Right_Window = 1        "在右侧窗口中显示taglist窗口 let g:Tlist_Enable_Fold_Column = 1      "显示折叠边栏 nmap <F8>  :TrinityToggleTagList<CR> "F11查看打开的文件列表(bufexplorer插件) let g:bufExplorerDefaultHelp = 1 let g:bufExplorerDetailedHelp = 0 nmap <F11> :BufExplorer <CR> "F12生成/更新tags文件 set tags=tags; set autochdir function! UpdateTagsFile() silent !ctags -R --fields=+ianS --extra=+q endfunction nmap <F12> :call UpdateTagsFile()<CR> "Ctrl + F12删除tags文件 function! DeleteTagsFile() "Linux下的删除方法 "silent !rm tags "Windows下的删除方法 silent !del /F /Q tags endfunction nmap <C-F12> :call DeleteTagsFile()<CR> "退出VIM之前删除tags文件 "au VimLeavePre * call DeleteTagsFile() 转载地址:http://xiaozhuge0825.blog.163.com/blog/static/5760606820101127105848596/

在VIM中添加一键编译和一键运行 转

事先声明,我使用的VIM完全是基于终端的,而不是gvim或vim-x11。因为后两者不具有平台移植性,花哨的目录和鼠标点击并非必须。
在vim中编程,退出来再敲命令编译是一件痛苦的事情。如果能够像VC那样一键编译和一键运行就爽了。
事实上,在vim中实现这种功能并不困难,所需要的只是在配置文件~/.vimrc中加一些过程,然后将这些过程与某些快捷键进行绑定即可。
第一步,写编译函数。
事实上,vim的配置脚本完全可以称得上一门语言,因此定制一些功能是完全没问题的。
 
func! CompileGcc() exec "w" let compilecmd="!gcc " let compileflag="-o %< " if search("mpi\.h") != 0 let compilecmd = "!mpicc " endif if search("glut\.h") != 0 let compileflag .= " -lglut -lGLU -lGL " endif if search("cv\.h") != 0 let compileflag .= " -lcv -lhighgui -lcvaux " endif if search("omp\.h") != 0 let compileflag .= " -fopenmp " endif if search("math\.h") != 0 let compileflag .= " -lm " endif exec compilecmd." % ".compileflag endfunc func! CompileGpp() exec "w" let compilecmd="!g++ " let compileflag="-o %< " if search("mpi\.h") != 0 let compilecmd = "!mpic++ " endif if search("glut\.h") != 0 let compileflag .= " -lglut -lGLU -lGL " endif if search("cv\.h") != 0 let compileflag .= " -lcv -lhighgui -lcvaux " endif if search("omp\.h") != 0 let compileflag .= " -fopenmp " endif if search("math\.h") != 0 let compileflag .= " -lm " endif exec compilecmd." % ".compileflag endfunc
 
这样就定义两个函数,分别编译C和C++,其含义应该是比较明显的了。注意,这里用到的两个变量compilecmd和compileflag都是局部变量。search函数用来搜索字符串,我根据源码的头文件来判断编译所需要的库。连接两个字符串的运行符是一个句点。%为内部变量,表示文件名,而%<表示没有后缀的文件名。
上面的函数只是定义了C/C++语言的编译,如果需要编译其它语言,则也需要编写对应的函数。而把这些不同语言的函数组合到一起则还需要另外一个函数。
第二步,组合成一个函数
func! CompileCode() exec "w" if &filetype == "cpp" exec "call CompileGpp()" elseif &filetype == "c" exec "call CompileGcc()" endif endfunc
该函数根据文件类别来选定不同的编译函数。&filetype是一个内部变量,前缀&起标识内部变量的作用。
filetype不光是cpp和c,还可以是python,java等等。
第三步,键绑定
map <F5> :call CompileCode()<CR> imap <F5> <ESC>:call CompileCode()<CR> vmap <F5> <ESC>:call CompileCode()<CR>
 
这里绑定了三次,分别对应普通模式,插入模式和可视模式。显然<ESC>起到的作用是从这些模式中退出来,而<CR>表示carriage return,即敲命令时的回车。
现在,大功告成了,你只需要按F5键,源码就会自动保存,然后进行编译。运行可执行文件做法也是一样的。
下面贴出我的完整的解决方案,除了C/C++,还涉及到java和python。并且按F6就能执行编译生成的可执行文件。
func! CompileGcc() exec "w" let compilecmd="!gcc " let compileflag="-o %< " if search("mpi\.h") != 0 let compilecmd = "!mpicc " endif if search("glut\.h") != 0 let compileflag .= " -lglut -lGLU -lGL " endif if search("cv\.h") != 0 let compileflag .= " -lcv -lhighgui -lcvaux " endif if search("omp\.h") != 0 let compileflag .= " -fopenmp " endif if search("math\.h") != 0 let compileflag .= " -lm " endif exec compilecmd." % ".compileflag endfunc func! CompileGpp() exec "w" let compilecmd="!g++ " let compileflag="-o %< " if search("mpi\.h") != 0 let compilecmd = "!mpic++ " endif if search("glut\.h") != 0 let compileflag .= " -lglut -lGLU -lGL " endif if search("cv\.h") != 0 let compileflag .= " -lcv -lhighgui -lcvaux " endif if search("omp\.h") != 0 let compileflag .= " -fopenmp " endif if search("math\.h") != 0 let compileflag .= " -lm " endif exec compilecmd." % ".compileflag endfunc func! RunPython() exec "!python %" endfunc func! CompileJava() exec "!javac %" endfunc func! CompileCode() exec "w" if &filetype == "cpp" exec "call CompileGpp()" elseif &filetype == "c" exec "call CompileGcc()" elseif &filetype == "python" exec "call RunPython()" elseif &filetype == "java" exec "call CompileJava()" endif endfunc func! RunResult() exec "w" if search("mpi\.h") != 0 exec "!mpirun -np 4 ./%<" elseif &filetype == "cpp" exec "! ./%<" elseif &filetype == "c" exec "! ./%<" elseif &filetype == "python" exec "call RunPython" elseif &filetype == "java" exec "!java %<" endif endfunc map <F5> :call CompileCode()<CR> imap <F5> <ESC>:call CompileCode()<CR> vmap <F5> <ESC>:call CompileCode()<CR> map <F6> :call RunResult()<CR>
  原文地址

vim基本命令

1. vim #在命令行中输入vim,进入vim编辑器 2. i #按一下i键,下端显示 --INSERT-- #插入命令,在vim中可能任意字符都有作用 3. Esc #退出i(插入)命令进行其它命令使用 4. :r filename #读入一个文件内容,并写入到当前编辑器中 5. :w newfilename #将该编辑器中的内容写入到一个新文件中 6. :w #在编辑的过程中保存文件,相当于word中的ctrl+s 7. :! command 暂时离开 vi 到指令列模式下执行 command 的显示结果!例如 :!ls #在编辑过程中执行shell命令ls 8. :sh #进入shell命令行,执行完命令后ctrl+d退出重新进入vim编辑继续编辑 在shell命令下,执行ctral+l完成清屏 9. :wq #保存文件并退出 10. ZZ #保存文件并退出,同上一个命令,注意大写 11. :q! #强制退出,不保存 12. :set number或者:set nu #使编辑中的文件显示行号 13. :set nonumber或者:set nonu #与上一条命令相反,不显示行号 14. :help i #查看插入命令帮助 15. u #撤消上一步操作 16. /Fedora #查找Fedora字符 17. :s /Fedora/Redhat #将Fedora字符替换为Redhat(只替换在光标所在的行) 18. dw #删除单词 dd #删除行 19. o #打开空白一行 20. vim + filename #进行文件最后一行进行编辑 21. vim +n filename #进入文件第n行进行编辑 22. :1,.s/redhat/fedora #.号表示当前行,即光标所在行 #将第1行到当前行(.)第一次出现的redhat字符代替为fedora 23. :1,.s/redhat/fedora/g #将第1行到当前行(.)所有出现的redhat字符代替为fedora,g 全局标志 24. :1,$s/redhat/fedora/g #$表示最后一行 #将第1行到最后一行所有出现的redhat字符代替为fedora 25. :%s/redhat/fedora/g #同上一个命令 26. :%s/\/fedora/g #将第1行到最后一行所有出现的redhat字代替为fedora #字,而不是字符 27. :f #显示文件内容,状态等等 #同ctrl+g命令 28. :e! #当前文件,返回到上次保存 :e file #切换编辑文件 29. :n #当编辑时有多个文件(比如vim file1 file2)时切换到下一个文件,与:e file 结合使用 VIM命令大全 光标控制命令 命令                   光标移动 h                   向左移一个字符 j                   向下移一行 k                   向上移一行 l                   向右移一个字符 G                   移到文件的最后一行 w                   移到下一个字的开头 W                   移到下一个字的开头,忽略标点符号 b                   移到前一个字的开头 B                   移到前一个字的开头,忽略标点符号 L                   移到屏幕的最后一行 M                   移到屏幕的中间一行 H                   移到屏幕的第一行 e                   移到下一个字的结尾 E                   移到下一个字的结尾,忽略标点符号 (                       移到句子的开头 )                       移到句子的结尾 {                       移到段落的开头 }                       移到下一个段落的开头 0(数字), |                移到当前行的第一列 ^                       移到当前行的第一个非空字符 $                       移到当前行的最后一个字符 +, Enter             移到下一行的第一个字符 -                       移到前一行的第一个非空字符 在 vi 中添加文本 命令                   插入动作 a                   在光标后插入文本 A                   在当前行插入文本 i                   在光标前插入文本 I                   在当前行前插入文本 o                   在当前行的下边插入新行 O                   在当前行的上边插入新行 s                   删除光标所在处字符,并进入插入模式 S                   删除光标所在的行,并进入插入模式 :r file             读入文件 file 内容,并插在当前行后 :nr file            读入文件 file 内容,并插在第 n 行后 Esc                 回到命令模式 ^v char             插入时忽略 char 的指定意义,这是为了插入特殊字符 在 vi 中删除文本 命令                   删除操作 x                   删除光标处的字符 dw                  删至下一个字的开头 dG                  删除行,直到文件结束 dd                  删除整行 db                  删除光标前面的字 :n,md               从第 m 行开始往前删除 n 行 d, d$               从光标处删除到行尾 ^h, backspace       插入时,删除前面的字符 ^w                  插入时,删除前面的字 修改 vi 文本 每个命令前面的数字表示该命令重复的次数 命令                               替换操作 rchar                         用 char 替换当前字符 R text escape                 用 text 替换当前字符直到按下 Esc 键 stext escape                  用 text 代替当前字符 S 或 cctext escape             用 text 代替整行 cwtext escape                 将当前字改为 text Ctext escape                  将当前行余下的改为 text cG escape                     修改至文件的末尾 ccursor_cmd text escape       从当前位置处到光标命令位置处都改为 text 在 vi 中查找与替换 命令                               查找与替换操作 /text                         在文件中向前查找 text ?text                         在文件中向后查找 text n                             在同一方向重复查找 N                             在相反方向重复查找 ftext                         在当前行向前查找 text Ftext                         在当前行向后查找 text ttext                         在当前行向前查找 text,并将光标定位在 text 的第一个字符 Ttext                         在当前行向后查找 text,并将光标定位在 text 的第一个字符 :set ic                       查找时忽略大小写 :set noic                     查找时对大小写敏感 :ranges/pat1/pat2/g           用 newtext 替换 oldtext :m,ns/oldtext/newtext         在 m 行通过 n,用 newtext 替换 oldtext &                                  重复最后的 :s 命令 :g/text1/s/text2/text3        查找包含 text1 的行,用 text3 替换 text2 :g/text/command               在所有包含 text 的行运行 command 所表示的命令 :v/text/command               在所有不包含 text 的行运行 command 所表示的命令 在 vi 中复制文本 命令                      复制操作 yy                    将当前行的内容放入临时缓冲区 nyy                   将 n 行的内容放入临时缓冲区 p                     将临时缓冲区中的文本放入光标后 P                     将临时缓冲区中的文本放入光标前 "(a-z)nyy             复制 n 行放入名字为圆括号内的可命名缓冲区,省略 n 表示当前行 "(a-z)ndd             删除 n 行放入名字为圆括号内的可命名缓冲区,省略 n 表示当前行 "(a-z)p               将名字为圆括号的可命名缓冲区的内容放入当前行后 "(a-z)P               将名字为圆括号的可命名缓冲区的内容放入当前行前 在 vi 中撤消与重复 命令               撤消操作 u               撤消最后一次修改 U               撤消当前行的所有修改 .                  重复最后一次修改 ,                  以相反的方向重复前面的 f、F、t 或 T 查找命令 ;                  重复前面的 f、F、t 或 T 查找命令 "np             取回最后第 n 次的删除(缓冲区中存有一定次数的删除内容,一般为 9) n               重复前面的 / 或 ? 查找命令 N               以相反方向重复前面的 / 或 ? 命令 保存文本和退出 vi 命令                      保存和/或退出操作 :w                    保存文件但不退出 vi :w file               将修改保存在 file 中但不退出 vi :wq 或 ZZ 或 :x         保存文件并退出 vi :q!                   不保存文件,退出 vi :e!                   放弃所有修改,从上次保存文件开始再编辑 vi 中的选项 选项                      作用 :set all              打印所有选项 :set nooption         关闭 option 选项 :set nu               每行前打印行号 :set showmode         显示是输入模式还是替换模式 :set autoindent          继承前一行的缩进方式,特别适用于多行注释 :set smartindent        为C程序提供自动缩进 :set list             显示制表符(^I)和行尾符号 :set ts=8             为文本输入设置 tab stops :set window=n         设置文本窗口显示 n 行 :set number           显示行数 :set nonumber         取消显示行数 vi 的状态 选项                   作用 :.=                     打印当前行的行号 :=                     打印文件中的行数 ctrl+g             显示文件名、当前的行号、文件的总行数和文件位置的百分比 :l                 使用字母 "l" 来显示许多的特殊字符,如制表符和换行符 在文本中定位段落和放置标记 选项                      作用 {                         在第一列插入 { 来定义一个段落 [[                         回到段落的开头处 ]]                         向前移到下一个段落的开头处 m(a-z)                用一个字母来标记当前位置,如用 mz 表示标记 z '(a-z)                将光标移动到指定的标记,如用 'z 表示移动到 z 在 vi 中连接行 选项                      作用 J                     将下一行连接到当前行的末尾 nJ                    连接后面 n 行 光标放置与屏幕调整 选项                      作用 H                     将光标移动到屏幕的顶行 nH                    将光标移动到屏幕顶行下的第 n 行 M                     将光标移动到屏幕的中间 L                     将光标移动到屏幕的底行 nL                    将光标移动到屏幕底行上的第 n 行 ^e(ctrl+e)            将屏幕上滚一行 ctrl+y                将屏幕下滚一行 ctrl+u                将屏幕上滚半页 ctrl+d                将屏幕下滚半页 ctrl+b                将屏幕上滚一页 ctrl+f                将屏幕下滚一页 ctrl+l                重绘屏幕 z-return              将当前行置为屏幕的顶行 nz-return             将当前行下的第 n 行置为屏幕的顶行 z.                    将当前行置为屏幕的中央 nz.                   将当前行上的第 n 行置为屏幕的中央 z-                    将当前行置为屏幕的底行 nz-                   将当前行上的第 n 行置为屏幕的底行 vi 中的 shell 转义命令 选项                      作用 :!command             执行 shell 的 command 命令,如 :!ls :!!                         执行前一个 shell 命令 :r!command            读取 command 命令的输入并插入,如 :r!ls 会先执行 ls,然后读入内容 :w!command            将当前已编辑文件作为 command 命令的标准输入并执行 command 命令,如 :w!grep all :cd directory         将当前工作目录更改为 directory 所表示的目录 :sh                   将启动一个子 shell,使用 ^d(ctrl+d) 返回 vi :so file              在 shell 程序 file 中读入和执行命令 vi 中的宏与缩写 (避免使用控制键和符号,不要使用字符 K、V、g、q、v、*、= 和功能键) 选项                      作用 :map key command_seq 定义一个键来运行 command_seq,如 :map e ea,无论什么时候都可以 e 移到一个字的末尾来追加文本 :map                  在状态行显示所有已定义的宏 :umap key             删除该键的宏 :ab string1 string2   定义一个缩写,使得当插入 string1 时,用 string2 替换 string1。当要插入文本时,键入 string1 然后按 Esc 键,系统就插入了 string2 :ab                   显示所有缩写 :una string           取消 string 的缩写 在 vi 中缩进文本 选项                     作用 ctrl+i或 tab     插入文本时,插入移动的宽度,移动宽度是事先定义好的 :set ai               打开自动缩进 :set sw=n             将移动宽度设置为 n 个字符 n>                   使 n 行都向右移动一个宽度,例如 3>> 就将接下来的三行每行都向右移动一个移动宽度