<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>hick (Hick)</title>
    <link>https://ruby-china.org/hick</link>
    <description>blog.HickWu.com  www.WebRube.com</description>
    <language>en-us</language>
    <item>
      <title>Emacs 简化按键利器 hydra</title>
      <description>&lt;p&gt;ruby 社区有 ruby 的妈妈推崇 Emacs , 感觉还是普遍有好感，周末好不容易写了这篇，也在这里发下。顺带一个 Emacs 公众账号这种非商业广告行为应该是允许的哈!?  嘿嘿&lt;/p&gt;

&lt;p&gt;原文链接 &lt;a href="http://emacsist.com/10001" rel="nofollow" target="_blank" title=""&gt;http://emacsist.com/10001&lt;/a&gt; 作者 &lt;a href="http://blog.hickwu.com/" rel="nofollow" target="_blank" title=""&gt;Hick&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;正文：&lt;/p&gt;

&lt;p&gt;时不时有人冒出来说有 Emacs 教徒因为小拇指按 ctrl 太多导致 XXX 病，不要用 Emacs! 有 XXX 病的人估计跟得出这个结论的人类似，有这样的特质：不懂得思考或者懒得主动改变。Emacs 教里不但有 evil/spacemacs 这样的 vi/vim 一族，也有把 capslock 改成 ctrl 的键盘党，还有改变按键习惯的行动派。这才彰显自由的魅力，是的，Emacs 难用爆了 --- 对把握不好自由的人来说。&lt;/p&gt;

&lt;p&gt;个人有限的见识范围里，简化 Emacs 按键习惯有俩种思路，一种是 smex 式，一种是 hydra 式。喜欢按 ESC 的 vi 党，除了试自成一派的 evil/spacemacs, 也可以考虑安装个 smex 并绑定到 ESC 键绑找找感觉，就是这样 &lt;code&gt;(global-set-key (kbd "&amp;lt;escape&amp;gt;") 'smex)&lt;/code&gt; .  vi 党还可以继续想象。&lt;/p&gt;

&lt;p&gt;该吹捧 hydra 了。初步考证其作者的介绍文章和 github commit 记录，hydra 是一个 2015 年才开始的新 Emacs 包，在 github 已经收获了 100 多个 star , 相当受欢迎了 --- 截止 hick 同学考证的时间 2015-03-21 , github 上超过 100 个 star 的 Emacs 类项目不到 200 个。&lt;/p&gt;

&lt;p&gt;特别说明下，hydra 作为新兴项目，作者年初介绍的 blog &lt;a href="http://oremacs.com/2015/01/20/introducing-hydra/" rel="nofollow" target="_blank"&gt;http://oremacs.com/2015/01/20/introducing-hydra/&lt;/a&gt; 的使用方式跟最新的情况已有转变，不再支持 hydra-create ,说不定后续还会有什么改进。本文仅作为指引，最新情况最好参考官方：&lt;a href="https://github.com/abo-abo/hydra" rel="nofollow" target="_blank"&gt;https://github.com/abo-abo/hydra&lt;/a&gt; . 插播广告：也欢迎关注本人 (Hick) 在维护的 Emacs 微信公众账号：Emacsist, 除了分享交流 Emacs 使用，看到有 hydra 的新情况我也会通过公众账号广而告之 :)&lt;/p&gt;

&lt;p&gt;&lt;img src="http://emacsist.com/emacs150.jpg" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如果用过 magit , 对 magit-status 下按 c 等出现的可选菜单应该有印象，hydra 正是把这个能力扩展了。hydra 也在快速进化变强，最基本的思路是：根据使用者需要组合一系列函数，每个函数用一个字母表示; 再定义一个前缀按键比如 C-t (当然也可以是 ESC). 配置好以后按 C-t 就会在 mini buffer 中显示该系列函数的列表，再按对应的字母即可执行函数，候选列表提供高亮以及函数说明等体验。&lt;/p&gt;

&lt;p&gt;建议以包方式安装 (需 Emacs 24 或者以上版本) hydra: M-x package-install hydra&lt;/p&gt;

&lt;p&gt;在配置文件中定义需要组合的相关函数以及对应菜单的样式的函数，并绑定到全局快捷键 C-t :&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(defhydra hydra-hick (:color pink
                             :hint nil)
  "
^Utl^              ^Unmark^           ^Actions^          ^Git
^^^^^^^^-----------------------------------------------------------------
_k_: kill line     _u_: unmark        _x_: execute       _S_: magit show
_s_: smex          _U_: unmark up     _b_: bury          _g_: magit status
"
  ("k" kill-line :exit t)
  ("u" Buffer-menu-unmark)
  ("U" Buffer-menu-backup-unmark)
  ("s" smex)
  ("x" Buffer-menu-execute)
  ("b" Buffer-menu-bury)
  ("T" Buffer-menu-toggle-files-only)
  ("g" magit-status :color blue)
  ("S" magit-show :color blue)
  ("c" nil "cancel")
  ("v" Buffer-menu-select "select" :color blue)
  ("o" Buffer-menu-other-window "other-window" :color blue)
  ("q" quit-window "quit" :color blue))

(global-set-key (kbd "C-t") 'hydra-hick/body)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;生效后按 C-t 就会出现如下图所示可选菜单，再按 k 就会调用 kill-line (默认绑定到 C-k) 删除当前行光标以后的文本。注意定义 k 对应的函数的时候的 ":exit t" 表示执行完 kill-line 函数以后退出 hydra 提示菜单，而默认情况下没有指定则不会退出。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://emacsist.com/static/emacs/hydra.gif" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;示例只是随便找了一组函数弄到了一起，也可以按照个人使用习惯定义多组，比如 python 操作习惯一组绑定到 "C-t p", ruby 操作习惯一组绑定到 "C-t r". 用户自己定义其实稍显麻烦，个人预测可能将来会有一些定义好的 hydra 操作模板可供选择。更多高级用法等参见官方 &lt;a href="https://github.com/abo-abo/hydra" rel="nofollow" target="_blank"&gt;https://github.com/abo-abo/hydra&lt;/a&gt; . &lt;/p&gt;

&lt;p&gt;有些同学可能用多了按键组合比如 "C-x o" , 却不知道其对应的函数，按键之前按 "C-h" 也就是 "C-h C-x o" 即可， "C-h m" 可以查看当前 major-mode 和所有 minor-mode 提供的相关函数和按键等情况，"C-h" 前缀的系列按键最好都熟悉下，"C-h C-h" 可以查看。&lt;/p&gt;

&lt;p&gt;某种意义上来说，hydra 做的也没什么神奇的，跟挨个定义全局或者局部组合键多了一个提示说明，可以省去组合键的记忆。比较不那么常用，时不时又需要或者不容易记的若干相关函数建议组团走 hydra 方式。&lt;/p&gt;

&lt;p&gt;呼应下开头，就个人的使用经验来说，Emacs 的终端跟非终端体验的差别，导致我没有动力在某些场景 (比如 vps, 公司线上机器) 下使用 Emacs. 用 putty 终端下 ace-jump-mode 和 company-mode 等个人使用体验都不大好，有尝试去 github 提 issue , 没能力和精力去深究。不得不以简单的方式使用 vi , 比较遗憾。(根据小伙伴的反馈，我的个人体验差别可能主要由 windows 的工具导致的，回头我再试试 mac 终端等，有结果了再来更新)&lt;/p&gt;

&lt;p&gt;ps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;欢迎转载，不过麻烦注明原文地址和作者&lt;/li&gt;
&lt;li&gt;本文纯属个人心得，不代表任何立场&lt;/li&gt;
&lt;li&gt;如有疏漏，欢迎交流指正&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>hick</author>
      <pubDate>Sun, 22 Mar 2015 23:11:13 +0800</pubDate>
      <link>https://ruby-china.org/topics/24784</link>
      <guid>https://ruby-china.org/topics/24784</guid>
    </item>
    <item>
      <title>有没有日常开发甚至部署中使用 docker 的?</title>
      <description>&lt;p&gt;之前看 docker 官方文档还有提醒 not ready for production enviroment.  看起来比较理想，是不是实际运营使用的还不多？&lt;/p&gt;

&lt;p&gt;陆续关注蛮久了，大概理解 docker 利用 cgroup 等实现资源隔离，但是貌似跟虚拟机不一样，并不能解决公共库依赖等的问题？ &lt;/p&gt;

&lt;p&gt;之前用 vagrant 感觉还可以，初始化 vagrant 运行环境有些麻烦，完了以后也多少遇到过各种问题，作为搭建统一的开发环境还是有些合适，整体感觉还是比较重，docker 看起来就很轻量。&lt;/p&gt;</description>
      <author>hick</author>
      <pubDate>Sun, 18 May 2014 12:46:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/19341</link>
      <guid>https://ruby-china.org/topics/19341</guid>
    </item>
    <item>
      <title>ruby 在实际工作中的中文支持情况如何？</title>
      <description>&lt;p&gt;前几年探究的时候支持非常不好，也没花什么心思学习 ruby,  当时新闻说 1.9 以后会有比较大的改观。现在  2.0 都出来了，简单试用还不错，不知道其他场景遇到的中文问题怎么样？2.0 使用的可能不多，1.9 如何？总感觉作者同属 CJK 系的，中文支持应该很不错才说得过去。&lt;/p&gt;

&lt;p&gt;可以有个对比，比如我接触比较多的，感觉 python 2.X 的中文支持相当差，不仅仅文件头要声明，各种字符类型，数据库查询莫名的字符问题等等---字符问题真是 python CJK 用户的大痛；python 3 倒是改进了很多，但是我想用的好几个周边库都不支持 3。php 相对就比较好，除了在 mbstring/iconv 转换时可能遇到错误用 ignore 忽略都还不错。&lt;/p&gt;</description>
      <author>hick</author>
      <pubDate>Fri, 15 Nov 2013 12:50:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/15563</link>
      <guid>https://ruby-china.org/topics/15563</guid>
    </item>
    <item>
      <title>webrick 跑的好好的，换成 apache+passenger 后浏览 ok，插入记录报错咋调试？</title>
      <description>&lt;p&gt;原来在 webrick 下跑的 rails4 的 blog 跑的还好，浏览插入编辑记录都正常。换成 passenger 以后，浏览也 ok，编辑和插入记录时报错：&lt;/p&gt;

&lt;p&gt;We're sorry, but something went wrong.
    If you are the application owner check the logs for more information.&lt;/p&gt;

&lt;p&gt;production.log 文件中能找到一些浏览的访问信息，但是没有看到出错的记录; 上面提示的搜索结果比较少，没找到游泳的，这个咋调试哈？&lt;/p&gt;</description>
      <author>hick</author>
      <pubDate>Fri, 25 Oct 2013 17:01:11 +0800</pubDate>
      <link>https://ruby-china.org/topics/15032</link>
      <guid>https://ruby-china.org/topics/15032</guid>
    </item>
    <item>
      <title>不能直接在 route 处理带 ? 的 url 么？</title>
      <description>&lt;p&gt;搜了下，官方 route 的文档也大概扫了下，貌似没涉及这方面的？&lt;/p&gt;

&lt;p&gt;比如我是想把 /?p=1 这样的请求重定向成 /posts/show/1 这样的。下面这样的定义不奏效。 ? 前加反斜杠也没用，现在只得在 action 中处理 params[:p] 了？&lt;/p&gt;

&lt;p&gt;get '/?p=:id', to: 'posts#show', constraints: { id: /[0-9]+/ }&lt;/p&gt;</description>
      <author>hick</author>
      <pubDate>Fri, 16 Aug 2013 00:08:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/13363</link>
      <guid>https://ruby-china.org/topics/13363</guid>
    </item>
    <item>
      <title>这改头像功能，坑爹啊... 害我 gravatar.com 改了俩回！</title>
      <description>&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/76a458943f52d36882dc05d6761005fb.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;应该是至少去了两回。来回应该上传设置什么的改了好几回，我是说怎么不生效呢。&lt;/p&gt;

&lt;p&gt;另外，左边那个头像上传的地方也没提示后缀格式，我传完一个 gif 才提示我不能传 gif，也有些不人性化。&lt;/p&gt;</description>
      <author>hick</author>
      <pubDate>Wed, 14 Aug 2013 14:36:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/13321</link>
      <guid>https://ruby-china.org/topics/13321</guid>
    </item>
    <item>
      <title>有点奇怪，为什么官方的 guides 都不少错误？</title>
      <description>&lt;p&gt;ruby 新手，rails 新手，个人接触 ruby 的感觉是这语言语法很奇幻...&lt;/p&gt;

&lt;p&gt;想快速先用 rails4 搭个最简单的 blog，然后一边写 blog 一边学习。 &lt;/p&gt;

&lt;p&gt;虽然安装过程有点苦，总算是一个晚上搞定了 windows 和我的 centos 的环境，可看官方的这个 guides，目前为止竟然发现两处错误：&lt;/p&gt;

&lt;p&gt;一处是 5.12 "&amp;lt;%= form_for :post, url: post_path(&lt;a href="/post.id" class="user-mention" title="@post.id"&gt;&lt;i&gt;@&lt;/i&gt;post.id&lt;/a&gt;)" 这段代码后边不知道怎么多了一个大括号：  }&lt;/p&gt;

&lt;p&gt;一处是 5.12 以及 5.14 都出现了的“&amp;lt;%= link_to 'Show', post_path %&amp;gt;” ,  应该是 "&amp;lt;%= link_to 'Show', post_path(post) %&amp;gt;" &lt;/p&gt;

&lt;p&gt;url &lt;a href="http://guides.rubyonrails.org/getting_started.html#updating-posts" rel="nofollow" target="_blank"&gt;http://guides.rubyonrails.org/getting_started.html#updating-posts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以前搞 php 的，php 官方文档的评论方式挺喜欢，这官方文档还得去 mail list 反馈？感觉搞 rails 的挺厉害的，官方文档都没得看？&lt;/p&gt;

&lt;p&gt;看来原本学新版想避免升级的转换的思路真不大好啊？&lt;/p&gt;</description>
      <author>hick</author>
      <pubDate>Tue, 13 Aug 2013 15:58:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/13305</link>
      <guid>https://ruby-china.org/topics/13305</guid>
    </item>
  </channel>
</rss>
