Mac开发利器之程序员编辑器MacVim学习总结
http://blog.****.net/eric_xjj/article/details/8932502
Emacs和Vim都是程序员专用编辑器,Emacs被称为神的编辑器,Vim则是编辑器之神。至于两者到底哪个更好用,网络上两大派系至今还争论不休。不过,相比之下,Emacs更加复杂,已经不能算是一个编辑器了,有人这么说:Emacs是伪装成编辑器的操作系统。与之相反,Vim的定位很明确,就是要做一个强大的编辑器。由于笔者精力有限,决定还是选择自己认为相对简单点的Vim来学习。因此,笔者将会在本文跟大家介绍Mac下Vim的安装以及简单使用。
首先,Mac系统默认已经安装了Vim。打开终端,输入vim,回车。可看到如下界面,即表示Vim已经安装了。在vim里输入":q"
在终端上,界面非常之简洁,如果你需要更加复杂的界面以及使用Vim更多的特性,需要下载客户端安装。在Mac上目前存在两个版本的Vim客户端:
1、MacVim。使用Cocoa GUI,这是Mac上更新还很活跃的版本,也是Mac上最多人使用的版本。下载地址:http://code.google.com/p/macvim/
2、使用Carbon GUI的版本,但是这个版本目前基本上不再更新。下载地址:http://sourceforge.net/projects/macosxvim/files/
本文主要介绍MacVim,MacVim支持多窗口标签编辑以及全屏等新特性。下载了相应MacVim压缩包,解压以后将MacVim.app拖入/Applications目录下。启动MacVim,输入":h mvim", 按照提示,需要将mvim脚本文件拷贝到"/usr/local/bin"目录下。打开终端,输入命令 "cd /usr/local"以及"sudo mkdir bin",最后输入"sudo cp -f /Users/ericli/SoftWare/MacVim-snapshot-66/mvim /usr/local/bin/",这样就可以在终端输入命令"mvim"来快速启动MacVim 。如果你不想将MacVim.app放到/Applications目录下,只需要在终端设置VIM_APP_DIR变量为你想放置MacVim.app的目录并导入到$HOME/.bash_profile中即可,比如:export VIM_APP_DIR=$HOME/SoftWare/MacVim-snapshot-66/。在MacVim输入":h macvim",可以查看MacVim的使用帮助介绍文档。
现在MacVime的界面还是很简陋,下面开始介绍如何简单配置MacVim:
1、创建~/.bashrc文件
在终端键入"cd $HOME" 和“touch .bashrc”,即创建成功。打开文件,输入“alias vim=mvim”,并保存别名变量。然后再在终端键入“source .bashrc”使.bashrc文件生效。这样,在终端输入vim和mvim都可以启动MacVim.app了。
在这里稍微解释下几个文件的作用,/etc/bashrc、/etc/profile是系统全局环境变量设置,给所有用户使用,~/.bashrc、~/.bash_profile、~/.bash_login、~/.profile是用户目录下的私有变量设置。当进入系统运行一个bash shell进程时,读取环境设定过程如下:1、读取全局环境变量设置/etc/profile,然后根据其内容读取/etc/profile.d、/etc/bashrc等设定,但是注意/etc/profile只在第一次运行bash shell时读取一次,而/etc/bashrc在每次运行bash shell都读取;2、然后读取当前用户目录下的~/.bash_profile、~/.bash_login或~/.profile三个中的其中一个文件的局部变量设置,而且只在第一次运行bash shell时读取,只有读取~/.bash_profile失败才会读取~/.bash_login,如果前边两文件读取失败才会读取~/.profile;3、最后根据~/.bash_profile的内容读取当前用户目录下的~/.bashrc文件中的局部环境变量设置,~/.bashrc文件在每次打开新的bash shell都读取一次。总结一下,/etc/bashrc、/etc/profile、~/.bashrc、~/.bash_profile、~/.bash_login、~/.profile都能设置环境变量,而/etc/profile、~/.bash_profile、~/.bash_login、~/.profile可以设定路径、环境变量等,只能登入的时候执行一次;/etc/bashrc、~/.bashrc保存路径、命令别名等,每次打开新的bash shell都会执行一次,通常前者/etc/profile、~/.bash_profile调用后者/etc/bashrc、~/.bashrc。更详细的资料可以参考该链接:http://blog.chinaunix.net/uid-24591881-id-2124780.html 。
2.配置~/.vimrc和~/.gvimrc
首先,在MacVim编辑器中输入“:version”,看到如下图示信息:
从上图可以看出一些MacVim的配置信息:
$VIM系统变量的路径为:"/Applications/MacVim.app/Contents/Resources/vim"
MacVim的系统配置文件vimrc的路径:“$VIM/vimrc”
用户配置文件vimrc的路径:"$HOME/.vimrc"
MacVim编辑器的用户初始化配置文件的路径:"$HOME/.exrc" (默认不存在,如果需要使用则在终端输入 “touch $HOME/.vimrc”创建)
MacVim的系统配置文件gvimrc的路径:"$VIM/gvimrc"
用户配置文件gvimrc的路径:"$HOME/.gvimrc"
MacVim的菜单文件的路径:"$VIMRUNTIME/menu.vim"
另外解释下, $HOME为当前用户目录的路径,$VIMRUNTIME路径为"/Applications/MacVim.app/Contents/Resources/vim" . 可以在MacVim中输入”:echo $VIMRUNTIME“来查看这些系统变量的路径。
其次,从系统文件vimrc_example.vim和gvimrc_example.vim中copy标准的内容,保存到用户的配置文件~/.vimrc和~/.gvimrc中。在MacVim中输入如下命令:
- :e $VIMRUNTIME/vimrc_example.vim
- :saveas ~/.vimrc
- :e $VIMRUNTIME/gvimrc_example.vim
- :saveas ~/.gvimrc
3、添加插件
通常有如下两种方式添加插件:
其一:拷贝该 plugin_name.vim插件到你个人插件目录~/.vim/plugin/下,拷贝plugin_help.txt到你个人文档目录~/.vim/doc/下,若存在该插件syntax的vim支持文件则放到~/.vim/syntax/目录下,如果以上目录不存在到终端输入如下命令创建:
- cd $HOME
- mkdir .vim
- mkdir .vim/plugin
- mkdir .vim/doc
- mkdir .vim/syntax
其二,在你的vimrc配置文件最后加一行命令:
- source $VIMRUNTIME/macros/matchit.vim0
最后,还有一种不常用的方式可以安装插件,将插件、文档、syntax支持文件分别放到$VIMRUNTIME/plugin/ 、$VIMRUNTIME/doc/、$VIMRUNTIME/syntax/三个目录下,或者/usr/share/vim/vim73/plugin/、/usr/share/vim/vim73/doc/、/usr/share/vim/vim73/syntax三个目录下都可以使MacVim自动加载插件。
以上安装插件的方法都比较麻烦,并且每个插件的文件分散到几个文件夹去,不方便管理。在这里给各位推荐一个很方便管理插件的Vim插件vundle:https://github.com/gmarik/vundle。vundle可以使得安装的插件的文件都放到同一个目录下,并且简单设置就可使用。安装方法如下:
首先,在终端输入如下命令:
- git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
- set nocompatible " be iMproved
- filetype off " required!
- set rtp+=~/.vim/bundle/vundle/
- call vundle#rc()
- " let Vundle manage Vundle
- " required!
- "这是vundle本身的设置
- Bundle 'gmarik/vundle'
- " My Bundles here:
- "这里是设置你自己自定义的插件的设置vundle设置,注意:下载的插件git为:https://github.com/godlygeek/tabular.git,则设置为Bundle 'godlygeek/tabular';https://github.com/gmarik/vundle.git设置则为 Bundle 'gmarik/vundle'
- " original repos on github
- Bundle 'godlygeek/tabular'
- " vim-scripts repos,vim-scripts的访问地址,格式则如下:
- Bundle 'L9'
- Bundle 'FuzzyFinder'
- " non github repos ,非git的访问地址的,格式如下:
- Bundle 'git://git.wincent.com/command-t.git'
- " ...
- filetype plugin indent on " required!
- "
- " Brief help
- " :BundleList - list configured bundles
- " :BundleInstall(!) - install(update) bundles
- " :BundleSearch(!) foo - search(or refresh cache first) for foo
- " :BundleClean(!) - confirm(or auto-approve) removal of unused bundles
- "
- " see :h vundle for more details or wiki for FAQ
- " NOTE: comments after Bundle command are not allowed..
最后,登陆MacVim,运行:BundleInstall命令。这样,Vundle.vim管理插件就安装成功。接下来继续简单介绍下,Vundle插件的使用:
搜索新的插件:
- :BundleSearch matchit
安装新的插件:
- :BundleInstall matchit.zip
最后在~/.vimrc中的注释" vim-scripts repos下,加入如下命令并保存.vimrc文件,这样一个插件就安装成功了:
- Bundle 'matchit.zip'
更新所有安装的插件(这个命令会根据~/.vimrc的Bundle 设置来更新插件):
- :BundleInstall
- :BundleList
清除插件命名(这个命令我测试有些插件删除不了,手动删除~/.vim/bundle的相关插件的目录,并将~/.vimrc中的相关配置去掉即可):
- :BundleClean
上述中的Tabular插件是用于编码中的字符对齐的,关于其具体用法见链接:https://github.com/godlygeek/tabular.用法是选定一段文本,然后输入相应的命令来根据相应的字符对齐。几个常用的命令如下:
- :Tab /=
- :Tab /:
- :Tab /:\zs
- :Tab /|
推荐一些插件:
NERD_tree : 一个文件管理插件,一些常用命令: 打开一个目录树( :NERDTree <启动目录> | <bookmark> ) 关闭目录树栏(:NERDTreeClose);切换目录树栏(:NERDTreeToggle); 定义标签(:Bookmark <name>);定义Root标签(:BookmarkToRoot <bookmark>)。。。。。。更多命令和用法见 :help NERD_tree。
word_complete :代码自动补全
SuperTab :省去Ctrl-n或Ctrl-p快捷键,通过按tab键快速显示补全代码.
xptemplate : 快速自动完成一些if、switch、for、while结构模板代码,支持c、c++、Lua、Ruby、Php、html、css、javascript等多种语言。一般是输入结构体的关键字后,再按Ctrl-\组合键即可完成代码补全,然后按Tab键跳转到不同的位置替换模板内容。比如:输入for后按Ctrl-\组合键即可快速完成for结构的模板代码。
ctags : 一个扫描记录代码的语法元素,并记录为tag,方便代码定位跳转等操作,MacVim自带,但是据说有点问题,笔者用Vundle安装的貌似也有问题,推荐用MacPorts安装,然后在~/.gvimrc配置中加入: let Tlist_Ctags_Cmd="/opt/local/bin/ctags"。用法:在终端 cd 进入到你的项目根目录,输入语句即可将项目所有代码文件打上tag:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q .
taglist : 可以用Vundle安装,在编辑代码文件时,输入命令":TlistToggle"在右边就会出现当前类的函数或变量列表。输入命令“:tag <函数名或变量、类>”,如果只有一个文件定义了该函数或变量、类,vim打开该文件并将光标定位到对应的位置;如果多个文件有这个函数名或变量、类的tag,将给提示,并可输入“:tselect” ,显示可选的文件。快捷键跳转Ctrl+],Ctrl-o。
Cscope :功能跟ctags差不多,不过更加强大,MacVim默认已经支持,输入“:version”命令查看.
OmniCppComplete : 功能跟taglist差不多。
a.vim :在.cpp文件和.h头文件间快速切换的插件。
grep.vim : 在工程中查找词汇的插件。
minibufexplorerpp : 操作缓存buffer窗口。
quickfix :MacVim内置安装好了,不需要重新安装。显示一些命令查询结果以及编译错误等信息。
Command-t :用Commad-t命令快速查找切换文件。如果是用Vundle安装的话,还不能使用,在MacVim中输入“:CommandT”命令会报错。用Vundle安装好打开终端,输入如下命令,等待编译完毕后就可以使用了:
- cd ~/.vim/bundle/Command-T/ruby/command-t
- ruby extconf.rb
- make
NERD_commenter.vim : 注释插件。
DoxygenToolkit.vim : 用于快速生成注释,并由注释生成文档。
winmanager : 可以用Vundle安装,管理窗口的插件,可以跟NERD_tree、Taglist插件结合,打造一个类似IDE的界面。只需要在NERD_tree.vim中加入如下代码:
- let g:NERDTree_title = "NERDTree"
- function! NERDTree_Start()
- exec 'NERDTree'
- endfunction
- function! NERDTree_IsValid()
- return 1
- endfunction
并且在winmanager.vim的找到下面代码,增加一句代码:
- " toggle showing the explorer plugins.
- function! <SID>ToggleWindowsManager()
- if IsWinManagerVisible()
- call s:CloseWindowsManager()
- else
- call s:StartWindowsManager()
- "NERDTree 打开的时候有一个空白窗口,需要关闭
- exec 'q'
- end
- endfunction
最后在~/.gvimrc中加入如下配置:
- "在vim左侧显示窗口Taglist和文件列表窗口
- "let g:winManagerWindowLayout='FileExplorer,BufExplorer|TagList'