将vim变得简单:如何在vim中得到你最喜爱的IDE特性
原文出处:这里
摘要:
开源的vim文本编辑器提供许多灵活而强大的功能,但是vim自身是很难被配置使用的,在本教材中,我们将向你显示通过几个简单的方式使得你的vim具有集成开发环境IDE的行为
vim是很多程序员和系统管理员最爱的文本编辑器,虽然他提供了很多优秀而灵活的功能,但是对于新手来说他依然是难于上手的。从传统集成开发环境转到vim的开发人员通常会开在发方式的转变中发现迷失了自己。
我经常收到来自于读者的邮件,他们希望能找到一种方式使得vim变得对开发者更友好。一个常见的抱怨是vim并不是自身就带有IDE的特性,并且如何来通过配置能得到等价IDE功能也不是很清晰。而揭开vim真正神奇的秘密就是利用强大的vim插件系统和对vim自身功能的改善和增强的第三方脚本。在阅你读本文之前,我已经整理好了一个vim的有用tips和插件列表,这些列表中的内容将会使那些用惯IDE功能的人们在vim上感到宾至如归的感觉。
虽然vim主要是设计给基于字符方式的文本编辑器,并且它有可能是这类编辑器中最高效的工具,但是现在在vim上也存在一些更适合新手使用的基于图形的外壳。不像运行在终端窗口上的vim,你可以尝试使用一下gvim,一个基于GUI的vim版本。gvim拥有可配置的的菜单和工具条,因此可以通过鼠标直接访问到vim的编程上的最本质的特性。gvim可以让你使用操作系统自带的文件对话框,并允许你通过鼠标点击拖拉编辑面板的能力。gvim有windows和linux的版本,等价的Mac OS X的版本是MacVim,MacVim提供了Mac机的本地Cocoa用户接口,包括菜单集成的功能。
我听到来自vim用户最经常被抱怨的功能是vim的编辑区列表非常麻烦,并且没有一种简单的方式可以明了的看到什么文件是打开的。在vim上有几个插件可以解决这个问题,并提供了一个额外的编辑区列表用于方便在打开文件中切换。我最喜欢的一个插件是MiniBufExplorer,它将列表显示在窗口的头上。当MiniBufExplorer被激活时,你可以通过tab键来在列表的这些项中循环,然后通过回车键或双击鼠标来选择在编辑区显示和你要处理的文件。
许多的IDE工具都有用于显示你程序项目结构和允许你通过鼠标在特定的类和方法间跳转的代码导航区。你可以通过使用流行的Tag List 插件来得到这个特性。这个插件需要Exuberant Ctags实用工具,这个工具用于分析你的代码。TagList可以通过命令:Tlist来激活,并将你的类和方法显示在激活的区域,当你打开其他的文件或切换到其他打开文件时,新的类或方法会被加到代码导航区。在gvim中你可以通过单击方法名跳到对应方法定义。如果要使用键盘,那么通过光标键上下移光标到你希望的方法处,单击回车即可达到目标。
自动文本完成(译者注:就是eclipse,visual studio中常见的输入前几个字符后面的内容通过列表显示的功能)是另外一种在IDE工具中常用特性,并且很多用户都希望在vim中有这些特性。这个特性已经在vim7中通过Omnicompletion system被引入进来。它是可编程,这就意味着你可以通过定制,使的这个功能能在各种个样的编程语言中使用,在vim中甚至存在对动态语言python或ruby生效的自动文本完成功能。现在,自动文本完成的配置已经变成了vim包中的一个部分,所以现在你可以什么都不做就能让这个功能生效。要调出自动完成菜单(列表),你需要敲下ctrl+x和ctrl+o键,接着你可以用ctrl+n和ctrl+p在可能完成列表中进行上下选择,当你移动到一个选项,vim将为你在另外一个Scratch区域显示带方法说明和属性的上下文帮助信息。
你可以多种方式来改善你的vim体验,vim维基vim wiki和脚本库script repository为你提供了可用于增强功能的第三方增强扩展集合。这些插件实现sinppet system,outlining tools,项目管理工具,和大量的其他的特性。同时还有大量的脚本实现了对某些特定编程语言和框架的增强。例如有一个非常流行的脚本,这个脚本将会改善你Ruby的语法高亮,并且为你Ruby on Rail的部署提供了非常方便的导航特性
同时也有一些面向新手的脚本集合,这个集合使得vim的行为变得更像一个带有简单菜单和快捷键的传统的文本编辑器。如果你对vim那些神秘键盘命名感到不舒服的话,你可以选择这个作为你使用vim的开始。
vim的多样性使得它满足不同的用户使用。对于那些没有时间,能力,和爱好去通过自己去建立一个完美vim配置的人来说,无数的第三方脚本和插件为你提供了一种简单的方式,通过这种方式你可以付出很少的努力就能得到你想要的功能和特性。
转载于酷壳CoolShell 无删改 仅以此纪念陈皓(左耳朵耗子)
这是我的代码,因为我平时 python 写得少,不熟练,如果代码质量差请别喷 import json, re import uuid from urllib.parse imp…
我有个网站用的是 MongoDB 数据库,搞不懂的地方在于网站正常,但是 mongo 连不上。 最近没动过配置,不敢贸然重启服务,求教下各位 感谢各位,重启服务后解决了 网…
闲来无视折腾了下一台吃灰的血脉机 红米 5Plus ,给它刷回了官网的 MIUI ,最后一版官方包是基于 Android 8.1 的 MIUI11 ,并且没有自带 GMS ( …