任峻宏的小站

任峻宏的小站

马上订阅 任峻宏的小站 RSS 更新: https://renny.ren/feed

[译] Terminal 功夫——方便开发者的实用技巧

2016年12月2日 08:00

前言

这是我在过去几年中提炼出的一些方便你编程的小技巧和提示。在这篇文章中,你将学到如何更有效率地做你每天做的事情。  

快速搜索命令行历史记录

我真的很难记住一些命令,特别是那些有一大堆参数的。而且有时候更烦,你不得不停下来然后又去google你两个小时之前引用的某个命令。不用担心,reverse-i-search可以拯救你。打开你的终端,按下Ctrl + R。输入你最近使用的命令的前几个字符,它会显示出符合你要查询的命令。如果有多个匹配的命令,重复按Ctrl + R直到找到你想要的然后按Ctrl + E选择即可。
你也可以输入history就可以显示出你之前执行过的命令列表。  

缩短退格时间

你是否遇到过很长的查询,比如跨了4行,然后你想跳到前边去做一些修改,或者是你写了很长的命令,跨了4行,结果发现只是在最开始的地方有点错?这时候你可能要按箭头,然后一个一个字符地把光标移到开头去。但你可以使用快捷方法,这些方法可以节省你很多按方向键和空格键的时间。

Ctrl + K - 删除光标右边的所有内容

Ctrl + W - 删除光标左右的所有内容(一次一个单词)

Ctrl + A - 跳到行首

Ctrl + E - 跳到行尾  

在 rails console 中用 _ 访问最后一个表达式

这是另一个我经常犯的错误:在 rails 控制台中查询一个 ActiveRecord model,忘了把结果保存在一个变量里,然后按加上一个变量再做一遍。

很幸运比我聪明的人也有这个问题,实际上他们已经解决了。每次你在 console 里面执行一个命令或者是功能,其返回值都会被保存在一个叫做_的变量里(对,就是一个下划线)

所以,比如你在 console 里面执行了User.first(5)。你得到了前5个 users 但是你忘了存在一个变量里。这时你只需要_.first.name或者更好的是你可以 users = _. 现在变量 users 就等于User.first(5)的返回值了。  

找到任何URL的 Controller 和 Action

这个也超有用,尤其是当你的 routes 文件达到了500行,你有5个不同的 namespaces,还有一堆自定义的 actions 时。你有个URL,你想知道它执行的是哪个 Controller 和 Action。常见的方法是打开 routes 文件然后扫描整个文件去查找。或者你会用 RailsPanel 来查看 Controller 和 Action。但这都要耗些时间。

如果你想要秒秒钟搞定这件事,在 rails console 里面用这个命令:

Rails.application.routes.recognize_path "http://localhost:3000/users/11"

Ps: 当用在不是GET的action上的时候要小心,可能会返回正确的controller,错误的action

在 sandbox 里面玩

你想在 console 中弄乱一些值然后看看程序怎么反应,但是你又不想破坏你的原始数据库?不用害怕,rails console 里面有一个内置的选项为此而设。用以下命令启动 rails console

rails console --sandbox

在这个模式下 console 被包装在数据库事务中启动。当你退出回话后,事务将回滚。所以你可以随意增删改数据,当你退出 console 时数据库会被恢复到原始状态。但要小心在沙箱里面运行事务因为并非所有数据库都可以处理嵌套事务。  

重新加载控制台

你在 console 里面试了一些东西,不起作用。然后你要改一下你的代码再试一次,这时候不用关掉 console 又重新启动,只需 reload!  

去除ri和rdoc

bundle installing

你在 Github 上看到一个很好的项目,你立即把它 clone 下来然后bundle install。然后...你花了30分钟来下载所有的 gems,而这其中一半的时间都花在了下载 RDoc 和 ri 文件上了,你可能从来不用这些,甚至你可能根本不知道这是什么鬼。可以说只要你联网了你就不是必须要用他们,但是当你 bundle 的时候会自动下载。这里有两个方法来处理:

第一,如果你是安装单个 gem,使用

gem install rails --no-ri --no-rdoc

这样就告诉 bundler 不要下载 RDoc 和集成 ri 文件。这样就节省了很多时间和空间。

但上面这个方法只是在你安装单个gem的时候有用。如果你想让安装所有gem的时候都默认这样做的话:

步骤1. 在home目录下创建一个文件命名为.gemrc

cd ~; touch .gemrc;

步骤2. 在你的编辑器里面打开这个文件

subl ~/.gemrc # 用你的编辑器打开这个文件

步骤3. 将以下代码粘贴进去即可

gem: --no-ri --no-rdoc
install: --no-rdoc --no-ri
update:  --no-rdoc --no-ri

我们还可以更深入一点。很多大中型项目的gem平均要跑50秒,这还不包括解决每个gem的依赖。例如Discourse这个项目有大概150个gems

我们可以通过并发安装gem让这变得更快,确保充分利用你的网络带宽处理能力。我们通过给bundler加上--jobs这个参数来完成。

bundle install discourse --jobs=4

运行这个命令你会看到gems的安装快得飞起。然而这不是任何时候都适用的,有时候会出现死锁或者冲突。解决方法只需运行:...

剩余内容已隐藏

查看完整文章以阅读更多