开发工具 Back to Emacs

hisea · 2012年03月26日 · 最后由 hisea 回复于 2012年04月13日 · 10815 次阅读

现介绍下我的工具历程。

上大学的时候,学校的教授都是 Functional Programming 的狂人,很多课都是 Haskell 学的。外加那时候用 pvs 工具.

大学四年基本上一直用的 emacs.

那时候喜欢瞎折腾,Gentoo 什么的都是整天装了卸卸了装,外加那时候也没有这么 github 这么好用的东东,配置文件没有好的备份的地方,emacs 一直都是最简配置。那四年一直都是 emacs 自带的功能和命令行工具结合。

不过依然这样写过 C,写过 Java,写过 Haskell,写过汇编。

工作头 1 年些测试框架,受同事影响用了一年的 Vim,之后工作用 Java 就用 eclipse. 后来 Ruby/Rails 就一直用 Textmate/Sublime。

=========================

废话结束:

前两个星期,跟@zw963 讨论了半天 emacs. 小拇手指突然很痒。 于是又开始配置 emacs,经过一个一个周末,终于弄了一套开发 Rails 的环境。

操作系统: Mac OS (用其他系统的朋友可以根据喜好调整键盘位置)

Emacs: Emacs For Mac OS X 24.0.94 Pretest, 我是个喜欢尝试新东东的人,下载

本来想图省事,用 ELPA,后来发现很多 package 都比较老了,比如 rinari 还停留在 script/server 阶段,最后能找到 github 项目的 package,我基本上都用的 github 的。

plugin/mode 列表:

ruby-mode, inf-ruby, ruby-compilation Ruby 相关的东东。

yari Yet Another RI 在 buffer 里面看 ri 文档了。

ido InteractivelyDoThings, 互交的做东东 我以前不是很喜欢 ido 现在 textmate mode 跟 rinari 都用 ido,用了一下还不错。

rinari Rinari is not a rails ide 提供很多 finder,可以再 rails 项目文件之间转换,提供了一个类似 textmate 的 rinari-find-file-in-project,我个人还是习惯使用 textmate.el 带的功能。 除此之外,rinari 还可以运行 rake,web server, capistrano 之类的。

另外一个 rinari 的功能我很喜欢的是 TAGS 功能。用 ctags 生成项目 ruby 文件的 tags,这样在一个方法的调用上,点 M-. 就会跳到方法定义的文件/位置。

yasnippet 外加 yasnippets-rails 就是默认 yasnippet 自带的外加 textmade rails 相关的导出的一部分。 除了 def ->基本上都有了。

autocomplete 我没有装。个人感觉不需要弹出个框框来。

textmate.el 不多解释,看下面的功能就知道为什么装上了。

;; ⌘T - Go to File ;; ⇧⌘T - Go to Symbol ;; ⌘L - Go to Line ;; ⇧⌘L - Select Line (or expand Selection to select lines) ;; ⌘/ - Comment Line (or Selection/Region) ;; ⌘] - Shift Right (currently indents region) ;; ⌘[ - Shift Left (not yet implemented) ;; ⌥⌘] - Align Assignments ;; ⌥⌘[ - Indent Line ;; ⌥↑ - Column Up ;; ⌥↓ - Column Down ;; ⌘RET - Insert Newline at Line's End ;; ⌥⌘T - Reset File Cache (for Go to File)

各种 rails 中可能用到的 mode

(require 'rvm)
(require 'sass-mode)
(require 'haml-mode)
(require 'feature-mode)
(require 'rspec-mode)
(require 'coffee-mode)




除了功能上的,字体设了 Menlo 另外中文用 Hiragino Sans GB,个人看着顺眼点。

另外,添加了几个还看的过去的 color theme, solarized 跟 tango 是我个人比较喜欢的两个。

除了上面的这些,添加了些个人喜好的设置,比如关了工具条,关了喇叭的咚咚响的,tab 设成了 2 等等。

好了,感兴趣的可以看看这里: https://github.com/hisea/emacsd

clone 了之后记得运行.

git submodule init      
git submodule update




========================= 后记 用了两三个小时,小拇指稍微有点酸。。难道真的老了。。。

应邀上图:

screenshot

贴个图吧 on github

Emacs pinky 啊。。

#1 楼 @jinleileiking 贴什么图啊?编辑窗口?

在 emacs 和 vim 之间纠结了很久以后,综合比对快捷键和命令的方式,以及现在的流行程度,github 上的相关插件的成熟程度,再结合自己的智商与情商,还有抛硬币,掷骰子,揪花瓣,最后还是决定用了 vim..

#4 楼 @bony 哈哈哈,纠结与折腾是程序员的两个顽疾。。。

@hisea 小拇指稍微有点酸。。难道真的老了。。。 Caps Lock -> Ctrl? 要不怎么用小拇指按 Ctrl,我都是用小拇指根部,算是手掌吧,很多人应该都这习惯,这样完全不费力的

#6 楼 @willmouse 之前一直拒绝替换 ctrl 键,现在看来要慎重考虑了。

匿名 #10 2012年03月26日

@hisea 用外接键盘操作起来会很方便的

#9 楼 @hbin 很想搞个史前键盘外接。

匿名 #13 2012年03月26日

@hisea 我很想搞个机械键盘

调制 Sublime 后 textmate 果断变二房 一图胜千言

想请问一下,redirect_to :sort => sort, :rationg => @selected_ratings and return这句话是啥意思

看到"小拇手指突然很痒"这句话我笑翻了

用 netbeans 的飘过,傻瓜级别用的,骨灰级的还是用 emacs 不过感觉 netbeans 也很好用,自己参考 source insight 语法高亮配置了语法高亮后和 textmate 也差不多,反正就当他是编辑器用了。

之前一直在用 el-get 做 emacs 包管理,是 elpa 的超集。支持 el-get 以及 git,也可以自己写 recipes,倒是很方便,但是感觉不太稳定,可能源种类太多,部分包总是会出错,有人用这个有同样情况么?

ms EMACS 确实是很需要小拇指的编辑器

#13 楼 @rainchen 感觉自动补全功能 vim/emacs 和这些 ide 还有差距。关键是 ctags 不维护了。。

#17 楼 @ripple 我尝试用 el-get 不知道为什么,对 24 的支持不失特别好,没下来。。

#19 楼 @jinleileiking 恩,就我试用的情况看,目前这些还能用。

唯一有一个问题,我现在的公司项目有 2000 多个文件,textmate.el 跟 rinari 做 find-file-in-project 都有几秒钟的延迟。。

#15 楼 @ghosTM55 哈哈,痒痒的酸酸的。。。

#13 楼 @rainchen sublime 还是不错的,可能 emacs 用用我就又回去了。如果能吧 ctags 调好。

#3 楼 @hisea , 嗨~ 你好,哥们儿~ 有阵子没见你了.

听我的. 想重新用 Emacs, 先把快捷键 Ctrl 和 Capslock 换过来. 事实上之前很久, 我都一直不换, 可能想法和你类似. 一时觉得不必要, 而是觉得难适应. 可是小指实在难受, 决定换以后, 我惊人的发现, 只需要两天就 Ok 了. 完全适应了.

干脆我单独给你贴一下换的脚本吧. 省得你又得单独研究.

xmodmap -e "remove lock = 0xffe5" &>/dev/null
xmodmap -e "add control = 0xffe5" &>/dev/null
xmodmap -e "keycode 66 = 0xffe3" &>/dev/null
xmodmap -e "remove mod1 = 0xffea" &>/dev/null
xmodmap -e "add lock = 0xffea" &>/dev/null
xmodmap -e "keycode 108 = 0xffe5" &>/dev/null
这几行加入.bashrc, 左边的Capslock换为Ctrl, 左边的Ctrl不变. 右边的Alt 换成了Capslock.

说起你用的那些插件, 貌似你没有提及以下插件:

  • rhtml-mode. 用来编辑 rthml.erb 文档. 没有这个难受死了.
  • auto-complete. 这个插件, 是我所见过的 Emacs 插件里面, 文档最全面的插件了. 自动补全. 没这个可不像一个 ide 啊, 而且如果你不希望弹出, 可以设定不弹出啊. 有关其中玄机, 我那个帖子你估计没看, http://ruby-china.org/topics/2046, 你看看, 很明显必须两个配合, 才能达到完美. 现在我 ac 和 snippet 用的超级爽的说~~

  • dbgr 一个全功能的 ruby-debug 调试图形界面. 就是为了调试方便. 例如加断点什么的都有红点点.

  • 也没见你用 flymake-ruby.

  • 常在坛子发帖, 搞个 emacs-server 插件, 同时在 Chrome 应用商店中搜索 Emacs 关键字. 你肯定会的.

另外, ruby-compilation 这个东西有 bug, 真不如通用的 mode-complile 舒服. textmate.el 如果你用的和我的是一个 (包含括号自动补全), 也是一大堆 bug. 我修正了好多. 不过后来我又换回了 autopair.el, 然后吧 textmate.el 中单独的几个需要的功能作为函数 folk 出来了. 我很怀疑咱们说的 textmate.el 不是一个. 请提供下 github 链接.

最后欢迎回归 Emacs. 你的选择是正确的!

#3 楼 @hisea

要不干脆你直接用我的配置吧. 如果你有兴趣, 我发一份给你.

现在最大的问题是: 注释太少. 虽然我强烈认为自己的所有配置符合人体工程学, 甚至我认为我的配置是在一套首先建立了一套使用编辑器的哲学基础上建立起来的 (例如所有的模式的同一个键尽量选择相似的设置,不惜大幅度更改), 但是毕竟对于我来说是太个性化的东西, 估计很难上手.

#17 楼 @ripple el-get 确实不稳定,特别是编译出错,只能手动删掉重新运行 我的配置就是基于 el-get: https://github.com/doitian/emacs.d 缺点是重新安装要很长时间,优点是方便升级

#24 楼 @zw963 我基本不用 erb,都是 haml, 所以没有装 rhtml. 回头看看 auto-complete 去。

我很纳闷,就算是不把 Ctrl 和 CapsLock 交换,你们为什么用小拇指按 Ctrl?没有用手掌按 Ctrl 的习惯?

当然我说的是外接键盘,笔记本键盘不合适

#28 楼 @hisea

auto-complete 自带的 doc 目录下, 手册那个英文, 我估计初中生都可以读懂. 写的超级详细. 等你读过, 你会喜欢上 auto-complete.

haml-mode, 貌似我还不知道是什么玩意儿. 人和人差距, 杂就这么大昵?

#28 楼 @hisea

刚刚看了下 haml 的手册. 好酷炫的东西. 你们的项目中, 已经大规模使用这玩意儿了? 还是你自己再用?

#31 楼 @zw963 公司跟我个人的东西都是默认 haml 了。

#32 楼 @hisea

我现在 rails 还很初级, 不过, 使用这玩意儿, 如果生成页面过多, 难道没有性能瓶颈么? 毕竟变化太大了.

#33 楼 @zw963 性能还好的,

#34 楼 @hisea

不妨给我这个小白讲下, 用了 haml 和普通的 erb, 在较高抽象层次上的优势有那些? 我值得是 是否方便修改 或者 方便共享 或者 可读性强 之类的方面.

输入速度方面不用解释了. 一看就知道. 用 haml 速度快一些. 不过我用 erb 现在也很快. 自己弄了大把的 snippet 和 auto-complete.

趁我现在刚接触不久, 想换那个成本是相当低的. rails 这个玩意儿变化太快了. 不像 Ruby.

我就怕搞了半天, 搞的过时的东西. 白费半天劲儿

#35 楼 @zw963 对我来说,完全是个人喜好。

#23 楼 @hisea @jinleileiking 自动补全只是其中一大亮点 sublime 还有一个大杀器是多行选择,就是能快速选中相同关键词,改一个其他跟着变,对快速重构变量非常顺手。 演示见 http://net.tutsplus.com/tutorials/tools-and-tips/sublime-text-2-tips-and-tricks/#5 – How Did We Survive Before Multi-Selection? 这个特性在 Netbeans 这类 IDE 里见过,在其他文本编辑器(包括 textmate)中暂时没发现,其他特性 textmate 通过插件或多或少能实现就不提了。

#36 楼 @hisea 若问一下,haml-mode 中自己设定 tab,来缩进固定空格么?如果缩进出错比较难查啊

#38 楼 @ripple 我一般编辑器都是全局设定 tab 用两个空格代替,不放心的话可以用 whitespace mode。

#37 楼 @rainchen 恩,这个功能我也经常用。find,选择 find all 也可以同时编辑。其实 sublime 已经很不错了。过去接近半年一直用这个,说实话补全功能反而是没怎么用,我只记住一个是 def ->| 其他的很少用。我用的最多的还是在文件内部和文件之间的切换。

#37 楼 @rainchen 这个用 vim 做,很简单。自动补全就难了。。。

minor modes 好少啊,记得有个 plugin 是隐藏 minor modes 名字的,忘记叫什么了。modes 多了太占地方了

mode-line

匿名 #44 2012年03月30日

有木有人把 apple command 映射成 ctrl? 菜鸟球解决方案...

#43 楼 @nil 我把那个键换成 Meta 了,对我来说 Apple Command + x 这个比较容易按

#43 楼 @nil #44 楼 @hisea 我把 mac 的全局键盘的 option 和 command 交换了,caps lock 映射 ctrl,C-space 也留出来给 Emacs 的 set-mark-command 用

#43 楼 @nil System Preferences -> Keyboard ->Modifier Keys 就可以改了,不过我交换 option 和 command 后,键盘右边那两个键盘经常就全部分变成 command 了

匿名 #48 2012年03月31日

@doitian @rainchen 我想要的映射是 apple command-> ctrl, option->meta, 但不希望修改全局映射, 没了 command, mac 真心的玩不转.

#47 楼 @nil 我只能说动拇指比尾指舒服多了,拇指只用来按空格键太委屈它的粗大了

#47 楼 @nil 我是这样改键的:

;; Mac keyboard modifier key
;;(setq mac-command-modifier 'meta)
;;(setq mac-option-modifier 'alt)
;;(setq mac-control-modifier 'alt)

(setq ns-command-modifier 'meta)
(setq ns-function-modifier 'super)

#48 楼 @rainchen 是的,键盘太浪费空间了,空格键这么大,可以分几个功能键出来。

匿名 #52 2012年04月02日

@hisea @rainchen @doitian 一图胜千言, lisp 机器的键盘! 貌似跟 mac 键盘的布局异曲同工啊~ 在 windows 机器上我都是用 ALT 映射为 CTRL, CTRL 映射为 ALT; 但是有 mac 用,真心的不想用 PC:) lisp machine keybord

匿名 #53 2012年04月02日

@hisea (setq ns-command-modifier 'control) 不错, 感谢兄弟提醒. 我用了 prelude 的配置, 感觉不怎么配置就蛮好用, 适合我这样的入门菜鸟,哈哈

唉 我也回归 emacs 了 看看这次能坚持多久

#36 楼 @hisea

哥们儿现在还在坚持使用 Emacs 吗?

#54 楼 @zw963 说实话。。没。坚持了两个兴起,textmate.el 实在是慢,我们项目 3000 多个文件,每次都要有 3-5 秒的停顿,所以现在就是忙的时候 sublime, 不忙的时候玩玩 emacs 和 vim

#55 楼 @hisea

汗~ 还希望你能成为一个专走回头路的模范标兵呢, 给期望使用Emacs的新人做个示范呢.

textmate.el, 那是个什么玩意儿? 你说的 3-5 秒停顿, 100%, 不是Emacs自身的问题. 或者说绝对有其他解决方案, 不过我理解你项目在眼前, 暂时没时间折腾的苦衷.

#56 楼 @zw963 哈哈哈,我挡不了标兵,我很不安分的,有有空就玩各种东西。不过怀念 emacs 的多进程.

#57 楼 @hisea

哇, 这会儿北京时间半夜三点半了. 这会儿 Canada 几点? 我可以肯定不是半夜三点.

#58 楼 @zw963 下午三点半,呵呵,最近跳槽,所以不忙,上网瞎看。

#57 楼 @hisea

一直没说... 你那个照片, 穿的衣服, 我咋看咋像救生衣...

#60 楼 @zw963 是救生衣,出海穿的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号