如何打造一个高效的工作环境(二)
嗨,大家好,我是这个公众号的另一个小编——*ray,这是我在酷壳公众号上发的第二篇文章,感谢皓哥的改稿和内容补充以及多位同学的 Review。
在上一篇文章中,我们聊了一下关于命令行和 shell ,在这篇文章中,我们来聊一下剩下的两个部分,编辑器和版本管理。编辑器是一个稍敏感的话题,这里无意引起争论,欢迎交流观点。
编辑器篇
对于程序员来说,日常与编辑器打交道的时间非常长。编辑器是值得我们投入大量时间去学习并且定制来满足我们的需要。
如何选择合适的编辑器呢?编辑器有很多,有的值得投资时间去学习,有的基本就不用花时间去学。应当去学习那些能够提升生产力,有很强的生命力,并且能够适应各类环境的编辑器。
Vim 和 Emacs 就是非常值得投资的编辑器,如果你决定开始学习 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 中的用来做文件管理的插件 helm 和 ivy,这两个插件完成的功能差不多,但是 helm 比较重量级一些,如果一个项目的代码量比较大时,文件的切换和搜索就没那么快了,所以我更喜欢轻量级的 ivy。
还有两个我最喜欢的插件,evil 和 magit,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 -p
和git 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
- 如何配置一个高效的 Mac 工作环境
- 如何配置一个高效的 Mac 工作环境
- 如何配置一个高效的 Mac 工作环境
- 强迫症的 Mac 设置指南,如何配置一个高效的 Mac 工作环境
- 收藏-如何配置一个高效的 Mac 工作环境
- Python web框架Django学习(1)——在win7 64bit下配置开发环境Django:一个可以使Web开发工作愉快并且高效的Web开发框架。 使用Django,使你能够以最小的代价构建和
- 打造高效前端工作环境-tmuxinator
- 一个工程师该如何高效工作
- 领导者如何打造一个高效团队
- 高效工程师系列(一) 如何找到一个利于自己成长的环境
- 如何给自己创造一个快乐的工作环境
- 打造高效的工作环境
- 打造高效前端工作环境-tmuxinator
- 打造高效前端工作环境_-_tmux
- 如何打造一个高效的测试团队
- 打造高效前端工作环境 - tmux
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 如何建立一个 XML 的开发环境
- 打造一个无干扰的写作环境
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的