转自:http://ovalpo.info/how_to_use_vim_for_erlang_dev/

如何利用Vim进行Erlang开发

by Martin J. Logan on September 9, 2013

译者: ovalpo 2014年7月28日

【题外话:第一次翻译这事,骂吧!】
你会学到如何使用Vim作为你的编辑器来进行Erlang开发。你将会学会如何安装和使用各种不同的给力的Vim插件来让Erlang项目的开发更加顺畅和满意!
我搞Elang开发已有13年了,大多数都是全职参与,甚至我还写了一本Elang的书:《Erlang & OTP 实战》。我基本上享受这些工作中的分分秒秒,但还是有个一直存在的让我不愉快的事情,或许它也让你不愉快——那就是Emacs。Emacs是一个非常实际 的用来进行Erlang开发的编辑器。带有Elang发行版的Emacs非常优秀!但Emacs下还是存在一些我们不喜欢的东西,ctrl ~, ctrl x ctrl f etc… Nope!

配置Vim/Erlang

下面开始为Erlang开发配置Vim。为了后续能更方便地安装各种插件包,我们先安装pathogen。首先创建一个目录 $HOME/.vim/autoload。然后从这里下载pathogen.vim并把它放在刚刚创建的目录下。再在$HOME/.vimrc文件中加入下面两行命令.
 
call pathogen#infect()
call pathogen#helptags()
1
2
call pathogen#infect()
call pathogen#helptags()
有了这个之后,任何插件,你只需要放置在$HOME/.vim/bundle目录下,pathogen便会自动安装并且生成帮助文档。
安装了这些之后,我们可以开始安装其他插件,让你的生活更有趣。试下这些插件,直接clone对应的git资源库到目录$HOME/.vim/bundle下即可。下次你启动Vim,这些插件就会自动生效。
vimerl.vim 缩进, 自动补全等其他更多的Erlang效果
ctrlp.vim ctrl p,  提供给力的模糊文件查找. 进而可以把导航树扔掉.
NERDTree Vim中一款给力导航树插件 – 但我很少用它,因为我在用ctrlp.
NERDTree Tabs 将 NERDTree中打开过的文件添加到标签栏

在我们讨论关于如何使用这些插件来创造Erlang魔法效果的基础前,我想给你们展示两个我很喜欢的小技巧。第一个,配置一个好看的色彩主题。为此,需要创建一个$HOME/.vim/colors目录,然后给你自己找个华丽的色彩主题扔进去。我推荐TPope的vividchalk.vim.

(译者注:需要在 $HOME/.vimrc 中增加一行命令:colo vividchalk )

Pro Tip
对于dropbox或者其他文件同步服务的用户,可以通过下面的简易方式来同步备份你的vim的所有配置;把你的 .vim 目录和 .vimrc 配置文件移到你的dropbox目录下。然后执行命令:

 
ln -s ~/Dropbox/.vim ~/.vim
ln -s ~/Dropbox/.vimrc ~/.vimrc
1
2
ln -s ~/Dropbox/.vim ~/.vim
ln -s ~/Dropbox/.vimrc ~/.vimrc

现在你所有的机器上的vim都会运行同一份配置。如果你还有某些兼容性问题,那就单独处理下那台机器吧。

好了,现在该讲讲如何使用这些插件来强大Erlang/Vim。

如何使用Vim插件来进行Erlang开发

我将使用source for Erlware Commons 来作为示例。我把它clone下来,然后转到目录 erlware_commons,再运行 Vim.现在让我告诉你我要更新哪个文件,那是个特殊的文件 “ec_date.erl”。我先输入P(译者注:进入vim后,输入冒号:进入命令模式,输入CtrlP,然后按Enter键),再开始输入ec_date.erl。
 
~
[No Name] [TYPE= unix] [0/1 (100%)]
> test/ec_dictionary_proper.erl
> src/ec_dictionary.erl
> src/ec_date.erl
prt path ={ files }= >> ec_da
1
2
3
4
5
6
~
[No Name] [TYPE= unix] [0/1 (100%)]
> test/ec_dictionary_proper.erl
> src/ec_dictionary.erl
> src/ec_date.erl
prt path ={ files }= >> ec_da
你可以看到,当我开始输入“ec_da”时,ctrlp已经展开了一个匹配文件下拉列表,这些文件都是在我启动vim的目录树下。在底部的文件 ec_date.erl是当前选中的,所以只需要按Enter键就可以打开这个文件了。如果我想选择文件 “test/ec_dictionary_proper.erl”,我只需要按上下键来选择,或者继续输入搜索内容,直到它是最后一个文件。
如果我不知道该选择哪个文件怎么办?这就轮到NERDTree上场了。运行 :NERDTree, 你会得到一个文件目录,比如:
 
Press ? for help |
|~
.. (up a dir) |~
<lang-projects/erlware_commons/|~
▸ doc/ |~
▸ priv/ |~
▸ src/ |~
▸ test/ |~
CONTRIBUTING.md |~
COPYING |~
Makefile |~
README.md |~
rebar.config |~
rebar.config.script |~
~ |~
~ |~
~ |~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  Press ? for help             |
                               |~                                              
.. (up a dir)                  |~                                              
<lang-projects/erlware_commons/|~                                              
▸ doc/                         |~                                              
▸ priv/                        |~                                              
▸ src/                         |~                                              
▸ test/                        |~                                              
  CONTRIBUTING.md              |~                                              
  COPYING                      |~                                              
  Makefile                     |~                                              
  README.md                    |~                                              
  rebar.config                 |~                                              
  rebar.config.script          |~                                              
~                              |~                                              
~                              |~                                              
~                              |~
从上面我们可以看到Erlware Commons的文件目录树。可以很容易地选择或者展开每一个目录。每一个文件都可以选中后打开。打开一个文件有很多方式,下面是一些常用的:
  1. <enter> 在当前窗口打开文件
  2. T 在vim新标签页打开文件,光标停留的目录树NERDTree
  3. t 在vim新标签页打开文件,光标也跳转到新标签页
如果你想在所有的标签页都能看到目录树,你可以使用命令:NERDTreeTabsToggle来开启和关闭。所有的标签中的目录树都是显示同 一个状态和光标焦点。如果你正在某一标签页进行代码编写,而你想跳回到左边的目录树窗口,可以使用快捷键<ctrl> ww。
如果你已经打开过一堆标签页,而你又需要在不同标签页中跳转,那么只需要下面两个命令就可以实现:
  1. gt 跳转到下一个标签页
  2. gT 跳转到上一个标签页

Pro Tip
把下面的内容加入你的.vimrc文件,可以NERDTree的标签页的跳转命令映射到tab键。

 
map <C-t> :tabn<Enter>
map <C-n> :tabnew<Enter>
map nt :NERDTreeTabsToggle<Enter>
1
2
3
map <C-t> :tabn<Enter>
map <C-n> :tabnew<Enter>
map nt :NERDTreeTabsToggle<Enter>
下面,可以开始讨论用vimerl来编写Erlang。

使用vimerl编码

这里不会列出vimerl所有的的编辑命令,而是提一些非常有用的。20%的命令,你会在80%时间里用到。

自动缩进

你输入时,vimer会自动缩进。但如果你想对指定某行进行缩进,输入==。假设你想对一整块代码进行缩进。这很容易办到,输入ma标记最开始 的一行,然后跳转到最后一行,输入命令=‘a,告诉vimerl进行缩进。如果整个文件排版都是乱糟糟的,输入gg跳转到文件的最开始,输入命令=G进行 缩进,一直到文件尾。你也可以只用一步达到这个效果,输入命令gg=G即可。

代码补全

输入完模块的名字已经冒号(:)号,按 ctrl-x ctrl-o,会触发vimerl给你弹出一些建议函数名。他通过查找erlang代码目录(用code:get_path() 查代码目录)下的.beam和.erl文件做到的,如果你项目中有配置 rebar.config,也会查找你的rebar的deps_dir目录。

框架

这是emacs的Erlang模式里我最喜欢的特性,当然还有自动缩进(大部分时候,fun()的缩进仍然让人咬牙切齿)。下面这个列表里的是最有用的框架以及在vimerl里生成这些框架的命令。
  1. :ErlangApplication 生成一个行为模式为OTP应用程序行的框架。
  2. :ErlangSupervisor 生成一个行为模式为OTP监督树的框架。
  3. :ErlangGen[Server|Fsm|Event] 生成gen_server,fsm,event框架。
Vimerl是不是太聪明了。在你阅读完之前,我想让你知道一条非常有用的,而且你应该知道的命令,那就是 :help vimerl, 它会给你一个命令列表,里面有所有你想用的。记住,想要让它能正常使用,你需要在你的.vimrc文件的最开始增加设置
 
call pathogen#helptags()
1
call pathogen#helptags()

Emacs,再见,欢迎老朋友Vim的回归。
在twitter上关注我@martinjlogan
 <esc>:wq

转载:如何利用Vim进行Erlang开发的更多相关文章

  1. Ubuntu下利用vim搭建python开发环境

    1. 安装vim $ sudo apt-get install vim 2. 安装ctags,ctags用于支持taglist,必需! $ sudo apt-get install ctags 3. ...

  2. 利用vim查看日志,快速定位问题《转载》

    利用vim查看日志,快速定位问题 链接:https://www.cnblogs.com/abcwt112/p/5192944.html

  3. 利用vim查看日志,快速定位问题

    起因 在一般的情况下,如果开发过程中测试报告了一个问题,我一般会这么做: 1.在自己的开发环境下重试一下测试的操作,看看能不能重现问题.不行转2 2.数据库连接池改成测试库的地址,在自己的开发环境下重 ...

  4. 将vim作为QT开发的IDE

    转载请注明链接与作者huihui1988 用了一段时间的vim,喜欢上了这种简洁高效的编辑器.恰逢正在学习QT中,于是将vim变成了开发QT的工具.以下是具体配置. 一.语法高亮支持: 1.打开VIM ...

  5. CentOS 6安装thrift支持erlang开发

    早前,在我的博文thrift多平台安装介绍了如何在debian/ubuntu下面安装thrift,并支持erlang开发的.而在CentOS平台下,并没有成功安装.经过不断摸索,终于成功了,这篇博文就 ...

  6. [Python] 利用Django进行Web开发系列(一)

    1 写在前面 在没有接触互联网这个行业的时候,我就一直很好奇网站是怎么构建的.现在虽然从事互联网相关的工作,但是也一直没有接触过Web开发之类的东西,但是兴趣终归还是要有的,而且是需要自己动手去实践的 ...

  7. [Python] 利用Django进行Web开发系列(二)

    1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...

  8. Web API应用架构在Winform混合框架中的应用(4)--利用代码生成工具快速开发整套应用

    前面几篇介绍了Web API的基础信息,以及如何基于混合框架的方式在WInform界面里面整合了Web API的接入方式,虽然我们看似调用过程比较复杂,但是基于整个框架的支持和考虑,我们提供了代码生成 ...

  9. 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用

    一.引言 上一篇博文分享了消息队列(MSMQ)技术来实现分布式应用,在这篇博文继续分享下.NET平台下另一种分布式技术——.NET Remoting. 二..NET Remoting 介绍 2.1 . ...

随机推荐

  1. Heritrix源码分析(六) Heritrix的文件结构分析(转)

    本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/642618      本博客已迁移到本人独立博客: http://www.yun5u. ...

  2. Android RecyclerView使用详解(三)

    在上一篇(RecyclerView使用详解(二))文章中介绍了RecyclerView的多Item布局实现,接下来要来讲讲RecyclerView的Cursor实现,相较于之前的实现,Cursor有更 ...

  3. linux 修改时间 - [命令操作]

    我们一般使用“date -s”命令来修改系统时间.比如将系统时间设定成1996年6月10日的命令如下. #date -s 06/10/96 将系统时间设定成下午1点12分0秒的命令如下. #date ...

  4. hdu 1429(bfs+状态压缩)

    题意:容易理解,但要注意的地方是:如果魔王回来的时候刚好走到出口或还未到出口都算逃亡失败.因为这里我贡献了一次wa. 分析:仔细阅读题目之后,会发现最多的钥匙数量为10把,所以把这个作为题目的突破口, ...

  5. linux下使用go-oci8

    地址:https://github.com/wendal/go-oci8 它是 https://github.com/mattn/go-oci8 的分支. win下安装步骤参考:http://www. ...

  6. Linux基本命令(9)定位、查找文件的命令

    定位.查找文件的命令 命令 功能 命令 功能 which 从path中找出文件的位置 find 找出所有符合要求的文件 whereis 找出特定程序的路径 locate 从索引中找出文件位置 9.1 ...

  7. 提供给开发者 10 款最好的 Python IDE

    Python 非常易学,强大的编程语言.Python 包括高效高级的数据结构,提供简单且高效的面向对象编程. Python 的学习过程少不了 IDE 或者代码编辑器,或者集成的开发编辑器(IDE).这 ...

  8. memset()实现及细节

    memset是计算机中C/C++语言函数.将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为 ...

  9. Raspberry Pi上手

    2013-05-21 买的树莓派终于到手了,嘿嘿.我在官方代理ICKEY买的,是英国版,B型. 上手教程可以根据Getting Started with Raspberry Pi(网上有电子版免费下载 ...

  10. 【VC】VC工具栏图标合并工具(非tbcreator和visual toolbar)

    VC开发难免会用到toolbar,在没有美工的时候,大部分时间我们只能自己上. 第一个方法:fireworks/photoshop平铺.现在的图片资源大多为背景透明的png图片,虽然fireworks ...