Emacs入坑之旅——常用基本操作

推荐:一年成为Emacs高手(像神一样使用编辑器)
参考:Master Emacs in 21 Days

这些年也用过不少的编辑器、IDE,在使用各个编辑器的时候也多多少少鼓捣过各个编辑器的插件、扩展,比如Eclipse插件、Notepad++插件、Sublime插件等,对于"插件、扩展"这种能够延伸编辑器手和脚的方式很是兴趣盎然,而且用自己写出的插件可以极大地提高生产力,从而带来一种莫名的满足感。

于是Emacs以其强大的扩展性吸引了我,开始入坑Emacs,Emacs还是自由软件之父理查德·斯托曼大师的作品,其质量肯定是有保障的。本文主要总结一下最常用的Emacs操作,至于Emacs有多厉害、如何安装、如何......,网上的资料铺天盖地(比如开篇推荐的那篇文章),不在本文的讨论范围之内。

按键约定

组合按键

Emacs中大量的按键操作都是各式各样的组合按键(快捷键),下面是几种通常的约定:

  • Ctrl键:表示为C
  • Alt键:表示为M
  • Shift键:表示为S
  • 组合按键:比如向下移动一行的组合按键是Ctrl+n,就表示为:C-n,其含义表示同时按下键盘上的Ctrln键。

按键顺序

有时候用多个组合按键来表示一种操作,比如以下按键序列:C-x C-f [文件路径] <RET>就表示打开文件的操作,它表示这样的操作含义:先同时按下Ctrlx键,然后松开,紧接着马上再同时按下Ctrlf键,然后再松开,然后在下方的输入栏中输入文件路径,输入完之后按回车键(用<RET>表示),最后就打开了一个文件。

还有一种按键顺序:C-x o,表示切换到另外一个缓冲区,它是这样一组按键:先同时按下Ctrlx键,然后松开,然后紧接着按字母o键。

还有另外一种按键顺序,比如以下按键序列:C-u [10] C-p,就表示这样的操作含义:先同时按下Ctrlu键,然后松开,然后依次按10键,然后松开,最后再同时按Ctrlp键。这组按键达到的效果就是把光标从当前位置往上移动10行。

特殊按键

  • 表示输入内容,用方括号括起来:[输入的内容]
  • 表示回车键:<RET>
  • 表示其他键:比如<Backspace>表示退格键(删除键),<Delete>表示删除键,<TAB>表示TAB键,<Left>表示左箭头键,<Right>表示右箭头键,<Up>表示上箭头键,<Down>表示下箭头键,<f5>表示F5键。

Quick Start

文本操作,无外乎打开文件、编辑文件、保存文件,涉及的核心、最高频命令非常简单,整理如下:

  • C-x C-f [文件路径] <RET>:打开一个文件
  • C-n:将光标向下移动一行
  • C-p:将光标向上移动一行
  • C-g:取消之前的按键(将会成为最常用的按键之一)
  • C-x C-s:保存文件
  • C-x C-c:退出Emacs

常用操作分类汇总

文件操作

  • C-x C-f [文件路径] <RET>:打开一个文件
  • C-x C-s:保存文件
  • C-x 4 f [文件路径] <RET>:在一个新的窗格(缓冲区)中打开文件
  • C-x 5 f [文件路径] <RET>:在一个新的窗口中打开文件

移动操作

  • C-n:将光标向下移动一行
  • C-p:将光标向上移动一行
  • C-b:将光标左移一个字符
  • C-f:将光标右移一个字符
  • M-f:将光标右移一个单词
  • M-b:将光标左移一个单词
  • C-v:向下移动一屏
  • M-v:向上移动一屏
  • C-l:将当前光标所在行移动到屏幕中央(注意:这里是字母L
  • C-a:将光标移到行首
  • C-e:将光标移到行尾
  • M-S-<:将光标移动到文件开头
  • M-S->:将光标移动到文件末尾
  • M-m:将光标移动到行首的第一个非空白字符

查找与替换操作

  • C-s [查找的内容]:向前查找
  • C-r [查找的内容]:向后查找
  • C-M-s [查找的内容]:向前正则查找
  • C-M-r [查找的内容]:向后正则查找
  • M-S-%:查找并替换,操作步骤如下:按下M-S-%键启动查找替换,输入要被替换的词,回车,然后输入要替换的词,再回车。被替换的词此时会高亮起来,这时,输入y替换并跳到下一个,输入n忽略并跳到下一个,输入q结束,输入!替换剩下的全部。

文本选择操作

  • C-S-e:选中从当前位置到行尾的文本
  • C-S-n:从当前位置开始往下选中一行文本
  • C-S-p:从当前位置开始往上选中一行文本
  • C-S-f:从当前位置开始往后选中一个字符
  • C-S-b:从当前位置开始往前选中一个字符
  • M-S-f:从当前位置开始往后选中一个单词
  • M-S-b:从当前位置开始往前选中一个单词
  • M-S-e:选中从当前位置开始到当前句尾的文本
  • M-S-a:选中从当前位置开始到当前句首的文本
  • C-S-@ [其他移动操作]:从一个起始位置,选中连续的字符,比如C-S-@ C-e就表示选中从当前光标位置到行尾的所有字符
  • C-S-v:向下选择一屏
  • M-S-v:向上选择一屏
  • C-S-l:让当前光标所在行居中
  • C-x h:全选

文本编辑操作

  • 插入文本:只要光标在当前缓冲区,就可以直接输入插入文本。
  • C-k:删除光标到行尾的所有字符
  • C-u [N] [操作序列]:重复执行一个操作序列N次
  • C-/C-x u:撤销(undo)上次操作,多次按可以撤销之前的多次操作
  • C-g C-/:重做(redo),用于重做上次的撤销动作(撤销之后后悔了,想恢复重做)
  • <Backspace>:删除当前光标前的一个字符
  • C-<Backspace>:删除当前光标前的一个单词
  • C-d<Delete>:删除当前光标后的一个字符
  • M-<Backspace>:剪切当前光标前的一个字符到剪贴板
  • M-d:剪切当前光标后的一个字符到剪贴板
  • C-k:剪切从光标到行尾的字符到剪贴板
  • C-y:粘贴剪贴板中的文本到当前光标位置
  • M-w:复制当前选中的字符
  • C-w:剪切当前选择的字符到剪贴板
  • C-a C-k:剪切一整行到剪贴板中,其实也可以用于删除一整行
  • C-e <RET>:在当前行下方插入一空行
  • C-x C-q:让当前buffer在“只读”和“读写”两种编辑模式之间切换

多窗格与多窗口

首先要明确一下Emacs中窗格与窗口的概念的区别:每个窗格其实就是一个缓冲区,一个窗口中可以同时打开多个窗格,而窗口就是像Windows那样的GUI窗口。

  • C-x 1:仅保留当前窗格,关闭其他窗格
  • C-x 2:在垂直方向打开2个窗格
  • C-x 3:在水平方向打开2个窗格
  • C-x o:在不同窗格之间切换
  • C-x 0:关闭当前窗格
  • C-x S-{:减小当前窗格的水平宽度
  • C-x S-}:缩小当前窗格的水平宽度
  • C-x S-^:增大当前窗格的垂直高度
  • C-M-v:在另一个窗格中向下滚动一屏(但光标还保留在当前窗格)
  • C-M-S-v:在另一个窗格中向上滚动一屏(但光标还保留在当前窗格)
  • M-x make-frame:打开一个新窗口
  • M-x delete-frame:关闭当前窗口
  • C-z:挂起当前的窗口(相当于最小化当前的窗口)

文本编码

  • M-x describe-coding-system <RET>:查看当前缓冲区的编码格式
  • C-x <RET> r <TAB>:列出当前的所有编码
  • C-x <RET> f utf-8 <RET>:改变当前缓冲区的编码为utf-8

命令与函数操作

  • M-x [函数名] <RET>:执行一个函数
  • M-S-! [命令] <RET>:执行一个命令行命令
  • M-x shell <RET>:在一个新窗格中、当前目录位置打开命令行

一些常用操作

  • M-x goto-line <RET> [行号] <RET>:跳转到某一行,将其绑定到快捷键C-c j
;; 快速跳到某一行
(global-set-key (kbd "C-c j") 'goto-line)
  • M-x electric-pair-mode <RET>:打开括号配对模式

缓冲区

  • C-x C-b:在一个新窗格中列出当前所有的缓冲区
  • C-x b xxx <RET>:切换到名为xxx的缓冲区
  • C-x k xxx <RET>:关闭一个名为xxx的缓冲区(如果直接按回车,默认关闭的是当前缓冲区)
  • C-x s:一个个询问是否保存当前每个缓冲区的内容
  • M-x kill-some-buffers <RET>:一个个询问是否关闭当前打开的缓冲区
  • C-x <Left>:在多个缓冲区之间切换
  • C-x <Right>:在多个缓冲区之间切换

配置相关

  • C-x d S-~ <RET>:打开Emacs配置文件所在路径
  • C-h v load-path <RET>:查看Emacs的加载路径

帮助操作

  • C-h t:查看Emacs快速指南
  • C-h f:查看一个函数(命令)的帮助文档
  • C-h S-?M-x [help]:查看帮助
  • C-h c [命令序列]:显示命令序列对应的函数名
  • C-h k [命令序列]:显示命令序列的详细文档(打开一个新窗格)
  • C-h a [关键词]:打开一个新窗格列出所有含有此关键词的命令
  • C-h i:查看信息字典文档
  • C-h r:查看使用手册
  • C-h m:查看当前缓冲区的major mode和minor mode及其介绍
  • C-h b:查看和当前缓冲区绑定的快捷键列表
  • C-h v [变量名]:查看某个变量的值
  • C-h w [函数名]:查看某个函数绑定的快捷键
  • C-h i m [elisp] <RET>:查看elisp文档

命令行操作

以下操作都是在系统命令行中的操作:

  • emacs -nw -Q:在命令行中打开Emacs,-nw参数表示:no window-Q参数表示:不显示欢迎界面。在命令行打开Emacs后,各项操作和按键与在GUI窗口中是一致的

配置文件基本用法

配置文件的位置

emacs配置文件有两个位置:~/.emacs~/.emacs.d/init.el,下面以~/.emacs.d/init.el为例进行说明(如果不存在,则自行创建一个该文件即可)。为了不产生影响,需要把~/.emacs这个文件删掉。

打开配置文件的快捷键

在emacs中打开配置文件所在的路径(~/.emacs.d)有一个快捷键:C-x d S-~ <RET>

修改配置文件并使之生效

打开emacs的配置文件~/.emacs.d/init.el,在文件的最后追加一行内容并保存:

;; 默认显示行号
(global-linum-mode 1)

然后执行M-x load-file <RET> init.el操作使得配置文件生效。这时再看打开的文本文件,就会发现左边多出来了行号。

把打开、加载配置文件的操作绑定到自定义的快捷键上

在配置文件init.el后面追加下面的代码并保存:

;; 定义一个函数:快速打开配置文件
(defun open-init-file()
    (interactive)
    (find-file "~/.emacs.d/init.el"))
    
;; 把函数open-init-file绑定到快捷键<F2>键上
(global-set-key (kbd "<f2>") 'open-init-file)

;; 快速加载init.el
(global-set-key (kbd "C-<f5>") 'load-file)

执行M-x load-file <RET> init.el操作使得配置文件生效,这时再按<F2>键就可以直接快速打开init.el配置文件了,再次修改init.el文件后,也可以直接按快捷键C-<f5>使配置生效了。

把大小写切换键变为Ctrl键

在一般的键盘上,Ctrl键位于左下角,需要用左手的小拇指去按,不是很顺手,而emacs的很多组合按键都需要用到Ctrl键,就会带来一定的不便。不过可以发现,用左手的小拇指去按Caps Lock大小写切换键还是很顺手的,那么能不能把Caps Lock键变成Ctrl键呢?

答案是可以的,这个时候可以使用autohotkey这样一款软件把Caps Lock键变成Ctrl键,并且只在打开emacs时生效,不影响在其他软件中的按键操作。在Windows系统的用法如下:

  • 到autohotkey的下载页面下载最新的zip包到本地,解压缩。
  • 复制下面代码,保存为一个文件,命名为caps2ctrl.ahk
#IfWinActive emacs  ; if in emacs
Control::Capslock   ; make Control the Caps Lock button
Capslock::Control   ; make Caps Lock the control button
#IfWinActive        ; end if in emacs
  • caps2ctrl.ahk文件复制到刚刚解压缩得到的文件夹下的Compiler子文件中,在这个文件夹位置打开cmd命令行,输入命令:Ahk2Exe.exe /in caps2ctrl.ahk /out caps2ctrl.exe,然后就在当前文件夹生成了一个名为caps2ctrl.exe的可执行文件,双击打开它。
  • 这时再打开emacs,可以发现Caps Lock键已经变成了Ctrl键。如果想切换大小写只需按Ctrl键即可。
  • 退出caps2ctrl.exe程序即可恢复上面的修改。
  • caps2ctrl.exe程序可以在没有下载autohotkey软件的电脑上独立使用(我已经生成好了一个放在我的百度网盘里:caps2ctrl.exe.rar)。要注意的是,如果是在cmd命令行中打开emacs,caps2ctrl.exe程序是无法生效的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容