问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用vim 编辑怎样才能比 IDE 更快

发布网友 发布时间:2022-04-25 22:04

我来回答

1个回答

热心网友 时间:2022-04-15 02:22

很多使用过 IDE 的朋友在开始使用 Vim 时都会觉得 Vim 缺少 IDE 中的功能。而在提问过程中遭遇 Vim 熟练使用者们的抨击。

这里需要澄清的一点是,即使你再怎么去调节你的Vim,或为他书写插件,Vim始终是一个静态文本编辑器,他在增量解析上因为访问编辑器内存的局限性和其设计原则,使得他效率上有所缺失,并且不支持 shell-window (关于为什么不支持 shell-window, 请阅读 :help shell-window 更详细地了解)。由于这些问题的存在,Vim 并不能像 IDE 一样成为一个强大的,动态的编程环境。但是,这并不能妨碍我们使用Vim编程,当我们认可了Vim是一个静态文本编辑环境后,我们所要做的事情,就是尽可能地利用静态分析工具打造一个适合静态文本编辑的编程环境。

对于喜欢使用Vim并且掌握Vim的人们,都有一套自己的配置来让他们处理IDE 相关的操作。以下我就说一说我自己是如何来打造这样一个环境:

我们假设你要编辑的项目为: ~/foo/bar/foobar/ 这个project

1. 定义,声明的跳转

在编程中,最常使用的是定义跳转 ( define, declaration jumping ),这方面需要你借助一个Vim中常用的外部工具叫做 cTags 来实现。很少有人会告诉你 cTags 怎么使用。但是当你开启一个项目后,一般你会通过:
~/foo/bar/foobar/: ctags -R .

生成你想要的 tags。完成这个操作后,你的 ~/foo/bar/foobar/ 目录下会出现一个叫做 tags 的文件。在你的 .vimrc 中设置:
let tags+=./tags

即可将上面的文件加入到 vim中。这个时候,如果你可以试着将光标挪动到某个定义单词下,按下 ctrl+] 就会跳转到这个单词的定义中。你也可以通过 :ts <your_word> 直接列出<your_word> 相关的单词定义。

2. 文件浏览

相信喜欢 Vim 的朋友都有自己的文件浏览插件。最常被大家使用的是 NERDTree: https://github.com/scrooloose/nerdtree 。这个插件可以帮助你列出你当前项目下的文件。并且他提供了 file filter pattern。这样你可以通过设置 g:NERDTreeIgnore 这个变量来忽略那些你不想要的文件。

但是,我个人喜欢使用的是我自己开发的一个插件叫做 ex-project: https://github.com/exvim/ex-project 。这个插件和NERDTree 的功能类似,不过他是专门为单独 Project 设计的,有更好的 folder, file filter 选项。同时他也是 exVim 插件体系的一部分。

如果说 Vim 的文件浏览有什么比 IDE 有优势的地方,莫过于因为Vim是一个静态文本编辑器,所以他的所有东西皆文本,所以你可以用任何文本操作的方式来游走于文件浏览插件中,比如 search /,比如单词跳转等等。对了,你还可以用 regular expression。是不是很cool呢。

3. 全局搜索

我相信不少人为此困扰过。Vim 社区里确实太缺少这个东西了。你说 grep? NO,NO,NO!对于大型项目,grep 的recursively搜索即使配合file filter pattern也是慢如狗。为此我个人特地开发了一个专门为 global search 做优化的插件 ex-gsearch: https://github.com/exvim/ex-gsearch 。同样的,ex-gsearch 也是 exVim 插件体系的一部分。

ex-gsearch 实际上是一个引用外部搜索引擎的搜索结构到 Vim 插件窗口中的插件。他能够很好的引用 grep, id-utils 的搜索结构。而我这里要重点介绍的就是除了 grep 外更适合作为项目内全局搜索的工具 id-utils。和 ctags 一样,id-utils 也是一个预先帮助你解析项目文件,然后生成索引列表文件提供给Vim使用的外部工具。他的使用方法:
~/foo/bar/foobar:mkid

然后你会生成一份 ID 文件。在项目中,通过:
~/foo/bar/foobar:lid --result=grep -f"ID" your_search_word

即可全局搜索你想要的文字。因为 mkid 是预先将项目文件索引起来,所以搜索非常的快。并且他有各种指令可以帮助你 filter 你不想要搜索的 folders, files。这些通过 -p 和 id-lang-map 设置即可。

4. 文件快速跳转

相信不少朋友都被 sublime text 的 ctrl+p 文件快速搜索功能给深深地吸引。其实 Vim 中也有一个类似的插件做相同的事情,他就是 ctrlp: https://github.com/kien/ctrlp.vim。这里我就不多说了。同类的Vim插件还有 lookupfile, unite 等等。他们做的同样出色。

5. 代码补齐

这类型的 Vim插件也是非常的多的,我按照我目前喜欢的按排名列举:

vim-autocomplpop
neocomplcache
neocomplete
YouCompleteMe
supertab

我喜欢 autocomplpop 是因为他纯 Vim 脚本编写,速度上是测试的几个纯 Vim 编写的插件中最快的。如果你不拘泥于纯粹Vim脚本这件事情, neocomplete, YouCompleteMe 会是更好的选择。

总结,关于 exVim

以上几点已经可以将Vim打造成不错的IDE了。说了那么多,其实只是想告诉题主,Vim只是一个静态文本编辑工具,他不是IDE,但是借助外部工具可以做很多类似IDE的事情,甚至有些时候做的更好。

不过耐心看到这里的朋友应该发现了,我上面的列举有个很大的问题,这些外部工具在项目里运行,需要一些精心的调配,比如 file filter, folder filter。不同的插件语法不同,总不能我每次开个项目,都要设置这些东西吧,很烦。

所以,我写这篇文章的目的,并不是让你们用上面的方法来使用Vim编程IDE,而是推荐大家使用 exVim 这个我精心配置过的 Vim 编程环境。exVim 将项目中用到的 file filter, folder filter, 插件配置,外部工具等等东西都通过 .exvim 这个文件进行统一配置,当你开始一个项目的时候,你只需要在项目工程下创建 foobar.exvim 这个文件,并且用 Vim 编辑他,他就会自动的将配置信息转化到 Vim 中,并且帮你启动你需要的插件和脚本。也就是说,他做了上面的我说的那些操作,让你不用去二次学习那些外部工具的命令语法和其他一些选配功能。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我在石家庄我的显卡坏了过了保修期我想问一下哪里可以修? 梦见蹲了半天的茅房 2016寒假小结作文怎么写 荣耀9,为什么电量现在越来越不耐用,之前更 哪些是易燃易爆场所 加油站有哪些消防安全隐患 说美国和苏联可以毁灭地球若干次的说法是怎么算出来的? 上证指数的年线怎么看? 早教中心需要什么证件 开办早教中心需要哪些许可证 为什么说vim快 用vim 编辑怎样才能比 IDE 更快? DDSY8666插卡电表显示总用:0024剩余:55:80是什么意思 电子式单相预付费插卡电表的剩余度数是怎么看的? 家用IC卡电表怎么看剩下的电? 插卡充值电表中f1.f2.f3.f4各表示什么? IC卡式电表怎么看剩余电量? 插卡电表怎么看电量,是看剩余电量还是购买电量? 这个电表怎么看剩余度数? 电表怎么显示剩余金额- 问一问 怎么将淘宝图片空间的图片备份 怎样从淘宝图片空间把图片移出来? 怎么把淘宝空间里的图片复制到电脑上 一手房买卖税费是怎么算的 勤学以致博,笃行而达雅何意 购买一手房需要交哪些除了房款之外的费用 &quot;明德笃行,行者以至&quot;--这句话的出处和意思? 一手房需要交什么税交易税费怎么算 二手房契税和一手房契税有什么不同 契税调整是从买房算还是交房算起 vim 在哪些方面比 IDE 快 为什么一提到vim总是有人说效率高速度快之 vim 写代码快吗 linux终端下 如何使用vim快速打开文件 在vim中如何快速选中一个单词 vim中如何快速去除注释#或者 //字符 vim如何准确而又快速地删除一对括号 河豚一般多少钱一条? 河豚是淡水鱼还是海水鱼? 被誉为“长江三鲜”之一的河豚,为何吃了容易中毒? 吃河豚是不是违法的? 河豚产卵为什么要逆流而上? 河豚在什么季节之间毒性最大,为什么? 河豚有毒为什么还吃? 守护星儿童电话手表微信怎么弄 河豚有毒吗,可以吃吗 “碳烤河豚”风靡日本,河豚哪些部位是有毒的? 男子吃河豚鱼中毒身亡卖家获刑3年,河豚鱼的毒性有多强? 捕捉野生河豚犯法吗 男子吃河豚中毒身亡卖家获刑3年,河豚这么毒为何还有人吃?