emacs最简单入门,只要10分钟
macs最简单入门,只要
10
分钟
windwiny
@2013
无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到
10
分钟就退出删除了。
这次硬着头皮,打开几篇文章都看完一遍,再动手操作。这次好像有些进展
最大的发现,emacs里所有操作都是
LISP
指令,包括上下左右移动光标,这意味着什么? “emacs是一个伪装成编辑器的操作系统”这句话应该就是这么理解吧,所有的操作都是指令,emacs就像操作系统一样,平时不用关注,实际上打交道的都是操作系统上运行的各种程序。emacs也是这样,执行
LISP
函数就行了,增加各种插件就是增加
LISP
的函数让你调用而已,各人的配置就是把各种指令绑定快捷键,方便自己使用。emacs的插件功能有执行shell命令,telnet,ftp,文件管理器,收邮件,浏览网页,煮咖啡,擦皮鞋,等等。前段时间又受到黑客与画家书的鼓吹,买了本
CLISP
的书看,对emacs用的
LISP
也是越看越顺眼了。
忘掉网上其它的那些教程、手册吧,也忘掉emacs有几百种几千种命令吧。
emacs最简单入门:只要记住一个按键就行了:
M
-x . 按住Alt键再按x,在窗口最底下出现
M
-x的提示,在这里输入left-几个字符,按Tab键,出现两行提示 left-char, left-word,再输入一个c,再按Tab键,这时自动补全为left-char,按回车,如果有内容的话,当前的光标点向左移动,就像按了一个向左的方向键一样。 就这样?就这样!
就这样,发挥你的想象力,想象你现在需要做什么,把它翻译成英文单词,按
M
-x,先输入几个字母,按Tab,看是否存在你想象中的指令。要取消当前操作的指令,多按几次
ESC
键或Ctrl-g键就取消了。
现在假设下emacs有
100
条指令吧,你如果想做什么事都去执行指令的话,虽然也可以,但是总比不上为常用的指令设置一个快捷键方便。现在看下默认的各种快捷键:
先来看几个简单的 forward-char backward-char previous-line
next
-line , 很直白的命令,向前后移一个字符或向上下移一行,对应
4
个方向键。默认绑定的快捷键就是Ctrl加指令首字母
C
-f/b/p/n。简洁直白合理极致吧。 复制一些内容到窗口上去,多按几次按键,多按几次手指上的肌肉就不会忘记了。就像用了十多年的五笔输入法一样,看着键盘时一个字也打不也来了,字根键码早忘光了。只有两只手都放在键盘上时,看着汉字,手指自然就打出来了。
再看下 forward-word backward-word ,向前后一个单词,默认绑定快捷键为Alt加指令首字母
M
-f/b。也很合理吧。
如果要快速移动到当前行首行尾,或者是一句话的首尾部呢? move-beginning-of-line move-
end
-of-line backward-sentence forward-sentence ,默认绑定的快捷键是
C
-a/e
M
-a/e,好像也还算合理吧。
好了,只要理解了emacs里做任何操作都是执行
LISP
函数,就算是入门了。emacs被称为复杂难学是因为默认设置了很多快捷键,不容易一下记住。现在只要记住用
M
-x来执行命令,快捷键一律忽视,等熟悉了
LISP
指令及对应的功能,想为它设置一个快捷键时,再看看默认设置的快捷键是否合你的胃口,改或不改你决定。
对emacs感兴趣或者不感兴趣现在就可以决定了。什么学emacs需要很强的耐心那些都是胡扯,我敢打赌只要有好奇心的人就会继续往下看。
现在可以打开帮助菜单下的教程,跟着操作一遍,学习一些最常用的快捷键了。多动手,肌肉记忆比大脑记忆好用。
----入门教程结束----
想象一下你使用其它编辑器时使用到的各种功能快捷键,把它和emacs默认设置的快捷键比较一下,哪种设置比较合理。
emacs里的各种快捷键设置都是无害的,意思就是你改掉一个快捷键对应的功能,命令却还在,永远可以用
M
-x来直接执行。如果是其它编辑器就比较麻烦,可能这个操作的功能就找不回来了。
一些默认快捷键
C
-代表按住Ctrl键
M
-代表按住Alt键,也可以用按一下
ESC
放开代替
最先要记住的
M
-x <
CMD
> 输入指令执行,在输入时用Tab可以自动补全或列出项目
C
-g 取消当前操作指令
C
-h k <
KEY
> 查看当前按键绑定的指令及介绍
移动插入点(光标)
C
-n/p/b/f 到 下一行、上一行、前一字符、后一字符
M
-b/f 到 前、后一单词
C
-a/e 到 行首、末
M
-a/e 到 句首、末
M
-</> 到 文件首、末
C
-v/
M
-v 下、上翻屏
C
-l 循环 将当前光标行显示在窗口下、中、上位置
C
-u <
NUM
> <
XX
> 重复执行之后的 xx 命令 num 次,不输入num默认为
4
C
-u
C
-v 向下滚动
4
行
编辑
Back/
C
-d 删除 前、后字符
M
-Back/
M
-d 移除 前、后单词
C
-k/
M
-k 移除到 行末、句末
C
-/ undo/
redo
C
-x u undo/
redo
C
-w 剪切
C
-y 召回(粘贴)(粘贴移除的、复制、剪切的内容)
C
-c 复制(emacs一般也默认定制了与
OS
的剪切复制粘贴相同的快捷键)
查找
C
-s
C
-s 查找下一个
C
-r 查找上一下
C
-g 一次返回,二次结束查找
回车 停止到当前查找到的内容
替换
M
-%
标记
M
-@
文件操作
C
-x
C
-c 退出emacs
C
-x
C
-f 打开文件
C
-x
C
-s 保存文件
C
-x
C
-v 在当前缓冲区重新打开一个文件,可以用于清除undo历史!!
C
-x
1
最大化当前缓冲,关闭其它
C
-x
2
/
3
垂直、水平创建新缓冲区
C
-x o 切换到其它缓冲区
C
-x
C
-b 列出缓冲区
C
-x b 提示输入缓冲区名称,切换当前窗口的缓冲区
C
-x k 删除当前缓冲区
C
-j 换行回车,有些模式下比较直接回车好用,有增加缩进之类的功能
------
理解一些概念
buffer
缓冲区,内存中的数据,打开文件时读入内容到内存,修改后保存才会修改到磁盘上的文件。
window
窗口,缓冲区的一个展示区域
frame
OS
上的一个emacs程序窗口
mode 模式
mode有主模式,辅助模式,主模式就像vim中设置当前filetype一样,当前编辑的是ruby或者python源代码,根据不同文件类型,设置按Tab缩进时缩进不同的字符数,把不同的词当作关键字时行语法高亮等等,同一时间只能选一个主模式。试着多开几个窗口,执行text-mode ruby-mode python-mode试下。emacs打开文件时会自动根据文件扩展名或内容检查并设置主模式。
辅助模式就是窗口是否要自动换行,是否显示行号等,辅助模式可以多个同时启用。
undo
在
EMACS
中想要将已经做过的动作放弃,以恢复原状。
EMACS
所提供的 undo,可以连续恢复最近使用过的指令。
undo 的顺序是最新使用过的指令最先被 undo ,第二次使用 undo 则恢复第二新的指令,任何指令的输入(除了 undo 本身之外) 都会使指令输入的顺序重整, 这也同时影响 undo 的顺序。
使用 undo 有一个限制,就是 undo 只能 undo 对缓冲区内容造成改变的指令。对于只是改变游标动作的指令,是无法以 undo 来恢复旧观。若所有修改过内容的指令,都以 undo 恢复原状后, 再一次使用 undo 的指令,echo area 会出现如下的讯息:No further undo information.
当使用了 undo 之后,还想要在
redo
这个已被 undo 的动作时, 有一个技巧可以达成如此的效果。
1
.首先键入一个不会改变缓冲区内容的指令(如光标移动的指令),使原来
2
.存放指令的顺序因新指令的加入而改变。
3
.再使用一次 undo 的指令,就可以达到
redo
的效果了。
undo的行为很难描述,示例:
新建一个文件
执行几个修改内容的指令 <
1
回车
2
回车
3
回车>, 这时undo历史里有
6
条记录
undo顺序为
654321
, 继续undo则提示No further undo information
按下左右方向键(虽然移不动光标),这时undo历史里有
12
条记录了,前
6
条undo就变成
redo
了,顺序
123456654321
再按下方向键,undo历史记录数量再翻倍
emacs的undo不会丢失任何操作,你先做一些操作,undo,再做另一些操作,如果是其它编辑器,第一次undo的动作就失踪了,emacs里却一直存在着,原因同上。多试几次就明白了。
----完----
才用了两天emacs,学会的东西就上面这些了,不过现在却有很兴奋的感觉,记了这篇笔记。并且有很强烈的感觉,感觉以后都离不开emacs了,被emacs控制了~~
emacs最简单入门,只要10分钟的更多相关文章
- 【Istio实际操作篇】Istio入门,10分钟快速安装
@ 目录 前言 本文说明 请大家务必查看 环境准备 详细版 入门:搭建步骤 Istio软件包下载 下载Istio 卸载 简洁版 安装 卸载 学习不走弯路,gz号「yeTechLog」 前言 上一篇讲了 ...
- 简单操作:10分钟实现在kubernetes(k8s)里面部署服务器集群并访问项目(docker三)
前言 经过docker安装.k8s开启并登录,我们终于到 "部署k8s服务器集群并访问项目" 这一步了,实现的过程中有太多坑,好在都填平了,普天同庆. 在进行当前课题之前,我们需要 ...
- 【Fungus入门】10分钟快速构建Unity中的万能对话系统 / 叙事系统 / 剧情系统
我真的很久没有写过一个完整的攻略了(笑),咸鱼了很久之后还是想来写一个好玩的.这次主要是梳理一下Unity的小众插件Fungus的核心功能,并且快速掌握其使用方法. 官方文档:http://fungu ...
- 微信小程序开发入门:10分钟从0开始写一个hello-world
小程序开发需要三个描述整体程序的app文件 和 一个描述多个页面的 pages文件夹. (1)三个app文件分别是app.js,app.json,app.wxss. app.js文件是脚本文件处理一些 ...
- Apache Shiro系列三,概述 —— 10分钟入门
一.介绍 看完这个10分钟入门之后,你就知道如何在你的应用程序中引入和使用Shiro.以后你再在自己的应用程序中使用Shiro,也应该可以在10分钟内搞定. 二.概述 关于Shiro的废话就不多说了 ...
- JavaScript 10分钟入门
JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...
- 不用搭环境的10分钟AngularJS指令简易入门01(含例子)
不用搭环境的10分钟AngularJS指令简易入门01(含例子) `#不用搭环境系列AngularJS教程01,前端新手也可以轻松入坑~阅读本文大概需要10分钟~` AngularJS的指令是一大特色 ...
- kafka原理和实践(一)原理:10分钟入门
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...
- activiti 用户手册中 10分钟 小例子 简单代码搭建 及 其中的 各种坑
看mossle的 5.16 用户手册中的 快速起步:10分钟教程 想自己跑一下,虽然官方文档已经写的非常详细了,但是实际操作中还是遇到各种坑,这里记录下来. 首先官网下载最新的 5版本 full G ...
随机推荐
- C#分割字符串
命名空间:System.String.Split 程序集:mscorlib( mscorlib.dll) 简单实例: string before = "12,50,30"; str ...
- mysql 安装失败解决方法
在安装mysql的过程中,出现的最麻烦的问题和解决方法 安装后,启动不成功,就卡了,程序就没有响应. 如何解决: 找到mysql安装目录下的 #Path to the database root da ...
- asp.net mvc输出自定义404等错误页面,非302跳转。
朋友问到一个问题,如何输出自定义错误页面,不使用302跳转.当前页面地址不能改变. 还要执行一些代码等,生成一些错误信息,方便用户提交反馈. 500错误,mvc框架已经有现成解决方法: filters ...
- 在 ASP.NET 中执行 URL 重写的方法
由于需要我们经常会想将动态的页面做成伪静态的,或者在get传值的时候使其简洁明了(实现“可删节”的URL),这时我们需要用到URL重写,微软的MSDN上有详细的原理和使用介绍.我这里就将一种简单的使用 ...
- Linux_RPM_查询
一.查询是否安装 rpm -q 包名 选项: -q 查询(query) 查询所有已安装的RPM包 rpm -qa -a 所有(all) 二.插叙软件包的详细信息 rpm -qi ...
- C#-WinForm-打印控件
打印控件 绘制如下窗体 一.PrintDocument -打印的基础 首先放置PrintDocument控件,双击事件PrintPage设置要打印的样式(李献策lxc) //第一步 设置打印属性 p ...
- HashMap和TreeMap的区别
HashMap:数组方式存储key/value,线程非安全,允许null作为key和value,key不可以 重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算 ...
- 【USACO 1.3】Barn Repair
贪心,去掉最大的min(m,c)-1个间隔 /******************************************* TASK: barn1 LANG: C++ Created Tim ...
- Node.js的net模块
net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法 创建TCP服务器 net.createServer方法 创建客户端去连接服务器 net.connect方法 简 ...
- 负载均衡下的资源文件配置/多站点下的资源文件夹共享(Windows IIS)
前言: 负载均衡用的是NLB,微软的方案不太靠谱,举个例子吧,AB两台服务器负载出C,如果用户访问访问C之后分配的是A,那么如果A挂了,是不会自动切换到B的.据说后来还有一种NLB的方案可以实现,也不 ...