转自: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. 两个异步处理AsyncTask和Handler的优缺点

    AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操 ...

  2. ylb:SQL 常用函数

    ylbtech-SQL Server: SQL Server-SQL 常用函数 1,数学函数 2,日期和时间函数 3,字符串函数 4,转换函数 1,ylb:SQL 常用函数返回顶部 1,数学函数 2, ...

  3. CURL --- 命令行浏览器CURL

    CURL --- 命令行浏览器CURL   CURL --- 命令行浏览器   CURL? 嗯,说来话长了~~~~ 这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑 1)二话不说,先从 ...

  4. Dapper的完整扩展(转)

    真心想说:其实...我不想用Dapper,如果OrmLite.Net支持参数化的话,也就没Dapper的什么事情了,对于OrmLite.Net只能做后续跟踪...... 这个其实是看了Dapper作者 ...

  5. Nginx gzip配置详解

    gzip决定是否开启gzip模块param:on|offexample:gzip on; gzip_buffers 设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间param1:intp ...

  6. ipv4头部分析,读书笔记3

    ip头部最长是60字节,前面的20字节是固定的,选项可加上40字节 4位版本号--- 对于ipv4来说呢,就是4 4位头部长度 ---  表示 有多小个32bit(4字节),4位最大表示数是15啦,也 ...

  7. Trie树也称字典树

    Trie树 Trie树也称字典树,因为其效率很高,所以在在字符串查找.前缀匹配等中应用很广泛,其高效率是以空间为代价的. 一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息, ...

  8. How To Set Up Port Forwarding in Linux

    Port forwarding usually used when we want our computer act like a router. Our computer receive the p ...

  9. BIOS启动项中的设备都有哪些

    Floppy 软式磁盘驱动器,简称FDD,也就是我们平时所说的软驱. CD-ROM 不用多说了,大家都知道,这是光盘驱动器,也就是我们平时说得光驱. SCSI SCSI的全名是:Small Compu ...

  10. Azure中的分布式1——多实例

    Azure中的WebRole和WorkerRole天然支持负载均衡,只需要简单配置一下即可,下面我以一个WebRole为例说明这一点. 创建一个项目类型为MVC4的WebRole 项目结构如下: 右键 ...