vim写cvim 代码格式化插件,有什么插件可以自动编译

(嵌入式开发者)
(IT互联网猎头)
第三方登录:&&22868 阅读
Vim插件入门
之前一直觉得vim插件好复杂的,太多了,也不知道装哪些好,怎么使用,在这里我简单整理了一下vim的一些常用的插件安装及基本使用,给自己做一个备份,同时给大家做一个参考。
一、SuperTab
(1)简要介绍
SuperTab使键入Tab键时具有上下文提示及补全功能。如下图
(2)轻松拥有
这个插件的安装比较简单,按以下步骤:
下载插件,进官网下载,请点击
用Vim打开下载的supertab.vmb文件,比如我下载到了Home目录下Downloads文件夹里,于是使用命令vim ~/Downloads/supertab.vmb打开文件
打开后,直接敲命令:UseVimball ~/.vim,出现下图所示
打开vim配置文件,vim ~/.vimrc,在最后加上一行内容
let g:SuperTabDefaultCompletionType=&context&
OK了,可以拿tab键去尝试了
(1)简要介绍
插件管理器,方便安装Vim众多插件。
(2)轻松拥有
插件管理器的安装方法官方README文档都有,建议直接看文档安装,点击标题进入。鉴于是英文的,这里还是简单的说明一下安装步骤:
下载Vundle
mkdir -p ~/.vim/bundle
cd ~/.vim/bundle
git clone /gmarik/Vundle.vim.git
没有.vim目录的先创建目录,git下载克隆插件到.vim的bundle目录下
配置各种插件,根据说明文档,敲入下面代码到.vimrc配置文件中就OK了
其实官方说明中,默认给装了很多插件,它是为了教你如何装各种来源的插件,故代码有些长,如下图。
这样Vundle这个插件管理器就安装完了。下面紧接着介绍如何用它来安装插件。
(1)简要介绍
根据名字,也能大概猜出它是一个语法检测的插件,变量类型写错了、句末分号忘加了(针对需要加分号的语言)等等语法错误都能自动检测出来。如下图所示。
(2)轻松拥有
这个插件代码是托管在Github上的,点击上面标题进入github地址,按照它的安装说明是需要装一个叫的插件管理器。但是这里我不这么装,因为个人觉得Vundle更加方便,再说插件管理器之前已经装过了,先入为主嘛。有了插件管理器,下面安装就简单了。
在.vimrc文件中加入一句
Plugin 'scrooloose/syntastic'
保存退出,进入vim,输入:PluginInstall,等待下载安装完成
OK,安装插件就是这么简单
(3)简单使用
保存文件时就会出现错误语法提示,如图有3处错误,光标定位到哪行,下面就显示该行错误提示。
(1)简要介绍
一款简单的括号匹配插件。一件让程序员们抓狂的事是:我是不是少加了最后一个括号?为了处理这个问题,Auto Pairs 这个插件会自动插入和格式化方括号和圆括号。
(2)轻松拥有
有了上面的插件管理器Vundle,安装这个插件那就太简单了。将下面这行代码加入.vimrc文件中。
Plugin 'jiangmiao/auto-pairs'
最后在vim界面上,运行:PluginInstall,等待,大功告成。
使用的话,自己去实际中体验吧。也可以点击标题查看说明文档
(1)简要介绍
如果你在找一个可以支持多种程序语言的注释代码的快捷键,你可以试试 NERD Commenter。即使你不是程序员,也非常非常推荐这款插件,因为它会让你在注释bash脚本或者其他任何东西的时候都会变得非常高效。
(2)轻松拥有
使用Vundle插件安装器,安装方法简单到我都不想介绍了,老规矩,在.vimrc中加入下面一句。
Plugin 'scrooloose/nerdcommenter'
OK了,运行vim,:PluginInstall,真正的轻松拥有。
(3)简单使用
使用很简单,但是也得看看官方Usage,不过一般只用到几个就行了,比如
\cc 注释当前行
\cu 撤销注释行
\cs sexily注释,C语言注释效果如上,不过我没看出哪里性感了
\cA 行尾注释,切换成输入模式
别看这个插件功能比较简单,但是强大之处就是可以用相同的方法给不同的语言添加注释,比如,bash是#,java是\\等等,很方便,居家旅行必备品。
还有一个插件叫,从名字上可以看出它俩应该是兄弟,同一个开发者开发的。下面紧接着就介绍它。
(1)简要介绍
它是一个文件浏览器,管理项目的时候,需要在不同的文件夹中编辑不同的文件代码,那么有了这个插件,你就方便了,不用来回的切换目录了,这样的Vim看起来有点像IDE了。
(2)轻松拥有
这里就不多说了,再讲就显得啰嗦了。Github地址请点击标题。
(3)简单用法
有些插件根本就不用介绍,装完就能用,但是有些还是需要记点快捷键的,至少这个就不会像SuperTab一样简单使用。
进入vim输入:NERDTree默认打开当前目录,当然可以打开指定目录,如:NERDTree /home/打开home目录,完事后敲?,直接显示帮助。下面列出常用的快捷键:
j、k分别下、上移动光标
o或者回车打开文件或是文件夹,如果是文件的话,光标直接定位到文件中,想回到目录结构中,按住Ctrl,然后点两下w就回来了
go打开文件,但是光标不动,仍然在目录结构中
i、s分别是水平、垂直打开文件,就像vim命令的:vs、:sp一样
gi、gs水平、垂直打开文件,光标不动
p快速定位到上层目录
P快速定位到根目录
K、J 快速定位到同层目录第一个、最后一个节点
在这里介绍了6个插件(其中一个插件管理器)的安装及用法,可以发现一些共性
下载。大部分插件都是在Github上下载的
安装。通过插件管理器,安装插件的方式都是一样的
用法。或看Usage,或:h PluginName查看帮助文档都可以了解它的用法
知道以上三点,差不多就掌握了vim插件的安装与使用了,接下来就是练习了。还有一些插件,诸如Snipmate、Tag List、undotree、gdbmgr、Ctags等,可以自行搜索学习。
关注移动互联网
算不上果粉的Apple产品热爱者
Linux爱好者
享受命令行的快感
新浪微博:
Vim是程序员、网站开发人员及系统管理员的重要工具,其速度和效率令其他的文本编辑器难以望其项背。问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
最近在尝试使用 Vim,有个问题请教,就
public class test {
public static void main(String args[]) {
System.out.print("shit,Test success!");
在 Vim 中,我可以直接运行调试吗,像 Sublime 的 cmd+B 一样。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
正常来说不可以,因为vim无法编译生成class文件
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
按题主的意思, 应该是编辑好代码后, 按一个快捷键直接自动编译并运行.
在vim中, 可通过:!cmd来执行外部命令. 对应于题主写的单文件:
#=& 编译, % 为正在编辑的文件名
:!java %:r
#=& 运行, %:r 去掉文件名的后缀
原理如此, 只是接下来设定键映射. 在.vimrc文件中, 添加以下内容
autocmd BufNewFile,BufReadPre *.java nmap &leader&rn :!javac %&cr&:!java %:r&cr&
意为, 新建或读入.java文件前, 自动映射快捷钕&leader&rn到指定命令.
当然你也可以设置成两个快捷键. 这里并不推荐使用Command快捷键, 而是使用Leader. 而事实上, 终端的vim也不能映射Command, 只有MacVim可以.
进阶一: 多文件
多文件其实也没什么, 只是在javac时, 换%为*.java, 换%:r为真正的main所在文件名.
进阶二: 项目
如果你的项目有固定的结构, 本质上是差不多的.
在编译时, 可能添加-cp选项指定依赖路径, 添加-d选项指定输出路径. 如要打包为jar, 再加快捷键.
你可以在项目根目录定义一个.project属性文件, 描述项目结构和依赖, 再用VimL语言或python语言, 读取属性文件, 分别编译再输出. 至于依赖, 去~/.m2/目录找, 它们的位置非常有规律.
现在, 你可以将键映射到上述操作了, 不就是快捷键吗, vim多的是. 除了Ctrl/Alt/Shift, 还有每个字母和数字, 还有leader加任意长度字母和数字, leader不够了, 还是mapleader前缀. 对了, 你可能更喜欢F1-F12.
进阶三: 依赖
OK, 你基本上已经重新发明了maven了, 只是差自动下载依赖的功能. 但python的网络库那么多, 我猜测mvn的仓库应该是对外开放的, 只要遵循相关协议就能下载. 包与包之前有依赖关系, 你可以用python再写个依赖处理算法.
虽然VimL残的跟渣一样, 但我们支持python啊, Ruby啊, Lua啊, 总有一款你喜欢的语言接口. 什么你觉得运行慢, 不要紧, 用C++写, 做成C/S架构的, 你看看YCM人家怎么实现的, 仿照一个呗.
终极: 补全
好了, 编译运行打包依赖都解决了, 但也撑死算一个项目管理插件. 写Java没有补全, 那么多API, 那么长的方法名, 还有各种样板写法和各种奇怪的异常抛出, 手写Java代码真是力气活, 还拼脑容量.
这怎么行, 必须搞个补全插件. Vim界补全的王者YCM是在Clang横空出世后, 才搞出来的. 在这之前, GNU的g++是不会共享语法分析的数据的. 你得自己写一个语法分析器, 对, 给C++..., 才能进行智能补全.
那么, Java这边究竟什么情况, 我还真不知道, 但就Java95年就搞出来, vim91年就搞出来了, 它俩共渡的日子少算也有20年了, 在这期间, 各种Java IDE导出不穷, 但也没见谁搞出个屎来.
YCM对Java提供的补全, 使用eclim, 它和YCM没有关系, YCM只是提供接口, eclim没有YCM也能正常工作. eclim插件的使用, 需要安装eclipse, Java界以缓慢开源著称的IDE. 也就是说, eclim在底层使用eclipse来补全. 如果你不介意超缓慢的启动速度和补全速度, 可以一试.
这简直不能忍, 题主横刀立马, 开始着手用C++写个Java的语法分析器, 做成C/S架构, 在插件中与服务器沟通来补全. 你也可以直接给YCM写个Java后端.
据说, Java语法规范页数已经超过C++. 但没事, 没有困难也要创造困难上, 更何况是有困难呢.
至此, 我已经给题主指明了一条通神之路, 翻过荆棘, 你将一跃成为vim和Java两界永远的大神, 彻底终结Vim不适合写Java的诅咒. 两派子弟必将永久膜拜朝奉.
如果你写出来时, Java还活着的话..., JVM平台的兄弟语言有点多...
为什么不说vim啊, 因为vim教永生!!!
特此声明, 本文不包含任何对题主的调侃或戏谑或嘲讽或质疑什么的, 如让题主不爽, 我也不会道歉.
说这些, 只是说, 对于vim真没什么不可能的, 只要你有只够的技能时间. 这主要因为vim只是一个编辑器, 它把该开放的接口都开放了, 你想干什么, 写插件就OK了. Vim的中文手册, 抛开一些更新日志, 至少有1500页. 即便你看完了, 也不见得会写插件, 还要看书. 只就Vim的快捷键和操作, 我粗略了记了一下前300页的用户指南, 笔记就记了1000多行, 这还是精简到估计只有我自己能看懂.
通常, 在这个问题上, Vim提供了:make接口来编译, 和makeprg来设置编译参数. 但也要承认, Vim设计之初, 大部分的设计都是为C这样的编译语言做的, 像文本对象a{是选择{}中的代码, 但对于python来说, 块代码是同缩进的代码, 没有{}, 对Scala来说, 块只有一条语句时, 可以省略{}.
献给所有曾试图写Java而痛苦挣扎的Vimers, 请不要害怕, 我也是你们的一员
Vim并不完美, 但比绝大多数Vimer相像的要完美.
我相信, 每个初学Vim, 并被Vim的强大折服的人, 都曾试图豪言, Vim在手, 天下我有. 然后, 在工作中碰到了Java, 陷入装逼痛苦的泥淖中, 然后, 要么决定找一份别的工作, 要么用上了IDE. 待再次回头, 便看到了Vim的局限.
看到一个工具的强大并不是了解, 看到它的局限才是真正的了解.
黄色的树林里分出两条路
而我选择了IDE
单文件java文件编译映射, 只回车一次, 减少干扰
autocmd BufNewFile,BufReadPre *.java nnoremap &leader&rs :up &bar& !javac % && java %:r&cr&
autocmd BufNewFile,BufReadPre *.java nnoremap &leader&cs :up &bar& !javac %&cr&
这样基本上, 在同目录下, 库文件用&leader&cs编译, 执行文件用&leader&rs来编译运行.
这里的rs是run single file的缩写, 同cs为compile single file.
主要是为也对应rp和cp. 可以使用:!mvn subcmd来映射编译和运行项目文件. p为project.
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:你的 Vim 用到了哪些插件? 有哪些是你觉得必备的?
19:09:49 +08:00 · 14003 次点击
我用Vundle管理插件, 以下是我的Bundle列表, 抛砖引玉:Bundle 'gmarik/vundle'Bundle 'The-NERD-Commenter'Bundle 'The-NERD-tree'Bundle 'taglist.vim'Bundle 'YankRing.vim'Bundle 'kien/ctrlp.vim'Bundle 'molokai'Bundle 'colorizer'Bundle 'pyflakes.vim'Bundle 'python.vim'Bundle 'plasticboy/vim-markdown'Bundle 'matchit.zip'Bundle 'repeat.vim'Bundle 'surround.vim'Bundle 'tpope/vim-fugitive'Bundle 'Lokaltog/vim-powerline'Bundle 'mattn/emmet-vim'Bundle 'Valloric/YouCompleteMe'Vim插件众多, 相互之间还容易冲突, 因此我对插件是有洁癖的, 能不用的都尽量不用, 以上这些都是精品.大家也来晒一晒吧, 希望能从相互之间发现更多有用的插件.
22 回复 &| &直到
01:55:11 +08:00
& & 19:12:35 +08:00
sublime用户,来感谢一下,vim插件配置太复杂了,楼主能不能把你的配置做个自动化部署?我也写python
& & 19:18:55 +08:00
@ 托管在github的:
clone后可&一键&安装:
./install.sh
不过这当中唯一复杂的插件是最后那个YouCompleteMe, 需要编译, 但也是最强大的.
怕麻烦的可以先注释掉它, 其它的就是真正的一键安装了.
& & 19:19:51 +08:00
@ osx 10.9可用否?上次貌似死在这个插件~
& & 19:21:25 +08:00
@ 我就是osx 10.9, 毫无问题.
& & 19:27:12 +08:00
Bundle 'Lokaltog/vim-easymotion'
Bundle 'terryma/vim-multiple-cursors'
个人估计用最多的
& & 19:46:06 +08:00
Plugin 'mileszs/ack.vim'
Plugin 'mattn/gist-vim'
Plugin 'altercation/vim-colors-solarized'
Plugin 'kien/ctrlp.vim'
Plugin 'dyng/ctrlsf.vim'
Plugin 'rizzatti/funcoo.vim'
Plugin 'rizzatti/dash.vim'
Plugin 'mattn/webapi-vim'
Plugin 'mattn/emmet-vim'
Plugin 'sjl/gundo.vim'
Plugin 'scrooloose/nerdtree'
Plugin 'moll/vim-node'
Plugin 'scrooloose/syntastic'
Plugin 'tpope/vim-repeat'
Plugin 'Lokaltog/vim-easymotion'
Plugin 'tpope/vim-fugitive'
Plugin 'airblade/vim-gitgutter'
Plugin 'pangloss/vim-javascript'
Plugin 'maksimr/vim-jsbeautify'
Plugin 'elzr/vim-json'
Plugin 'tpope/vim-markdown'
Plugin 'xolox/vim-misc'
Plugin 'xolox/vim-notes'
Plugin 'xolox/vim-session'
Plugin 'tpope/vim-surround'
Plugin 'empanda/vim-varnish'
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'xolox/vim-shell'
Plugin 'scrooloose/nerdcommenter'
Plugin 'Shougo/vimproc'
Plugin 'Shougo/unite.vim'
Plugin 'm2mdas/phpcomplete-extended'
Plugin 'godlygeek/tabular'
Plugin 'othree/xml.vim'
Plugin 'vim-scripts/Greplace.vim'
Plugin 'tommcdo/vim-exchange'
Plugin 'evanmiller/nginx-vim-syntax'
好多,强烈推荐 gundo.vim ultisnips Greplace vim-gitgutter ctrlsf.vim ctrlp.vim
YouCompleteMe 找不到可选项会显示错误,对输入造成很大干扰,实在受不了不用了。
& & 19:53:36 +08:00
@ 这个插件确实比较麻烦, 但它能实现多种语言基于语法的定义跳转和补全, 还不用像ctags那样生成tags, 都是实时进行的, 用上之后就无法放下了.
& & 20:26:18 +08:00 via iPhone
有没有什么好用的括号,引号补全插件啊?
& & 20:30:26 +08:00
@ Townk/vim-autoclose 不错
& & 20:48:43 +08:00
& original repos on github
Bundle 'kevinw/pyflakes-vim'
Bundle 'Lokaltog/vim-powerline'
Bundle 'fs111/pydoc.vim'
Bundle 'chriskempson/tomorrow-theme'
Bundle 'kien/rainbow_parentheses.vim'
& vim-scripts repos
Bundle 'taglist.vim'
Bundle 'Tagbar'
Bundle 'TaskList.vim'
Bundle 'snipMate'
Bundle 'ZenCoding.vim'
Bundle 'Tabular'
Bundle 'Auto-Pairs'
Bundle 'Pydiction'
Bundle 'The-NERD-tree'
Bundle 'neocomplcache'
Bundle 'Color-Scheme-Explorer'
& & 20:52:15 +08:00
@ 'Raimondi/delimitMate'我觉得这个应该好一点,因为star数多一些:-)
& & 20:52:22 +08:00
@ 能实现 php 的定义跳转和补全不。上次用了下貌似不行
& & 21:06:18 +08:00
最最最常用的
==============
语法检查
Bundle 'scrooloose/syntastic'
自动补全
Bundle 'Valloric/YouCompleteMe'
Bundle 'Raimondi/delimitMate'
Bundle 'docunext/closetag.vim'
代码片段
Bundle 'SirVer/ultisnips'
Bundle 'honza/vim-snippets'
编辑
Bundle 'scrooloose/nerdcommenter'
Bundle 'tpope/vim-surround'
Bundle 'tpope/vim-repeat'
移动
Bundle 'Lokaltog/vim-easymotion'
Bundle 'vim-scripts/matchit.zip'
选中
Bundle 'terryma/vim-expand-region'
Bundle 'terryma/vim-multiple-cursors'
其他
Bundle 'bling/vim-airline'
Bundle 'kien/rainbow_parentheses.vim'
Bundle 'kien/ctrlp.vim'
Bundle 'majutsushi/tagbar'
& & 21:39:31 +08:00
& & 21:53:17 +08:00
Bundle 'taglist.vim'
Bundle 'TaskList.vim'
Bundle 'fholgado/minibufexpl.vim'
& Bundle 'scrooloose/nerdtree'
Bundle 'L9'
Bundle 'FuzzyFinder'
& This will enabled when has(&lua&).
if has(&lua&)
Bundle 'Shougo/neocomplete'
else
Bundle 'Shougo/neocomplcache'
endif
Bundle 'Shougo/neosnippet'
Bundle 'Shougo/neosnippet-snippets'
Bundle 'Shougo/neomru.vim'
Bundle 'Shougo/unite.vim'
Bundle 'Rykka/riv.vim'
Bundle 'scrooloose/syntastic'
Bundle 'majutsushi/tagbar'
Bundle 'fs111/pydoc.vim'
& Draw
Bundle 'DrawIt'
& colorscheme
Bundle 'altercation/vim-colors-solarized'
Bundle 'nanotech/jellybeans.vim'
Bundle '29decibel/codeschool-vim-theme'
& input.
& Bundle 'vimim/vimim'
Bundle 'Lokaltog/vim-powerline'
Bundle 'ivanov/vim-ipython'
Bundle 'sudo.vim'
Bundle 'plsql.vim'
Bundle 'plasticboy/vim-markdown'
Bundle 'groovy.vim'
Bundle 'tfnico/vim-gradle'
& For Dash.app
Bundle 'rizzatti/funcoo.vim'
Bundle 'rizzatti/dash.vim'
& Racket
Bundle 'wlangstroth/vim-racket'
& Lua
Bundle 'xolox/vim-misc'
Bundle 'xolox/vim-lua-ftplugin'
& multiple select
Bundle 'terryma/vim-multiple-cursors'
Bundle 'airblade/vim-gitgutter'
& git nerd tree.
Bundle 'Xuyuanp/git-nerdtree'
总结下:
必备:minibufexpl.vim, riv.vim, syntastic, sudo.vim, vim-multiple-cursors, vim-gitgutter, git-nerdtree, Shougo的complete很好用。
vim颜色主题:vim-colors-solarized, codeschool-vim-theme, vim-powerline
C/C++必备:taglist/tagbar,cscope
python: vim-ipython
reStructeredText: Rykka的riv.vim
markdown: vim-markdown
gradle: groovy.vim, vim-gradle
Lua: xolox/vim-misc, xolox/vim-lua-ftplugin
& & 03:58:57 +08:00 via Android
vim还可以装插件(;;;;;°?°)
& & 05:37:58 +08:00 via iPhone
@ 谢谢,试试看
& & 06:39:25 +08:00
& & 09:21:26 +08:00
只用 nerdtree 的飘过
& & 10:57:39 +08:00
& use vim by default
set nocompatible
filetype off
& vundle {{{
if has('win32')
set rtp+=$VIM/vimfiles/bundle/vundle/
call vundle#rc('$VIM/vimfiles/bundle/')
else
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
endif
Bundle 'gmarik/vundle'
&}}}
& programming {{{
Bundle 'Lokaltog/vim-powerline'
Bundle 'tpope/vim-fugitive'
Bundle 'wesleyche/Trinity'
Bundle 'wesleyche/SrcExpl'
Bundle 'klen/python-mode'
Bundle 'taglist.vim'
Bundle 'majutsushi/tagbar'
if has('unix') && system('uname') !~ &Darwin&
Bundle 'fcitx.vim'
endif
Bundle 'DoxygenToolkit.vim'
Bundle 'utl.vim'
Bundle 'chrisbra/NrrwRgn'
Bundle 'Figlet.vim'
Bundle &scrooloose/syntastic&
Bundle &davidhalter/jedi-vim&
Bundle &jnwhiteh/vim-golang&
if v:version & 703 || (v:version == 703 && has('patch584'))
Bundle &Valloric/YouCompleteMe&
endif
Bundle &maksimr/vim-jsbeautify&
&}}}
& utils {{{
Bundle 'kien/ctrlp.vim'
Bundle 'mileszs/ack.vim'
&}}}
& vimshell {{{
Bundle &Shougo/vimshell.vim&
Bundle &Shougo/vimproc.vim&
Bundle &Shougo/unite.vim&
&}}}
& perl regular expression {{{
Bundle &othree/eregex.vim&
&}}}
&color scheme {{{
Bundle 'peaksea'
Bundle 'desert256.vim'
Bundle 'vim-scripts/tir_black'
Bundle 'vim-scripts/af.vim'
Bundle 'vim-scripts/enzyme.vim'
Bundle 'vim-scripts/tango.vim'
Bundle 'nanotech/jellybeans.vim'
Bundle 'twerth/ir_black'
Bundle 'tomasr/molokai'
Bundle 'Lokaltog/vim-distinguished'
Bundle 'rainux/vim-desert-warm-256'
&}}}
& syntax {{{
Bundle 'vim-scripts/nasl.vim'
Bundle 'csharp.vim'
Bundle &pangloss/vim-javascript&
Bundle 'plasticboy/vim-markdown'
Bundle 'henices/vim-nbin'
Bundle 'leshill/vim-json'
&}}}
& orgmode {{{
Bundle 'jceb/vim-orgmode'
&Bundle 'hsitz/VimOrganizer'
Bundle 'hughbien/org-vim'
Bundle 'tpope/vim-speeddating'
Bundle 'mattn/calendar-vim'
Bundle 'dhruvasagar/vim-table-mode'
& }}}
filetype plugin indent on
& & 18:51:12 +08:00
和同学都一直在用这个,还不错。
& & 01:55:11 +08:00
@ 貌似本地下载好几个连不上。请问怎么破的。
& · & 1589 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.0 · 59ms · UTC 09:14 · PVG 17:14 · LAX 01:14 · JFK 04:14? Do have faith in what you're doing.下次自动登录
现在的位置:
& 综合 & 正文
一步步将vim改造成C/C++开发环境(IDE)
转载请注明出处
原文地址http://blog168.chinaunix.net/space.php?uid=&do=blog&id=2855999
【参考资料】
我的vim IDE界面:
1、安装Vim和Vim基本插件
首先安装好Vim和Vim的基本插件。这些使用apt-get安装即可:
apt-get install vim vim-scripts vim-doc
其中vim-scripts是vim的一些基本插件,包括语法高亮的支持、缩进等等。
vim中文帮助文档tar包下载地址:
解压后其中有个doc文件夹, 将其中的内容全部复制到~/.vim/doc, 或者vim安装目录下的doc目录中, 此时vim中的help信息已经是中文的了.
网页版中文帮助文档网址
首页就时vim帮助文档的目录,阅读起来更方便有效、更有针对性!
2、Vim配置文件
Vim强大的功能,其来源基本上就两个地方:Vim插件以及Vim配置文件。Vim本身的系统配置文件夹是在/usr/share/vim/和/etc/vim/两个文件夹下。一般情况下,我们不会去改变这两个文件夹下的配置文件,而是在用户文件夹/home/user(其中,user为用户名,我的用户名是lingd)下建立自己的配置文件。进入用户文件夹(/home/user/)之后,用gedit新建一个名叫.vimrc的文件:
gedit .vimrc
注:使用gedit主要是为了方便大段大段的文字粘贴!
然后把下面的文字拷贝进这个文件之后保存:
" This line should not be removed as it ensures that various options are
" properly set
to work with the Vim-related packages available
in Debian.
debian.vim
" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets
'nocompatible'. Setting
'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
set nocompatible
" Vim5 and later versions support syntax highlighting. Uncommenting the
" following enables syntax highlighting by default.
if has("syntax")
" 语法高亮
colorscheme ron
" elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下
" detect file type
filetype on
filetype plugin on
" If using a dark background within the editing area and syntax highlighting
" turn on this
option as well
set background=dark
" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
au BufReadPost *
if line("'\"") & 1 && line("'\"")
&= line("$")
| exe "normal! g'\"" | endif
"have Vim load indentation rules and plugins according
to the detected filetype
filetype plugin indent on
" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
"set ignorecase
" 搜索模式里忽略大小写
"set smartcase
" 如果搜索模式包含大写字符,不使用
'ignorecase' 选项。只有在输入搜索模式并且打开
'ignorecase' 选项时才会使用。
set autowrite
" 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
set autoindent
" 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置
"set smartindent
" 智能对齐方式
set tabstop=4
" 设置制表符(tab键)的宽度
set softtabstop=4
" 设置软制表符的宽度
set shiftwidth=4
" (自动) 缩进使用的4个空格
set cindent
" 使用 C/C++ 语言的自动缩进方式
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,&1s,=1s,:1s
"设置C/C++语言的具体缩进方式
"set backspace=2
" 设置退格键可用
set showmatch
" 设置匹配模式,显示匹配的括号
set linebreak
" 整词换行
set whichwrap=b,s,&,&,[,] " 光标从行首和行末时可以跳到另一行去
"set hidden " Hide buffers when they are abandoned
set mouse=a
" Enable mouse usage (all modes)
set number
" Enable line number
"set previewwindow
" 标识预览窗口
set history=50
" set command history to 50
"历史记录50条
"--状态行设置--
set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
" 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。
"--命令行设置--
set showcmd
" 命令行显示输入的命令
set showmode
" 命令行显示vim当前模式
"--find setting--
set incsearch
" 输入字符串就显示匹配点
set hlsearch
注:配置文件中,以单个双引号开头的文字为注释。
保存文件之后,启动Vim。此时,Vim已经是这种效果了(语法高亮挺漂亮的–这个是由vim-scripts中的插件支持的):
3、ctags安装与配置ctags可以建立源码树的标签索引(标签就是一个标识符被定义的地方,如函数定义),使程序员在编程时能迅速定位函数、变量、宏定义等位置去查看原形以下是在ubuntu下ctags的下载安装和配置过程:
下载并安装ctags,终端输入命令
sudo apt-get install ctags
建立源码索引,比如我经常需要查阅Linux的内核代码,而这些代码放在/home/lingd/arm/linux-2.6.24.7目录下
那么在终端进入到该目录后,输入命令ctags -R *,你会发现多了一个tags文件,这个就是索引文件
cd linux-2.6.24.7
Documentation
MAINTAINERS
REPORTING-BUGS
ctags -R *
Documentation
MAINTAINERS
REPORTING-BUGS
向vim注册索引文件tags的路径,
vi ~/.vimrc
在打开文件的最后添加如下内容(当然,具体路径根据你自己的情况)
"--ctags setting--
" 按下F5重新生成tag文件,并更新taglist
-R --c++-kinds=+p
--fields=+iaS
--extra=+q
:TlistUpdate&CR&
&ESC&:!ctags
-R --c++-kinds=+p
--fields=+iaS
--extra=+q
:TlistUpdate&CR&
set tags=tags
set tags+=./tags
"add current directory's generated tags file
set tags+=~/arm/linux-2.6.24.7/tags "add new tags file(刚刚生成tags的路径,在ctags
-R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)
set tags+=./tags表示在当前工作目录下搜索tags文件
set tags+=~/arm/linux-2.6.24.7/tags表示在搜寻tags文件的时候,也要搜寻~/arm/linux-2.6.24.7/文件夹下的tags文件。
然后保存并退出vi。这样,你就可以用vim在任意地方查看有关Linux的函数原形
------------------------------------
tag命令用法:Ctrl+]
跳到当前光标下单词的标签Ctrl+O
返回上一个标签Ctrl+T
返回上一个标签:tag TagName 跳到TagName标签
以上命令是在当前窗口显示标签,当前窗口的文件替代为包标签的文件,当前窗口光标跳到标签位置。如果不希望在当前窗口显示标签,可以使用以下命令::stag TagName 新窗口显示TagName标签,光标跳到标签处Ctrl+W + ]
新窗口显示当前光标下单词的标签,光标跳到标签处
当一个标签有多个匹配项时(函数 (或类中的方法) 被多次定义),":tags" 命令会跳转到第一处。如果在当前文件中存在匹配,那它将会被首先使用。
可以用这些命令在各匹配的标签间移动::tfirst
到第一个匹配:[count]tprevious 向前 [count] 个匹配:[count]tnext
向后 [count] 个匹配:tlast
到最后一个匹配
或者使用以下命令选择要跳转到哪一个:tselect TagName
输入以上命令后,vim会为你展示一个选择列表。然后你可以输入要跳转到的匹配代号 (在第一列)。其它列的信息可以让你知道标签在何处被定义过。
以下命令将在预览窗口显示标签:ptag TagName 预览窗口显示TagName标签,光标跳到标签处Ctrl+W + }
预览窗口显示当前光标下单词的标签,光标跳到标签处:pclose
关闭预览窗口:pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用):psearch atoi 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。
最简单的使用方法举例
用vi在任意目录写一个Test.c文件,内容如下:
int main(void)
printf("Hello World!\n");
写好后末行模式输入w保存好(不要退出vi),按Esc回到指令模式,把光标停留在printf上
然后按 Ctrl+W + ],vi会自动跳到Linux系统函数printf()处,这时我们能查看printf()的原形
查看完了,按Ctrl+o(回到上一个标签) 就回到原来的地方
4、管理vim插件——vim-addons通过vim-addons,我们可以管理vim插件。我们在sudo apt-get install vim vim-scripts vim-doc时,一般会自动安装上vim-addons。若未安装可通过sudo apt-get install vim-addon-manager手动安装。安装完成后,就可以用vim-addons管理vim插件了。
# 系统中已有的vim-scripts中包含的插件及其状态:
vim-addons status
User Status
System Status
bufexplorer
colors sampler pack
detectindent
doxygen-toolkit
editexisting
enhanced-commentify
markdown-syntax
minibufexplorer
nerd-commenter
omnicppcomplete
python-indent
secure-modelines
snippetsEmu
vcscommand
whatdomain
winmanager
上面我们介绍了如何独立于系统配置文件之外,建立自己的Vim配置文件。当我们自己下载安装Vim插件的时候,也可以另外建立目录,放置我们自己的插件。这个目录一般为/home/user/.vim,另外还需要建立一个插件子目录,一个插件文档子目录,以上的可以进入/home/user目录下通过下面的命令执行:
mkdir .vim
mkdir plugin
# vim官方插件的安装,xxxx是要安装的插件名,以status中显示的名称为准。安装插件xxxx时使用以下命令(前提是在目录/home/user/.vim/下建立好了plugin和doc两个文件夹)vim-addons install xxxx
关于vim-addons命令的详细用法,可以通过“man vim-addons”查看其帮助文档
5、vim自动补全——OmniCppComplete
vim的自动补全功能可通过其插件OmniCppComplete实现。安装OmniCppComplete
vim-addons install omnicppcomplete
配置OmniCppComplete
在vim配置文件/home/user/.vimrc中加入如下的配置:
"-- omnicppcomplete setting --
" 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
&C-X&&C-O&
" 按下F2根据头文件内关键字补全
imap &F2& &C-X&&C-I&
set completeopt=menu,menuone " 关掉智能补全时的预览窗口
let OmniCpp_MayCompleteDot
= 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with
let OmniCpp_MayCompleteScope
= 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item
(but don't insert)
let OmniCpp_NamespaceSearch
= 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype
in popup window
let OmniCpp_GlobalScopeSearch=1
" enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
"let OmniCpp_DefaultNamespaces=["std"]
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation
and remove the last column
let OmniCpp_ShowAccess=1
(前几行就是提供了C++中的./-&/::等操作符的提示和自动完成)。
OmniCppComplete是基于ctags数据库即tags文件实现的(基于ctags生成的索引信息来实现自动补全的),所以在ctags -R生成tags时还需要一些额外的选项,这样生成的tags文件才能与OmniCppComplete配合运作。使用下列命令生成tags文件,就可以与OmniCppComplete配合运作:ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .--c++-kinds=+p
: 为C++文件增加函数原型的标签--fields=+iaS
: 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)--extra=+q
: 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
# vim自动补全功能的测试
# 为了测试自动补全功能,我们先下载C++一份C++标准库的源代码。
sudo apt-get install build-essential
# 然后在/usr/include/c++下就可以找到标准库的头文件了。
cd /usr/include/c++
# 在此文件夹下生成能与OmniCppComplete配合运作的tags文件
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
# 在vim的配置文件中如下内容,然后在编程的时候就可以使用自动补全功能了。
vi ~/.vimrc
set tags+=/usr/include/c++/tags
# 用vi打开前面的Test.c文件,在printf("Hello World!\n")下一行中,输入pri,然后按下Ctrl+X Ctrl+O,此时vi会弹出一个窗口,所有以pri开头的tag都会出现在这个窗口中,printf就出现在第6行中
vim Test.c
注意:在自动补全的点,Vim必须知道可能补全的定义。比如说,在namespace std命名空间下的变量和函数,必须要用暴露出来,否则是不能补全的。在.cpp文件中还可以,在.h文件中这样就不是好的做法了。暂时不知道这个问题是由于我自己配置错误还是程序没有实现。
当自动补全下拉窗口弹出后,一些可用的快捷键:Ctrl+P
向前切换成员Ctrl+N
向后切换成员Ctrl+E
表示退出下拉窗口, 并退回到原来录入的文字Ctrl+Y
表示退出下拉窗口, 并接受当前选项
其他补全方式:Ctrl+X Ctrl+L 整行补全Ctrl+X Ctrl+N
根据当前文件里关键字补全Ctrl+X Ctrl+K
根据字典补全Ctrl+X Ctrl+T
根据同义词字典补全Ctrl+X Ctrl+I
根据头文件内关键字补全Ctrl+X Ctrl+]
根据标签补全Ctrl+X Ctrl+F
补全文件名Ctrl+X Ctrl+D
补全宏定义Ctrl+X Ctrl+V
补全vim命令Ctrl+X Ctrl+U
用户自定义补全方式Ctrl+X Ctrl+S
帮助文档:help omnicppcomplete
6、提示函数原型echofuncechofunc可以在命令行中提示当前输入函数的原型。echofunc下载地址:
下载完成后,把echofunc.vim文件放到 ~/.vim/plugin文件夹中
当你在vim插入(insert)模式下紧接着函数名后输入一个"("的时候, 这个函数的声明就会自动显示在命令行中。如果这个函数有多个声明, 则可以通过按键"Alt+-"和"Alt+="向前和向后翻页, 这个两个键可以通过设置g:EchoFuncKeyNext和g:EchoFuncKeyPrev参数来修改。这个插件需要tags文件的支持, 并且在创建tags文件的时候要加选项"--fields=+lS"(OmniCppComplete创建的tag文件也能用), 整个创建tags文件的命令如下:
$ ctags -R --fields=+lS
其他插件说明详见echofunc.vim
如果你在编译vim时加上了"+balloon_eval"特性,那么当你把鼠标放在函数名上的时候会有一个tip窗口弹出, 该窗口中也会有函数的声明
7、标签浏览器TaglistTaglist用于列出了当前文件中的所有标签(宏, 全局变量, 函数名等)安装Taglist
vim-addons install taglist
配置Taglist
在vim配置文件/home/user/.vimrc中加入如下的配置:
"-- Taglist setting --
let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行
let Tlist_Use_Right_Window=1
"让窗口显示在右边,0的话就是显示在左边
let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表
let Tlist_File_Fold_Auto_Close=1
"非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim
"是否一直处理tags.1:处理;0:不处理
let Tlist_Process_File_Always=1 "实时更新tags
let Tlist_Inc_Winwidth=0
进入vim后用命令":Tlist"打开/关闭taglist窗口
帮助文档:help taglist.txt
8、文件浏览器和缓冲区管理器WinManagerWinManager用于管理文件浏览器和缓冲区(buffer)。2.0以上版本的WinManager还可以管理其他IDE类型插件,不过要用户在插件中增加一些辅助变量和hook来支持WinManager(帮助文档有相关说明)。
Taglist插件本身就提供了对WinManager的支持,不需要我们去修改它。这里,我们就用WinManager来管理文件浏览器netrw和标签浏览器Taglist。netrw是标准的vim插件, 已经随vim一起安装进系统里了, 不需要我们自行下载安装。
安装WinManager
vim-addons install winmanager
配置WinManager
在vim配置文件/home/user/.vimrc中加入如下的配置:
"-- WinManager setting --
let g:winManagerWindowLayout='FileExplorer|TagList' " 设置我们要管理的插件
"let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了,退出vim
nmap wm :WMToggle&cr&
常用命令:WMToggle 打开/关闭WinManage,不过我们在配置文件.vimrc中做了快捷键映射,所以直接按wm就可以打开/关闭WinManage
文件浏览器命令(在文件浏览器窗口中使用)&enter&或双击
如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件&tab&
如果光标下是目录, 则进入该目录; 如果光标下文件, 则在新窗口打开该文件&F5& 刷新列表-
返回上一层目录c
使浏览目录成为vim当前工作目录d
删除当前光标下的目录或文件i
切换显示方式R
文件或目录重命名s
选择排序方式r
反向排序列表x
定制浏览方式, 使用你指定的程序打开该文件
winmanager帮助文档:help winmanager
netrw帮助文档:help netrw
9、buffer管理器MiniBufferExplorerMiniBufferExplorer用于浏览和管理buffer,如果只打开一个文件,是不会显示在屏幕上的,而打开多个文件之后,会自动出现在屏幕上。vim也有自带的buffer管理工具,不过只有:ls, :bnext, :bdelete 等的命令, 既不好用, 又不直观.
关于vim缓冲区(buffer)和窗口的概念(详见:help windows)"缓冲区" 是一块内存区域,里面存储着正在编辑的文件。如果没有把缓冲区里的文件存盘,那么原始文件不会被更改。"窗口" 被用来查看缓冲区里的内容。你可以用多个窗口观察同一个缓冲区,也可以用多个窗口观察不同的缓冲区。"屏幕" Vim 所用的整个工作区域,可以是一个终端模拟窗口,也被叫做 "Vim 窗口"。一个屏幕包含一个或多个窗口,被状态行和屏幕底部的命令行分割。
+-------------------------------+
|=== 状态行
===|==== 状态行 ===|
|========== 状态行 =============|
+-------------------------------+
安装MiniBufferExplorer
vim-addons install minibufexplorer
配置MiniBufferExplorer
在vim配置文件/home/user/.vimrc中加入如下的配置:
" -- MiniBufferExplorer --
let g:miniBufExplMapWindowNavVim = 1 " 按下Ctrl+h/j/k/l,可以切换到当前窗口的上下左右窗口
let g:miniBufExplMapWindowNavArrows
= 1 " 按下Ctrl+箭头,可以切换到当前窗口的上下左右窗口
let g:miniBufExplMapCTabSwitchBufs = 1 " 启用以下两个功能:Ctrl+tab移到下一个buffer并在当前窗口打开;Ctrl+Shift+tab移到上一个buffer并在当前窗口打开;ubuntu好像不支持
"let g:miniBufExplMapCTabSwitchWindows = 1 " 启用以下两个功能:Ctrl+tab移到下一个窗口;Ctrl+Shift+tab移到上一个窗口;ubuntu好像不支持
let g:miniBufExplModSelTarget
" 不要在不可编辑内容的窗口(如TagList窗口)中打开选中的buffer
常用命令&Tab&
移到上一个buffer&Shift-Tab& 移到下一个buffer&Enter&
打开光标所在的bufferd
删除光标所在的buffer
10、代码折叠fold折叠用于把缓冲区内某一范围内的文本行显示为屏幕上的一行。就像一张纸,要它缩短
些,可以把它折叠起来:
+------------------------+
|_______________________ |
\________________________\
/ 被折叠的行
/________________________/
+------------------------+
那些文本仍然在缓冲区内而没有改变。受到折叠影响的只是文本行显示的方式。
折叠的好处是,通过把多行的一节折叠成带有折叠提示的一行,会使你更好地了解对文本
的宏观结构。
折叠方式foldmethod
vim提供以下6种方法来选定折叠方式:manual 手工定义折叠indent 更多的缩进表示更高级别的折叠expr 用表达式来定义折叠syntax 用语法高亮来定义折叠diff 对没有更改的文本进行折叠marker 对文中的标志折叠
折叠级别foldlevel'foldlevel' 是个数值选项:数字越大则打开的折叠更多。
当 'foldlevel' 为 0 时,所有的折叠关闭。
当 'foldlevel' 为正数时,一些折叠关闭。
当 'foldlevel' 很大时,所有的折叠打开。
折叠栏foldcolumn'foldcolumn' 是个数字,它设定了在窗口的边上表示折叠的栏的宽度。当为0时,没有折叠栏。最大是12。
一个打开的折叠由一栏来表示,顶端是 '-',其下方是 '|'。这栏在折叠结束的地方结束。当折叠嵌套时,嵌套的折叠出现在被包含的折叠右方一个字符位置。
一个关闭的折叠由 '+' 表示。
当折叠栏太窄而不能显示所有折叠时,显示一数字来表示嵌套的级别。
在折叠栏点击鼠标,可以打开和关闭折叠:- 点击 '+' 打开在这行的关闭折叠
- 在任何其他非空字符上点击,关闭这行上的打开折叠
在vim配置文件/home/user/.vimrc中加入如下的配置:
"--fold setting--
set foldmethod=syntax " 用语法高亮来定义折叠
set foldlevel=100
" 启动vim时不要自动折叠代码
set foldcolumn=5 " 设置折叠栏宽度
常用命令za
打开/关闭在光标下的折叠zA
循环地打开/关闭光标下的折叠zo
打开 (open) 在光标下的折叠zO
循环打开 (Open) 光标下的折叠zc
关闭 (close) 在光标下的折叠zC
循环关闭 (Close) 在光标下的所有折叠zM
关闭所有折叠zR
打开所有的折叠
帮助文档:help usr_28.txt
:help fold.txt
11、项目目录数管理器ProjectProject插件是用来显示项目的目录树的,这个目录树是默认保存在~/.vimprojects文件中。
安装Project
vim-addons install project
Project目录树可以通过下面的步骤生成:
1) 打开vim在命令模式下输入 :Project,在屏幕的最左边就会出现一个project框。不过因为没有初始化暂时是空的
2)在命令模式下(不是插入模式)输入\C (大写的C),会出现下面这些信息:
Enter the Name of the Entry: xxxx (输入项目名称)
Enter the Absolute Directory to Load: /xxx/xxx/xxx (输入项目根目录的绝对路径)
Enter the CD parameter: . (“.”为当前目录)或者和项目根目录一致
Enter the File Filter: *.* (符合条件的源文件,可以是*.cpp/*.h等)
PS:项目目录可以嵌套。而且更改之后在~/.vimprojects文件中就能看到内容,你可以手动进行更改。
12、quickfix命令集通过quickfix命令集,你可在 Vim 内编译程序并直接跳转到出错位置进行修正。你可以接着重新编译并做修正,直到不再出错为止。
在vim配置文件/home/user/.vimrc中加入如下的配置:
"-- QuickFix setting --
" 按下F6,执行make clean
:make clean&CR&&CR&&CR&
" 按下F7,执行make编译程序,并打开quickfix窗口,显示编译信息
map &F7& :make&CR&&CR&&CR& :copen&CR&&CR&
" 按下F8,光标移到上一个错误所在的行
" 按下F9,光标移到下一个错误所在的行
map &F9& :cn&CR&
" 以上的映射是使上面的快捷键在插入模式下也能用
&ESC&:make clean&CR&&CR&&CR&
&ESC&:make&CR&&CR&&CR&
:copen&CR&&CR&
&ESC&:cp&CR&
&ESC&:cn&CR&
帮助文档:help usr_30
:help quickfix
下面的命令运行 "make" (包括你所给出的参数) 程序并捕捉其运行结果: & :make {arguments}
如果编译时出现错误,按 &Enter&,回到vim界面,看不到出错信息了!这时,可以运行以下命令:cw[indow]
打开quickfix窗口来查看出错信息,它会自动跳到第一处出错的地方。然后,你可以双击出错某一条出错信息,vim就会自动跳转到相应的出错位置:cn[ext]
光标移到下一个错误所在的行:cp[revious] 光标移到上一个错误所在的行:cfirst
到第一处错误:clast
到最后一处错误:cc
空间不够时,Vim 会缩短出错信息。如果你想查看详细信息,可以使用此命令:cl[ist] 列出所有出错信息的概览(只有那些含有文件名或行数的错误信息会被显示,需要查看那些并不含文件名或行数的信息可用“:cl[ist]!”命令)
13、CscopeCscope是一个类似于ctags的工具,不过其功能比ctags强大很多。
安装Cscope
sudo apt-get install cscope
在vim配置文件/home/user/.vimrc中加入如下的配置:
"-- Cscope setting --
if has("cscope")
set csprg=/usr/bin/cscope
" 指定用来执行cscope的命令
set csto=0
" 设置cstag命令查找次序:0先找cscope数据库再找标签文件;1先找标签文件再找cscope数据库
" 同时搜索cscope数据库和标签文件
set cscopequickfix=s-,c-,d-,i-,t-,e-
使用QuickFix窗口来显示cscope查找结果
set nocsverb
if filereadable("cscope.out")
" 若当前目录下存在cscope数据库,添加该数据库到vim
cs add cscope.out
elseif $CSCOPE_DB
" 否则只要环境变量CSCOPE_DB不为空,则添加其指定的数据库到vim
cs add $CSCOPE_DB
set csverb
map &F4& :cs add ./cscope.out .&CR&&CR&&CR& :cs reset&CR&
imap &F4& &ESC&:cs add ./cscope.out .&CR&&CR&&CR& :cs reset&CR&
" 将:cs find c等Cscope查找命令映射为&C-_&c等快捷键(按法是先按Ctrl+Shift+-,
然后很快再按下c)
nmap &C-_&s
:cs find s &C-R&=expand("&cword&")&CR&&CR&
:copen&CR&&CR&
nmap &C-_&g
:cs find g &C-R&=expand("&cword&")&CR&&CR&
nmap &C-_&d
:cs find d &C-R&=expand("&cword&")&CR&&CR&
:copen&CR&&CR&
nmap &C-_&c
:cs find c &C-R&=expand("&cword&")&CR&&CR&
:copen&CR&&CR&
nmap &C-_&<
&&&&推荐文章:
【上篇】【下篇】}

我要回帖

更多关于 vim 代码折叠插件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信