拥抱Mac之码农篇

使用Mac大概两年时间。之前用着公司配的一台27寸的iMac。无奈机械硬盘严重拖慢速度,影响工作心情。于是入手Macbook Retina 13。这两年的开发工作所有在Mac上完毕,也积累了一点心得。遂总结此文。文章主要介绍一些我觉得能够提高程序猿工作效率的工具软件,希望对使用Mac的码农有点帮助。

包管理

Mac系统上基本的包管理有MacportHomebrew。类似于Debian系列的apt-get。Redhat的yum,主要用来安装一些开源软件,这些工具的存在大大简化了开源软件的安装过程,要不然安装一个软件可能须要提前安装一大堆依赖的软件。

网上貌似普遍推荐Homebrew,所以当时也直接选择了Homebrew,两者的优缺点大家能够Google一下。按网上的说法主要是两者对依赖包处理方式不一样。引用知乎上的一个回答:

Flink是直接编译好的二进制包。MacPorts是下载全部依赖库的源码。本地编译安装全部依赖,Homebrew是尽量查找本地依赖库。然后下载包源码编译依照。Flinkeasy出现依赖库问题,MacPorts相当于自己独立构建一套。下载和编译的东西太多太麻烦,Homebrew的方式最合理。

Homebrew通过下面命令安装就可以:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrew上全部的软件以ruby代码封装成formula的形式提供,通过命令brew install xxx下载formula,得到formula中定义的软件的地址,通过wget获取软件安装包,然后本地解压编译。

经常使用命令介绍

搜索软件包

在安装之前能够先搜索想要的安装包。这里以搜索macvim为例,输入下面命令:

brew search macvim

安装软件包

brew install macvim

列出已安装的软件包

brew list

删除软件包

brew uninstall macvim

升级过时的软件包

  • brew update

  • brew upgrade

配置快捷键

作为一个程序猿,我相信Control键是最常使用的键位之中的一个,而键盘默认Control位置按起来十分变扭,easy按错,我的做法是将Caps Lock映射成Control键,个人感觉体验非常赞。

终端

终端是码农的利器,一个好的终端会带来效率的提升。这里推荐iTerm2。非常方便的快捷键呼出和隐藏,强大的分屏支持。方便的历史命令自己主动完毕,丰富的UI定制等等,详细可參考iTerm 2 Features

这里简介一下我经常使用的iTerm2快捷键:

  • cmd + t: 新建标签页, cmd + 数字:
  • ctrl + h:清空当前行
  • cmd + d: 垂直分屏, cmd + shift + d:水平分屏, cmd + [ 和 cmd + ]:分屏切换
  • cmd + ; : 历史命令自己主动完毕
  • cmd + shift + h:剪贴板历史

强烈建议大家略微花点时间学习并打造一个适合自己的iTerm2。

Shell

我之所以喜欢用Mac工作,非常大一部分原因就是喜欢Mac上的Shell环境。熟悉Shell的朋友都知道命令行界面在大部分情况下是能够高效替代图形界面,但由于命令行界面使用门槛高。并且图形界面长得更讨人喜欢,所以命令行界面才沦为少数人的工具,能够说是码农专用工具。

这里毫无疑问推荐oh-my-zsh。github上高达18000的stars可见其受欢迎程度。通过下面命令安装:

wget --no-check-certificate http://install.ohmyz.sh -O - | sh

只是默认的oh-my-zsh长得略丑,而且也不太好用,通过配置~/.zshrc能够让oh-my-zsh脱胎换骨。

首先选择一个美丽的theme,终端是使用频率最高的软件之中的一个,UI不美观会影响工作心情。我这里比較喜欢robbyrussell主题,不同主题的样式可參考这里

配置你须要的插件,在~/.zshrc中编辑plugins=(git ruby osx brew sublime)将你须要的插件选上,全部支持的插件可參考这里

这里对oh-my-zsh有一个不错的介绍。

编辑器

这里推荐MacVim和Sublime

MacVim

首先说说MacVim,MacVim为vim提供了Mac上的原生GUI。假设你纠结为啥不用CUI的vim,那么能够看下这里对MacVim的一个讨论。

安装MacVim最快的方式是运行brew install macvim

vim的精髓就是强大的插件支持。当然最繁琐的也是配置的插件。幸运的是github上已经有了非常完好的解决方式 janus。依照说明完毕janus的安装后,你基本上拥有了一套还不错的vim配置了。

我基于janus以及自己的习惯做了一些改进,点我:

  • 删除了一些不太用得到的插件,比方一堆用不到的主题(插件多了会影响vim的性能)
  • 替换了一些插件(比方将自己主动补全插件supertab替换成YouCompleteMe,这货真心非常强大。vim上最智能的C风格语言自己主动补全插件,基于clang实现)
  • 添加了一些插件,比如surround,
    auto-pairs
  • 添加一些快捷键,參考这里的最后

我也不打算讨论vim能怎样怎样提高编辑速度。这里推荐一篇stackoverflow的文章What is your most productive shortcut with Vim?

Sublime

首先我个人很推荐使用vim的编辑方式,尽管学习曲线有点不那么友好,可是一旦熟悉后,你就会明确这种付出是值得的。何况如今的IDE基本都提供了vim的插件,包含以下要介绍的sublime。

假设你对vim不熟。而且根本不打算学习vim,那么sublime是一个不错的选择。基于我是个vim控。对sublime的使用频率也笔记比較低,因此努力找了一篇还算不错的介绍sublime的文章,当然比較推荐下载sublime的vim插件。

IDE

这里要重点推荐一下Jetbrains系列的IDE工具。

首先我是个Android开发,最早的时候在Windows下使用eclipse开发,后来用Mac上的eclipse。周围的同事基本也都是eclipse开发,由于eclipse是google官方推荐的IDE,用着也没认为哪里不好。但也没少吐槽,最大的问题还是eclipse真的非常慢,并且bug不少(比方全局搜索常常会弹出一个错误对话框)。一次偶然的机会读了一篇关于赞美Intellij IDEA的文章,google后发现大家一致推荐Intellij。罗列了各种Intellij比eclipse好的地方。于是业余也開始尝试一下Intellij,后来Google官方推出Android
Studio使得Intellij IDEA成为其御用IDE,于是铁了心将项目都迁移到Intellij上。Intellij也提供了eclipse模式的快捷键配置,整个迁移过程基本没什么学习成本。

在我的推荐下,周围不少同事也開始使用Intellij。特别是刚接触Android开发的同事我都会极力推荐他们直接使用Intellij。

假设你非得让我说出有哪个功能Intellij有而eclipse没有,这的确会难倒我,由于eclipse通过插件的方式也基本都能支持到intellij也有的功能,可是你会发现Intellij非常多小点做得就是比eclipse体验更好,比方Intellij通过cmd + shift + g能够实现对xml文件里keyword的引用查找。也能够实现对文件的引用查找。比方查找某个layout在哪里被引用。这差点儿是我平时开发中用得最多的功能之中的一个。而据我所知eclipse是没有支持的。当然这样的点还有不少。还有就是再也不会像eclipse那样无缘无故的卡半天。

当然我也没有深入去比較两者的不同。这类文章网上到处都是,对我而言最直观的感受eclipse做到的是能用。而Intellij做到的是能用而且体验好,假设读者有兴趣,我在这里也推荐一篇文章

基于Intellij优秀的体验后。我開始关注Jetbrains旗下的其它IDE,比方RubyMine,WebStom。PyCharm,AppCode。全部IDE的使用体验基本和Intellij保持一个水准,在使用上也保持一致。同一时候Intellij通过插件也能够实现Ruby或者Web开发。当然这些IDE都是收费的,而且也不廉价,Intellij有社区免费版。大家在开发相关语言的时候能够考虑使用Jetbrains的IDE。我相信不会令你失望的。

这里罗列一些我常常使用的快捷键(eclipse风格):

  • cmd + shift + r:高速定位文件
  • cmd + o: 方法索引
  • cmd + shift + g: 高速查找引用。支持各种元素的引用查找
  • ctrl + h: 全局搜索
  • ctrl + f: 当前文件搜索
  • cmd + 1的应用,比方定义一个未声明的方法或者变量,cmd + 1会帮助你创建。比方使用了未import的class,cmd + 1会帮你自己主动import
  • cmd + n: 自己主动生成代码,比方自己主动生成override方法,自己主动生成构造函数

效率工具Alfred

作为检索工具,Mac自带的Spotlight功能已经十分强大了,但Alfred提供了除了检索以外很多其它的功能。官方是这么描写叙述Alfred:

Alfred saves you time when you search for files online or on your Mac. Be more productive with hotkeys, keywords and file actions at your fingertips.

我已经将Alfred作为我一切操作的入口,快捷键呼出->输入命令->打开,整个操作一气呵成,全然不须要借助touch pad或者鼠标,大大提高了工作的效率。

我一般使用Alfred主要基于下面场景:

  • 简单查找文件, cmd + num高速定位结果集中的文件,回车打开,cmd + 回车打开文件所在的目录。

  • 复杂操作文件:find定位文件,open定位并打开文件,in在文件里进行全文检索,in命令真心好用。
  • 高速启动App
  • 高速运行系统功能。比方清理废纸篓(Empty Trash),强行关闭未响应的app(fq xxx)等
  • workflow的使用,Alfred的精髓主要在这里,你能够自己定义自己的workflow,比方我想高速翻译单词hello,我仅仅要安装yd翻译的workflow后。在Alfred中输入yd hello就能够得到结果。推荐知乎上的一篇文章借助 Alfred 2 的 Workflows 功能能够做哪些好玩的事情?

最好的熟悉Alfred方式就是打开它的设置项,在设置里基本能看到Alfred全部的功能,我就是通过这样的方式熟悉的。

设计工具

平时工作常常会遇到须要画个架构图或者流程图来表达你的设计。Mac上比較推荐Omni Graffale,类似于Microsoft Visio,这款软件功能十分强大,摘了一段百度百科上的介绍:

OmniGraffle能够用来绘制图表,流程图。组织结构图以及插图,也能够用来组织头脑中思考的信息,组织头脑风暴的结果。绘制心智图,作为样式管理器,或设计网页或PDF文档的原型

OmniGraffle通过插件形式支持Stencils的扩展,Stencils是一组用于拖放的形状,眼下也有大量的第三方Stencils来满足你的各种创意和设计。

Omni Group是一家仅仅在Apple平台开发软件的公司。旗下其他几款App的体验都做得很出色。比如:

  • OmniOutliner是一款简单易用的用于搜集并组织信息的软件。一般我会用来做会议纪要。或者写大纲。
  • OmniPlan使得项目管理变得更加easy,用来写项目周报是个不错的选择。
  • OmniFocus是一款强大的GTD软件,用来管理你的任务。这东西入门不easy,我前也花了不少时间在这上面。好不easy入门了,坚持用了几个月,最后也没坚持下来。

只是以上几款App的价格有点吓人,大家量力而行。

文档撰写Markdown

写文档应该是大部分码农比較痛苦的事情,特别是纠结于排版的时候,因此基于纯文本书写的Markdown在程序猿之间開始流行开来,非常多程序猿使用Markdown来书写博客,著名的博客平台WordPress和jekyll都能非常好的支持Markdown,包含github的Readme也是兼容Markdown语法。Markdown使用易读易写的纯文本格式编写文档,然后转换成有效的HTML。

Markdown的宗旨是易读易写。使用Markdown书写的文档具有非常高的可读性。不会看起来像是由很多Tag或者命令组成的。其设计理念来自于纯文本电子邮件格式。

Markdown精选了一些符号作为语法。你花半小时基本就能学会。本文使用Markdown完毕。这里有Markdown具体的语法介绍,这篇文章写得也不错。

在Mac下比較推荐Mou。非常小巧的一个免费软件,但基本具备一个Markdown编辑器该有的功能。左边书写。右边就能够看到结果,同一时候你也能够在Mou中配置CSS来更改最后生成的HTML的效果,比方有Github风格,Solarized风格。也能够导出PDF或者HTML。这里有大量Mou的CSS主题。

这里推荐一个比較流行的博客写作平台Git+Github+Markdown+Jekyll,有兴趣的同学能够搜索对应keyword,整个搭建过程并不复杂,这里就不赘述了。

代码管理

假设你平时使用git,那我比較推荐Sourcetree。它是一款功能非常强大的gitclient,比方具备git项目的管理,能够同步github和bitbucket上托管的代码。能够图形化运行各种git命令,有着简单友好的diff功能(用来做简单的code review是个不错的选择),提供git-flow的支持,它差点儿提供了git全部功能的图形化操作,但出于效率考虑,有些简单的git操作直接在终端里完毕就可以。

使用git避免不了要选择一款优秀的diff和merge工具。在曾经我会推荐直接使用vim作为diff工具(配置~/.gitconfig就可以),只是如今Windows上非常流行的BeyondCompare公布Mac版本号了。可惜是个收费软件。有30天的免费试用期,眼下也没破解,建议入手正版,貌似也不贵。

写在最后

尽管啰嗦得讲了一大堆。但每个涉及到的点都没有讲细,这篇文章的主要目的是对那些刚接触Mac的同学能有一个比較好的引导,使他们能高速熟悉Mac有哪些工具能够提高开发效率,当然这里也仅仅是一个建议,每个工具必定都有其替代品,我推荐的仅仅是我个人的喜好和品味,大家可依据自身情况选择。

假设你眼下还没有Mac。又误打误撞读了此文,而且你是个程序猿,那么请拥抱Mac吧。

拥抱Mac之码农篇的更多相关文章

  1. 《码农周刊》干货精选(Python 篇)

    <码农周刊>已经累计发送了 38 期,我们将干货内容进行了精选.此为 Python 篇. <码农周刊>往期回顾:http://weekly.manong.io/issues/ ...

  2. 《码农周刊》干货精选--Python篇(转)

    原文:http://baoz.me/446252 码农周刊,本人有修改   Python标准库,第三方库 按功能进行了分类,之前有一Pythoner说there is a library for ev ...

  3. .net 码农转战 iOS - 初探

    好久没写博客了,之前还打算把毕业设计中涉及到的两个算法拿出来说说(脸型分析 + 声音分析),博文都写了一半了,后来实在太忙了,那篇随笔也就沉在草稿列表中没动过. 我原先是专职 .net 开发的,在公司 ...

  4. 码农,就要做有范儿的geek【网摘】

    摘要: “我是个geek,圈子里都称呼我为xx,我周一到周五亲自写写代码,指导指导新人,周末参加圈子的活动,跟别人分享一下我的经验.至于未来嘛,还没想过,反正自己技术水平在这了,呵呵,扎克伯格当年不也 ...

  5. 全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)

    注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有<全新 Mac 安装指南(通用篇)>作 ...

  6. 老码农教你在 StackOverflow 上谈笑风生

    作为一个高大上的码农,你肯定用到过 StackOverflow,必须的.会有人否定这个断言么?那他恐怕不是真正的码农,或者说还没入门.StackOverflow 对于码农的重要性,基本就和诸葛亮对刘备 ...

  7. Android码农如何一个星期转为iOS码农(不忽悠)

    WeTest 导读 作为一个android客户端开发,如果你不懂点ios开发,怎么好意思说自己是客户端开发呢,本文讲解如何让android开发码农在一个星期上手IOS开发 --<记录自己IOS开 ...

  8. 底层码农的Stanford梦 --- 从SCPD开始 [转]

    转载自知乎: https://zhuanlan.zhihu.com/p/25010074 一开始让我写这篇文章的时候,我是拒绝的.毕竟,我不是Stanford毕业的,出来写文章介绍Stanford,难 ...

  9. 一名Java架构师分享自己的从业心得,从码农到架构师我用了八年

    工作了挺久,发现有个挺有意思的现象,从程序员.高级程序员,到现在挂着架构师.专家之类的头衔,伴随着技术和能力的提高,想不明白的事情反而越来越多了. 这些疑问有些来自于跟小伙伴的交流,有些是我的自问自答 ...

随机推荐

  1. x+=y与x=x+y相同吗?

    为了将赋值操作简便化,Java提供了很多扩展赋值运算符,例如+=.-=./=.*=等等,那么问题来了,x += 1与x = x +1两者相同吗? public class EqualsTest { @ ...

  2. 【转】什么是P问题、NP问题和NPC问题

    原文链接:http://www.matrix67.com/blog/archives/105,感谢Matrix67,看完这篇文章终于把这个几个概念弄明白了!! 这或许是众多OIer最大的误区之一.   ...

  3. angular中ng-bind指令小案例

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. jQuery操作样式知识总结

    css操作 功能:设置或者修改样式,操作的是style属性. 设置单个样式 //name:需要设置的样式名称 //value:对应的样式值 css(name, value); //使用案例 $(&qu ...

  5. android黑科技系列——静态分析技术来破解Apk

    一.前言 从这篇文章开始我们开始我们的破解之路,之前的几篇文章中我们是如何讲解怎么加固我们的Apk,防止被别人破解,那么现在我们要开始破解我们的Apk,针对于之前的加密方式采用相对应的破解技术,And ...

  6. SQL Server数据库备份的几个建议

    1.定期进行数据备份(完备或差异备份)和日志备份. 2.使用压缩备份来减少磁盘空间占用和提高备份效率. 3.定期检查磁盘剩余空间和备份文件增长情况,以确保有足够空间进行下一次备份. 4.使用校验和(C ...

  7. Oracle PL/SQL开发基础(第三十四弹:RAISE_APPLICATION_ERROR)

    RAISE_APPLICATION_ERROR在子程序内部使用时,能从存储子程序中抛出自定义的错误消息.这样就能将错误报告给应用程序而避免范围未捕获异常. 语法如下: RAISE_APPLICATIO ...

  8. javascript中函数表达式的问题讨论

    #函数表达式 ##函数声明和函数表达式的区别 函数的定义有两种形式,一种是函数声明,一种是函数表达式 使用声明时,要注意函数声明提升现象,比如说在if语句中使用声明会出错,但是表达式就不存在这个问题 ...

  9. Jquery插件:提示框

    在实际项目中,很容易有这种需求:当某个操作成功或失败,需要给用户一个提示.当然最简单的做法是调用alert()方法弹窗.但alert()属于JavaScript中BOM部分,每个浏览器的样式不太一样, ...

  10. python中if语句的使用

    1.对体重标准的判断 #coding:utf-8 height=170weight=65#weight=height-105if weight<height-105: print '您偏瘦!注意 ...