您的位置:首页 > 其它

如何打造一个高效的工作环境(二)

2019-03-14 23:38 429 查看

嗨,大家好,我是这个公众号的另一个小编——*ray,这是我在酷壳公众号上发的第二篇文章,感谢皓哥的改稿和内容补充以及多位同学的 Review。

上一篇文章中,我们聊了一下关于命令行和 shell ,在这篇文章中,我们来聊一下剩下的两个部分,编辑器和版本管理。编辑器是一个稍敏感的话题,这里无意引起争论,欢迎交流观点。


编辑器篇

对于程序员来说,日常与编辑器打交道的时间非常长。编辑器是值得我们投入大量时间去学习并且定制来满足我们的需要。

如何选择合适的编辑器呢?编辑器有很多,有的值得投资时间去学习,有的基本就不用花时间去学。应当去学习那些能够提升生产力,有很强的生命力,并且能够适应各类环境的编辑器。

VimEmacs 就是非常值得投资的编辑器,如果你决定开始学习 Vim/Emacs,刚开始的时候会感觉高很痛苦,甚至会伤害到自己的生产力,但是没关系,通过两三周的专注练习后,就可以通过学习编辑器的死亡之谷,很快就可以赚回票价了。

使用 Vim/Emacs 的另一个重要好处是,当你在处理一些线上问题的时候,有时候需要一个 IDE,你发现在一个终端上是运行不了图形界面的编辑器了,你只有 Vim/Emacs 这样的选择。在 Coolshell 上有一篇《无插件Vim 编程技巧》(https://coolshell.cn/articles/11312.html)你可以移步一看。

为什么不学习 Notepad,因为,使用高效编辑器的终极目标是抛弃鼠标,让手编辑的速度可以跟的上大脑思考的速度。就我自己来说,从大二开始接触 Emacs 开始,已经使用 5 年了,通过不断的对 Emacs 进行定制,已经有了一套自己的使用模式了,每次打开 Emacs 就像是打开了自己才知道的秘籍,这是其他 IDE 都没有办法比的,通过不断定制自己的工具,可以激发自己创造的欲望。

但是我不参加编辑器的圣战,这些都是无意义的口水战。在一次接触了 Vim 之后,我反而喜欢上 Vim 的编辑模式了,于是在 Emacs 中使用上了 Vim 的编辑模式,实际的情况是这两者并不冲突(皓哥翻译的那篇 《简明 Vim 练级攻略》(https://coolshell.cn/articles/5426.html)文章非常不错)。

在 Emacs 上,有很多有用的特性和插件。 Emacs 的 org-mode,这个工具用来写作,还可用来做任务管理,任务计时器,甚至可以用来做表格的计算。功能上已经完全不是 markdown 能比的,但是遗憾的是目前只能在 Emacs 中使用(貌似有人在 Vim 上实现过)。

还有就是 Emacs 中的用来做文件管理的插件 helmivy,这两个插件完成的功能差不多,但是 helm 比较重量级一些,如果一个项目的代码量比较大时,文件的切换和搜索就没那么快了,所以我更喜欢轻量级的 ivy。

还有两个我最喜欢的插件,evilmagit,evil 可以让 Emacs 变身成为一个 Vim,大多数的 Vim 操作都可以覆盖上。magit 是一个可以使 Emacs 变身成为 Git 的插件。当然其他的各种语言的支持插件就是常规操作了,不多说。

下面推荐一些 Emacs 和 Vim 的学习资源:

Emacs

  • 一年成为 Emacs 高手,当年我也是靠着这一篇文章真正入门 emacs,

    https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/guide-zh.org

  • 陈斌 (一年成为 Emacs 高手的作者)的 Emacs 配置,是一个很不错的配置,我现在使用的配置要就是从这个演化来的 https://github.com/redguardtoo/emacs.d

  • Steve Purcell 大牛的配置,很适合 Web 开发者:https://github.com/purcell/emacs.d

  • Spacemacs 配置,适合新手,有着非常完善的文档:https://github.com/syl20bnr/spacemacs

  • reddit 的 Emacs 频道,最前沿的 Emacs 技巧:https://www.reddit.com/r/emacs/

  • Emacs org-mode 的文档,从这个文档中你可以发现纯文本的魔力:https://orgmode.org/

  • Emacs Wiki,上面有大量的 Emacs 插件的实践,虽然质量参差不齐,但是也有很多优秀的插件 https://www.emacswiki.org/emacs/EmacsWiki

Vim

  • Doist 创业公司 CEO amix 的 Vim 配置,被称之为最强 vimrc:https://github.com/amix

  • junegunn 是韩国的一个大牛,擅长写 Vim 插件,他的 Vim 插件看起来总是令人赏心悦目:https://github.com/junegunn/vim-plug

  • SpaceVim,一个开箱即用的 Vim 配置,对新手很友好,和 Spacemacs 一样,有着很完善的文档:https://github.com/SpaceVim/SpaceVim

  • reddit 的 Vim 频道,有很多最前沿的 Vim 技巧:https://www.reddit.com/r/vim/


版本管理篇


版本管理的工具对我来说已经不仅仅不是管理代码的工具了。任何需要不断优化,不断修改的内容都需要进行版本管理。

版本管理的工具很多。现在还有好些人还不喜欢 Git 还在用 svn,那是因为他们并不知道 Git 的强大之处,这种脱机的版本管理可以让你在没有网的情况下提效代码变更,再加上 Git 切换 branch 快得不行,merge branch 时会把 branch 的改动情况一同 merge 了,这样可以让你看到整个历史。再有 stash,cherry-pick 等等这样的黑魔法加持,你的工作效率真的很爽的。如今最好用的应该就是 Git 了,在加上最近 GitHub 私有仓库的开放,让这一优势继续扩大。

Git 这么好用的原因来源于其底层数据结构的设计,非常的有意思,如果你接触过区块链,你会发现 Git 底层的数据结构与区块链的数据结构有异曲同工之处。

Git 除了可以完成通常的版本管理之外,它还拥有一些很神奇的技能:

  • 帮你找 bug 的命令: git bisect,通过二分搜索的方式来帮助你定位到引入 bug 的 commit。

  • 可以帮助你洞察一切的 git blame 可以给你文件的每行信息都进行注释,然后就可以看到关于该行修改的每一次 commit 的哈希标签、作者和提交日期。

  • 可以帮你恢复一切的 git reflog,通常我们 git reset 命令都是慎用的,要不然就坏事了,但是 git relog 在你将变化提交之前,可以帮助你回到任何修改之前,包括 git reset。但是 reflog 只是保存在本地,而且不是永久保存,有一个可以配置的过期时间。

除此之外,还有一些 Git 的小技巧:

  • 如果你当前修改的文档在你本地的master上,然后你想把这个修改迁移到一个branch上,这样方便你做PR,如果这些修改还没有被add,那么你可以使用 git checkout -b new_branch_name 来完成。

  • 如果你commit后,还没有push,你想修改一下这前的commit,你可以使用 git commit --amend

  • 使用 git pull --rebase 可以避免出现一个 merge buble。

  • 如果你要删除远程分支,可以使用 git push origin --delete <remote-branchname>

  • 使用 git add -p 可以让你挑选修改,这样你可以把你的一次大改动变成多个提交。

  • git checkout -pgit add -p 类似,如果让你挑选你想checkout的修改。

  • 你知道你可以使用时间在你的git命令行上吗?比如:git diff HEAD@{'2 months ago'}git diff HEAD@{yesterday}git diff HEAD@{'2010-01-01 12:00:00'}

有时候,设置一下 Git 的别名也是可以让你更高效工作的一件事,比如:

使用如下的 git lg 别名

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --"

就可以把原来的 git log 的输出

变成下面这个样子


除此之外,Git 还有好些比较有用的别名,下面这几个收集库,可以让你更高效更赏心悦目地使用 Git

  • https://github.com/momeni/gittify

  • https://github.com/GitAlias/gitalias

  • https://gist.github.com/mwhite/6887990

Git 有多种用法,可以使用原生的 Git 命令行,原生的 Git 命令加上 shell 脚本的包装就可以做到很高效了。 Git 也有图形化的界面,比如 Git 安装包自带的 gitk 或者 TortoiseGit,因为比起命令行来太慢了。还有就是 magit,这是 Emacs 的一个插件,这个插件将所有 Git 的操作都融入到 Emacs 中了,只需要使用使用快捷键就能够完成 Git 的所有操作,但是同时又带有一点图形化的感觉,这么说有点苍白无力,看图:

我现在日常会使用 Git 来进行代码管理、博客文章的管理和自己的知识库的管理。这些内容使用版本管理起来的好处是可以看见自己的成长过程,每一次修改的内容,每一个想法的进化。

下面推荐一下 Git 的学习资料:

  • Progit2,最好的深入学习 Git 的教材,而且是开源的https://github.com/progit/progit2

  • Magit,Git 在 Emacs 上的打开方式:https://magit.vc/

  • Vim-fugitive,Git 在 Vim 上的打开方式:https://github.com/tpope/vim-fugitive

  • Git 相关的 shell 提示: https://github.com/magicmonty/bash-git-prompt

Happy hacking!

(完)


本人喜欢折腾,大学期间曾创业三年,明白自己的不足后目前专心搬砖,在等待下一次机会,本人长期可撩。


Blog: http://www.rayjun.cn/

Email: rayjun0412@gmail.com

Github: https://github.com/rayjun

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: