Emacs作为DevOps编辑器
Table of Contents
1 Preface
使用Vi的滋味就好像情人身处在热恋中,情难自控;而使用Emacs的感觉犹如恋人走向婚姻, 相守与共。而世间都有太多的东西要经历了,这也是我不向所有人推荐它们的原因之一,因为 不是谁都能矢志不渝的。–devopsanywhere
2 Introduction
首先,让我们来回答一个问题:谁是DevOps?他 (她)在完成什么样的工作呢?在回答这个 问题之前,我们需要先了解DevOps整个工作流的实现细节
- 标准的系统管理员工作:登陆到远程服务器,管理各种文件和目录,编辑配置文件,重 启服务,查看日志等等
- 软件开发工作:所有的 DevOps工作都是需要编写各种语言和格式的脚本的:例如 Bash,Python,Go,Ansible,Salt,Puppet,JSON,YAML,等等。这些脚本都是要保存在像git 或者 Mercurial这样的分布式版本控制系统下的项目的
- 管理工作:因为 DevOps的工作很像团队管理,只不过现在是通过代码来管理而已。它 通常也需要编写关于现有流程,或者项目架构,抑或是新产品的文档,或者是需要修改文档,
现在就看看怎么用Emacs实现上面的工作要求吧
3 Step By Step Emacs introduction to DevOps activities
3.1 Shell脚本
shell脚本编写占系统管理员或者 DevOps工作很大的一部分。Emacs默认支持很多种 shell的语法,你无需安装任何额外的模块。Emacs为 shell脚本编写提供以下特性:
- 支持 shell脚本的语法和模板 (可以通过查看顶部菜单的 "Sh-Script" 来了解所有 的操作)
- 可以在Emacs里面运行脚本
- 脚本调试
下面是关于脚本编写的简短介绍的视频(需翻墙) Emacs shell scripting mode
3.2 支持多种的脚本和语言
Emacs有成百上千个不同的模块可用于不同的语言。你可以通过运行 M-x package-list-package 来安装它们。 接下来的视频展示了Emacs如何支持 DevOps的工作 (需翻墙) RECOMMENDED PACKAGES
3.2.1 推荐的包
- yaml-mode
3.3 关于文件的日常工作
在Emacs里面跟list打交道是很容易的,因为在Emacs里面,无论 文件,缓冲区,函数或者其它东西 都是 list;而且Lisp一直都很擅长处理 list 向你们推荐下面的扩展包
结合上面的扩展包,你可以在
- 项目
- 目录 更快地打开文件。你在 Midnight Commander的所有操作你都可以在Emacs里面完成: 查找文件,搜索文本,在多个文件中替换,在目录之间移动或者复制,等等。 Emacs and files management
3.3.1 按键绑定
Action | Key | Function |
Open file | C-x C-f | find-file |
Close file | C-x k | kill-buffer |
Open file (helm) | * C-z C-f | helm-find-files |
Open file from current project (helm-projectile) | * C-c h p | helm-projectile |
Show Ztree | * C-x z | ztree-dir |
Dired (file manager) | C-x d | dired |
Dired (jump to current file) | C-x j | dired-jump |
Buffers list | C-x C-b | list-buffers |
iBuffer | * F9 | ibuffer |
所有以 * 开头的按键都是自定义快捷键
3.4 操作远程文件
- 有时在服务器端的文本编辑器可能连语法高亮或者支持不同模式等简单的功能都无法 提供,即使你已经在服务器安装了基本的Emacs,但是你仍需要配置某些东西,所以你 更原意选择使用本地的编辑器编辑远程的文件,特别是有很多编辑操作需要在不同的 缓冲区切换的时候
- 它可以变得更快,特别是当你从书签打开你的远程文件的时候
- 有时,在Docker容器里面编辑文件的时候,你是没有称心的终端模拟器的 Emacs tramp intro (需翻墙)
3.4.1 在不同服务器或者角色间切换
你可以在服务器打开文本之后然后使用 sudo 以root角色编辑文件。例如,你想在 服务器 smith16 上以 root 的角色编辑文件,你可以这样:
C-x C-f /ssh:smith16|sudo:root@smith16:/etc/
3.5 Literate DevOps
Literate DevOps 这篇文章介绍了任何无缝地把系统管理工作和文档工作结合起来;按照它的指导 DevOps就可以一步一步地编写出优秀的文档 Introduction to Literate DevOps with Emacs 如果想了解更多的信息,你可以查看这篇文章Literate DevOps with Emacs
3.6 活动管理:文档,记录,日程
Emacs的Org-mode众所周知的文档管理的利器;你使用Org-mode编写org格式文档的 好处是你可以在编写完成后,导出成你喜欢的任何格式,例如Markdown,PDF, jira/Confluence/Redmine等 Emacs的org-mode还可以连接到例如 Redmine或者 Trello这样的日程记录工具,并 根据现在的日期为你展示最新的日程表 Agenda.它还可以包括一些额外的信息,例如 重复性的活动或者是截止日期
3.7 在软件开发中共享会话
使用基于文本的编辑器可以充分利用结对编程的优势-例如在某些情况下你可以通过 tmux 或者 tmate 分享你的屏幕,这样不同的开发人员就可以在同一份代码下开发
3.8 那些强大的编辑功能
Emacs的文本编辑功能非常强,不信?看看下面这个例子吧: Emacs Rocks!Episode 13:multiple-cursors (需翻墙)
3.9 集成分布式版本管理系统
DVCS-Distributed Version Control System分布式版本管理系统,例如 git 或者 Mercurial 在Emacs里面使用它们可以让你的生活变得容易,因为再也不用记住那些神秘的命令行。你也可以 更容易地浏览历史,分支,修改和其他信息 Emacs as code browser (需翻墙) 视频推荐: Emacs Tutorial-Introduction to magit
3.10 非常有用的Emacs包
- which-key展示可用的按键组合
- flycheck - 语法检查
- markdown-mode
- magit
- ahg
- ace-jump-mode
- crontab-mode
- bm书签管理器
- helm
- helm-ag
- php-mode
- elpy,jedi -Python开发
3.11 很赞的主题
- cyberpunk
- leuven
- base 16
- syscolors
- avk-emacs-theme我的主题
- tdsh
- subatomic 更多的主题请查看https://emacsthemes.com/
3.12 很赞的字体
- Input Mono
- Source Code Pro
- DejaVu Sans Mono
- Ubuntu Mono
- Monaco
- BP Mono
- Terminus
- Consolas 更多的信息的,可以查看https://www.slant.co/topics/67/~programming-fonts http://omarrr.com/top-7-open-source-monospace-fonts-for-developers/