• #7 楼 @vkill

    原文是指:尽量用通用的的形式,例如:"", '', 即使用,也直接用%替换%q.

  • #3 楼 @willmouse

    markdown 的排版,我一直一头雾水,不得要领, 下午又研究了半天,貌似现在是不是好点了?

  • #1 楼 @poshboytl , 谢谢,spork 很好很强大,问题已解决。

  • #1 楼 @huacnlee, 哦。那就是 bundle 和自动完成分开两个快捷键了. 会不会自动提示完成,让你提前看到按下 esc 后,会匹配的单词呢? 我是发现了,如果在一起,无论你怎么配置,都会有一定的冲突。

    #2 楼 @huacnlee 你是第一个这么说我的。哈哈。不过这张照片,也是第一次网上用。

  • 深有感触啊。还是在盒子里钻不出来。佩服!

    def fact(n, hash)
      (1..n).reduce(hash[:method])
    end
    
    p fact(10, method: :+)          # => 55
    p fact(10, method: :*)          # => 3628800
    
    

    直接通过哈希传递方法,哈哈。

  • 我靠~ 我怎么没想过用 inject 来求阶乘?

  • #25 楼 @hhuai

    啊?? 怎么可能呢?网易邮箱也会出问题吗 ?

    收件人 发送状态 时间 [email protected] 成功到达对方服务器 2012 年 3 月 8 日 18:16(星期四)

    是不是搞错了?你给我来封邮件。[email protected]

  • #20 楼 @camel, 尽快喽。没有私密问题。

  • @hhuai, 邮件发了哦

  • 程序员,保重身体。 at 2012年03月08日

    我就是低头太多了,最近颈椎疼的厉害。看样子还是要找个高手,经常性的仰视拜膜下。

  • 你是 vim 党还是 emacs 党? at 2012年03月08日

    #31 楼 @hisea , 有机会出国真好。我觉得我现在就是典型的崇洋媚外!没事儿多 给咱社区传达传达最新的咨询动态啊。

    留个联系方式呗,多多交流。我邮箱 [email protected]

  • 你是 vim 党还是 emacs 党? at 2012年03月08日

    #31 楼 @hisea ,

    哈。你说的全局搜索和我想的一样,虽然我都有专门设定统一的 hotkey, 用于多 个 buffer, 或者多个 file 内容搜索,不过我很少用。那个 find-grep, 我之前 一直不知道,不过那个默认的命令格式,和我的.bashrc 内自己写的几乎一样。

    其实咱们的习惯很相似,在 Emacs 中,我用快捷键多一些。不过较简单的命令, 我也习惯通过 M-x 来运行,例如:M-x yari. 上面说的全局搜索,甚至全局替换, 我几乎总是在 shell 下面完成。其实很简单,几个 linux 拼在一起而已. 例如:全局替换:

    alias gsub=find-in-file-and-gsub
    
    function find-in-file-and-gsub {
        command find -type f -print0 |command egrep -i -z -e "$1" |xargs -0 ruby -p -i.bak -e "$2"
    }
    
    

    然后:只需要 gsub 要查询的 re 要替换的内容,即可。

    我的.bashrc 内有大把的类似别名,有些甚至很简单,例如进入某个目录,或者是 使用 Emacs 打开某个经常访问的文件,其实文件名我没有省略好多,只是有时候懒 得打路径而已。例如:alias fstab='e /etc/fstab' 直接键入 fstab, 就使用 emacsclient 打开了/etc/fstab, 一方面省劲儿,只需要把注意力关注在要打开的 文件名上,另一方面,也是备忘,写到.bashrc 里面,时不时的看一眼,就想起来 了:哦,这是一个挺重要的配置文件,在这个地方放着呢!

    事实上在 linux 下使用了 Deamon 方式的 Emacs 以后,我都不怎么通过 ido 来打开文 件,大多数时候,常用的文件的文件名,我都有对应的 alias, 想打开看得时候, 直接在 shell 下输入别名就行了。我甚至还有一套自己的别名命名规则,哈哈

    我之前有很严重的强迫症,现在克服的的好多了,不过完美主义是改不了了。其 实我做的大把的修改,技术方面的东西反而不多,更多的是个人体验方面,甚至 可以上升到一个`个人哲学方面', 我也描述不清楚,我觉得只有个人才能完全体 会。总之,我觉得我做的大量工作,应该是 linux 或者说开源界很欠缺的那种东西, 太自由化,缺乏标准,在这点上,microsoft 尤其是 apple 应该做的比较好。

    不过,我觉得这也不完全是坏处,至少,你可以选择自己喜欢的方式. 例如 Emacs. 我觉得你的那篇帖子的标题:欲练神功,必先自费武功,用到 emacs 上面最贴切不过了。不说从其他编辑器转到 Emacs, 同样都是使用 Emacs, 也是一样。

  • 你是 vim 党还是 emacs 党? at 2012年03月07日

    #27 楼 @hisea , 刚刚我看了下你说的 sublime text 2, 优酷上的一些视频, 的确很是酷炫~~ 不过,可能用 Emacs 太投入了。觉得有些多余的功能,例如 鼠标拖拽之类的,反而没用。倒是 bundle 类似的功能,我几乎天天用,天天 改,不过 Emacs 下换了个名字叫做 Yasnippet.

    我甚至上 github folk 了一个 textmate-mode, 然后自己做了一些更好的修改, 偷了很多 textmate 的精华。例如,典型的以 tab 点为坐标的 backspace. 还有 textmate 方式的换行。

    我觉得除了不支持多线程,其他任何编辑器的功能都可以在 Emacs 中完美实现. 当然不是我实现,emacswiki 是巨大的宝库。

  • 你是 vim 党还是 emacs 党? at 2012年03月07日

    #27 楼 @hisea , 你是哪个学校的,那么牛。哈哈。

    gentoo 刚开始使用 linux 时,想过来着,后来嫌麻烦,还是使用 Slackware 了. 虽然我没有你那么彻底,不过我刚开始装 Slack, 也是一个包一个包装的。

    原因就是:之前没接触过 linux, 那时候对于 linux 有一种莫名的恐惧, 带来的副作用就是:每装一个包,我就希望看看他到底装到了那个目录下, 包含什么类型文件,不同的文件,以及不同的目录大概的用途。

    折腾来折腾去,唯一的好处,就是消除了恐惧感,后来还是觉得完整安装 Slackware 效果最好。现在觉得当时挺浪费时间。哈哈。

    fvwm 那个东西没用过。貌似也是一个类似于 Emacs 的玩意儿。需要折腾. 我也是因为没时间,后来用 XFCE4 觉得很好,就再没有换过。

    undo, 其实,你完全可以把 C-_, 换成 C--嘛。不过我用 C-/用的多,习惯问题。

    我不知道你说的所谓全局搜索是什么意思?难道你指的在 ibuffer 或 dired 模式下 搜索所有被标记文件的内容吗?

    你说的 tabbar.el, 我大概能猜出来什么用途,我常用的插件好歹也有几十个, 还真没用过这个。正如你说的,主要还是没需求,所以就没考虑。

    刚刚我在另一个帖子 (讨论 dired 的那个) 里发了下我的.bashrc 里面的 xmodmap 配置, 你如果还打算使用 Emacs 的话,不妨快捷键换了试试。相信我,就我之前的经历 来说,更换 capslock, 绝对是一个质的飞跃。

    Vim 很牛的。我天天用,用半个月上不了手。不过,如果你像我这样,发帖也使 用自己 Emacs, 还使用自己熟悉的键位,顺便还加载个 markdown-mode, Vim 就没 那么容易了。哈哈。

  • #28 楼, @siyang1982 , 嗨~ 我当然知道 xmodmap 了。

    下面就是我的 xmodmap 的命令,只不过我嫌麻烦,不想搞那么多~/.????配置文件, 所以几乎我用到的所有所有环境配置,包括 rvm, 大把的别名,函数等等,都放在了 .bashrc 里面。

    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
    
    
    

    上面的代码将 Capslock 替换为 Ctrl, 但是左边的 Ctrl 功能没有变. 只是我把右边的 Alt 变为 Capslock 了。

    可是这些只是在 X 下的 terminal 里面有效。

    我问你的是:在纯文本终端下,是否有类似功能? 我想不出来,貌似必须自己编译自己的 linux 内核才可以实现吧?

  • @siyang1982, 我的初衷就是因为不用鼠标,那个小红点太碍事儿,

    而且我那几个键的键位和 Vim 也不一样哦。left, Vim 是 H, 我是 J.

    现在觉得当时的选择绝对是对的。至少每个手指都很舒服。

    例如:经常切换 buffer, C-x b, 然后输入关键字。ido 帮忙筛选. 如果换成 C-x n, 除了右手食指,其他手指都不用动,省劲儿啊。

    现在整个键盘,除了 b, q, a, z 不多用,其他键都已经条件反射了。

    另外,因为 C-f, M-f 相应的被解放出来了。使用 Capslock 作为 Ctrl, C-f 键真的是相当输入,所以,我另外绑定了一些非常重要,频繁的 快捷键了。

    唯一的痛苦就是,碰到默认的 Emacs 配置,现在很绕手了。哈哈。

    还有就是进入纯文本终端,不知道这里有没有办法也更换 Capslock?

  • 你是 vim 党还是 emacs 党? at 2012年03月06日

    @hisea , 相比较而言,我是新手了 (一年而已), 哈哈。

    不过,Emacs 如果不折腾,失去 Emacs 存在的意义了。你最终换其他编辑器,我想 也许是因为你折腾的少的缘故。(我承认,可能我自己折腾的有点太过了)

    事实上,我认为默认的 Emacs 那些东西,真不是一般的难用。我要是你,这么多 年一直用默认的那些东西,不用说六年,六个星期我都坚持不下来。

    Emacs 的精髓,天生就是一个人,一个样儿的玩意儿~~

  • @hhuai , 如果使用 BDD, 测试代码量大于功能,很正常的。

    我粗粗的看过 the RSpec Book, 尝试着描述一下 BDD.

    关键你必须理解这是一种开发方式,而非测试框架,(只不过初期作为开发方法, 同时后期也可以作为测试框架), 其精髓就是必须先有测试 (或行为), 然后以测试 或行为为驱动,然后就是自外向内,又自内向外的反复迭代,重构的过程。

    第一步:先使用 cucumber 来表述对象之间的外部关系,即实现 Feature. (这一步,传统模式,往往都是先通过了内部单元测试,才进行外部的集成测试. 事实证明,这种方式在后期是绝对低效的,尤其是错误涉及到更改单元对象内部 代码),

    第二步:下一步就是针对所有的 feature 定义 step_definitions.

    这其中的精髓是:从外到内,根据需求添加代码,而且这些代码要足够简单,只 需要满足当前迭代就好。编写 step_definitions 就是一个反复的出错,添加对应 step_definition 除错的过程。直到改正所有的跟对象之间的关系有关的 错误,直到最后只剩下一些逻辑错误,这时候就该进入 RSpec 迭代了。

    第三步:Rspec 相对来说,更像测试代码。不过此时的目的是为迭代服务,而非 测试。实现对应功能以后,再返回 Cucumber, 直到实现这个软件的 feature.

    我自己也是糊里糊涂。

    我直接复制一段介绍:

    行为驱动测试和一般测试的最大不同为:

    • 根据一个需求,写出测试驱动代码,常常叫做 UserStory.

    • 运行 Story 测试,必然是失败的。

    • 根据 Story, 来编写代码

    • 只满足 Story 所需功能。不多不少!

    • 再运行 Story 测试,完整通过测试。

    • 重构现有代码,使其尽量简单,高效。

    • 再根据新的需求,写出新的 Story.重复以上过程。

    这个循环过程,常常被称作 red/green/refactor.

    对了,@hhuai, 留下你的邮箱。github 稍后再搞,你要感兴趣,我先给你发我的 的配置,你看看。

  • @siyang1982 , 有 ido 配合,yari 看 ri 文档我觉得很爽啊..

    anything 难道是类似于 Linux 下的 locate 的玩意儿?

    C-f 和 C-b, 我映射到了 C-l 和 C-j, 这样的话,我左右上下移动光标是单手的. 左手只需要按着 Capslock 或 Meta 即可。这样改的初衷也许你会觉得很可笑, 其实初期,C-f 和 C-b 也觉得不错。不过那时候,使用 Ctrl 而不是 capslock, 感觉左手跨度有点大,右手移动范围也有点大。

    最要命的是:我用本子。中间有个小红帽,该死的 B 键...

    @hhuai , 好的,我尽快。不行我就先放上去吧...

    主要第一是我现在还不会用 github. 我以前只用过 RCS, 一个 Linux 的本地版本管 理系统。第二:我觉得不写一篇专门的文档,传上去没有任何意义。因为我使用 Emacs 的方式应该相当另类了。就如@siyang1982说的,键位全换了。当然,绝对 比默认键位输入多了。这其中有一部分哲学,在http://www.cnblogs.com/zw963/ 当中已经讲了,当然,不见得没个人都一致。而且大把的工具,常用的,不常用 的,几乎 包涵 Emacs 能做的任何事,40 多兆... 是不是很吃惊?甚至 Emacs 下的翻 译,我都搞了两个,一个 Google 在线翻译 (整句), 另一个是 linux 的 dict daemon, 之前如果没用过或者粗粗的用过,或者不了解最基本的 lisp, 根本无用, 超不过十分钟肯定全部删掉。此外代码相当乱,无用的代码也大把。我估计绝对 没人猜到,其实我 Emacs 只用了一年而已。

  • 你是 vim 党还是 emacs 党? at 2012年03月06日

    @hisea , 使用 Emacs 的第一步,是 Caplock 和右边的 Alt 替换. 否则,Emacs 你应该没用多久,而且肯定也不熟。

  • sorry. 点错了。

  • @Azon , 嗨,哥们儿,看样子你不知道我们在说什么。

  • @kevinhua ,太好了 我还发愁怎么办卡呢。有需要就联系你啊。目前我已经有 3.1 那个了。

  • @messiahxu , 我还以为你有。我之前也是好 Google 了。找不到。

    恨不得自己办张 Visa, 去买一本。

  • @siyang1982 ,嗨,你好。刚刚才注意到你的回复。谢谢你的提醒。 之前,我没有仔细看过 rinari. 今天试了下,的确不错。

    我甚至耍了一点小小的技俩,下面的代码,我将 C-f 将映射到 C-c ; f (我只需要简单的按下 C-f, 等价于按下 C-c ; f), 现在使用 C-f 作为快捷键, 切换还是很爽的。原来的 Dired 模式,换成了 C-f C-f. 哈哈。

    (define-key key-translation-map [(control f)] [(control c) (?\;) (f)])
    

    我上你的 github 看了下,看得出来,你也是绝对是用心琢磨,配置出来的。因为 Emacs 里面的一些精品插件,我看到你都有使用。

    你的 javascript 的 yasnippet, 我就直接收下了。(虽然目前我还不懂 javascript)

    rsense 以前了解过,一直没用过。觉得他又太大用处。auto-complete 足够了。

    下面有几个问题请教一下:

    1. anything 我实在没明白那个是什么玩意。你方便的话,给说下。

    2. yari 貌似不支持正则表达式查询吧?我都基本上很少上 web, 都是用 yari. 但是有时候有些方法名非常短,或者包括问号,你会怎么样做?

    最后给你提个建议:nxhtml-mode, 貌似有点老,而且有问题。貌似很多专业功 能也用不到,推荐使用 html-mode 或 rhtml-mode 替代,这个模式就是从 rinari 分离 出来的。如果需要 mumamu 那样的多模式切换,可以考虑单独配置 html-mode 配合 multi-web-mode, 一样的效果。

    如果你希望使用 xhtml 风格,只要在 html 模式的 hook 中添加下列语句即可。

    (setq sgml-xml-mode t)
    

    用 Emacs 做开发的人,实在是不多。以后要多多互相交流. 留个联系方式吧:[email protected]

  • 又想起一个 lambda 的实例,是 Programming ruby 1.9 里面的好像。

    一个对象 o 在某个安全级别下运行,其内部机制实际上为: 通过一个 Proc 对象,将对象 o 裹 (wrap) 起来,并在代码块内设定需要的安全级别。 例如:

    lambda {$SAFE = 3; ... }.call
    

    我不知道该怎么描述这种用法,也许 8 楼所说的延后执行,只是神秘的 lambda 其 众多含义中的一种而已。

    puts_hello = lambda{ puts "hello world"}.call
    puts_hello      # => 输出 "hello world"
    

    其实以上这种简单的实现,使用 proc 又未尝不可呢? 只不过在某些复杂点的场合,使用 lambda 出错的几率小一点。

    puts_hello = proc {puts "hello world" }.call
    puts_hello      # => 输出 "hello world"
    

    我觉得说了这么一堆示例,其核心内容,还是以下两点:

    1. lambda 更像一个方法 (函数) 调用。(其实就是一个匿名方法,而 proc 只是一个代码块参数)
    2. lambda 是闭包的。

    在某些场合,以上两点可能很重要。只是我资历尚浅,闭包没见过实际应用。呵呵。

  • @clc3123 , 我明白了。

    如果以上代码,是在 initialize 中实现,这种方式显得更自然。

    A.new do
      ...
      ...
    end
    
  • @ken_lv ,嗨~ 我完全明白你的意思。虽然你的代码有多处错误。呵呵。

    不过我觉得你说的那个场合,并不是特别需要 lambda 的场合,相反, 你说的这个需求,正是代码块参数最擅长的地方. (这里我把代码块当作一个普通方法的一个特殊参数来看待,这样理解很好)

    显然,你的代码更好的实现是:

    def cross_loop(array_a, array_b, &process)
      array_a.each do |element_a|
        array_b.each do |element_b|
          yield array_a, array_b
        end
      end
    end
    
    cross_loop([1,2,3], [3,4,5]) {|x, y| puts x + y}
    cross_loop([1,2,3], [3,4,5]) {|x,y| puts x * y}
    

    很显然,lambda 真正特殊的地方是它的闭包特性,还有就是#8 楼说的,延后执 行,这两个特性,你的代码都没有涉及。

  • Chrome 是不是比光速还快? at 2012年03月04日

    @fsword , 是我没说清楚,文件仍然在我的 home 下面,只不过编译的时候,按照/tmp/.tmp-???编译的. 你在 tmp 下看到的只是我 home 的符号链接而已。但是系统以为我软件安装在了固定的路径/tmp/.../下面。而我在安装时,也正是使用/tmp/..../这个路径编译的。

    我这样做的目的你没有明白:

    1. 我不想装在/opt/ 或/usr/local/bin 下面,否则干嘛费这劲儿?
    2. 我就想放在自己的 home 下面。像 rvm 那样。
    3. 不管使用那个账户来用,都不需要再重新编译。只要复制到那个用户的家目录下即可. 最多启动那个用户的 shell 的时候,.profile 增加几行在/tmp/下创建符号的命令而已。

    没有任何权限问题,你最多把我创建的符号链接删除了,我的软件没办法用了, 我得重新运行.profile 重新生成一下链接。

  • RubyMine 4 正式版发布 at 2012年03月04日

    @zhang_victor , Emacs 照样可以调试啊。

    我曾经给调试器设置了一大堆快捷方式,不过后来一个都没用. 因为我发觉命令方式模式更高效。一对快捷键,反而不方便。

    而且你使用 ruby,根本不需要 GDB 那玩意儿.