Emacs入门
目录
安装emacs
正文
https://www.emacswiki.org/emacs?interface=zh-cn
成为高手笔记
即使你不打算使用 Emacs 默认快捷键, 这步也是必须的, 不要跳过! 最起码要知道以下命令, M-x describe-variable, 快捷键 C-h v, 查看变量的文档 M-x describe-function, 快捷键 C-h f, 查看命令的文档 M-x describe-key, 快捷键 C-h k, 查看快捷键的文档 Emacs manual C-h r Browse manuals C-h i Emacs tutorial C-h t Undo changes C-x u Buy manuals C-h RET Exit Emacs C-x C-c
以实际问题作为切入点
努力能很快得到回报, 你会越学越有乐趣, 进入感情上的正反馈.
要成为高手, 兴趣是最重要的.
以我为例, 我急需 GTD 的工具, 而 Emacs 的 Org-mode 是同类软件中最好的 (没有之一). 用 Org-mode 节省了时间后, 我对 Emacs 爱屋及乌, 兴趣高涨了 100 倍.
反面例子是啃Lisp教程开始Emacs之旅, 坚持下来的人寥寥无几.
待解决的问题设定优先度 关键在于理性地考虑你最迫切需要解决的一个问题.以这个问题作为出发点, 除此之外都可以妥协.
虽然 Emacs 无所不能, 但是饭也要一口一口吃. 有时退一步等于进两步.
例如, 我一直以为 Emacs 的中文显示很完美, 搞不懂为什么有人在字体配置上花那么多时间.
在接到读者反馈后, 我才明白原来我一直在终端下使用Emacs, 终端软件可以完美显示中文字体, 所以就没 Emacs 什么事了. 需要配置字体的人用的是图形界面 Emacs.
当初只在终端下使用 Emacs 是因为需连接到远程服务器. 我认为这是重点. 甚至为此放弃了漂亮的配色主题 (后来发觉此牺牲毫无必要). 塞翁失马, 由此也避免了图形界面版本的所有问题.
https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/guide-zh.org
后记
后面要把常用的这些常用快捷键写成一个短小的总结卡
模式键定义
四个模式键:C—-Ctrl;M—-Alt;s—-Super(Win);S—-Shift
比如:
C-x:表示按下ctrl键,然后按下x键。
C-x C-c:表示按下ctrl,然后按下x键,松开后再按下c键。
C-x k:表示按下ctrl,同时按下x和k键。
最常用命令 页开头或结尾
M-f 与 M-b 在行内, 前后大步移动光标,步进单位对于英文而言是单词的长度,对于中文而言是两个标点符号的间距。
M-{ M-} 段开头或结尾
C-x [ C-x ] or ESC < ESC > 页开头或结尾
C-a 或 C-e 对于英文文本,若将光标快速移到行首或行尾,标准按键是 C-a 或 C-e 但是对于中文而言,这对按键有着将光标被移到段首或段尾的奇异效果……如果偶尔忘记,用 Home或End 键也未尝不可。
M-a 与 M-e 则分别可将光标移动到句首或句尾。
C-v 或 M-v 如果文档很长,用可实现向下或向上翻屏
M-< ,移到最开始。 然后再按几次 C-v 回到这里。
M-> ,移到最末尾。 然后再按几次 M-v 回到这里。
C-x 2 将屏幕划分成两个窗格。这两个窗格里显示的都是本篇快速指南,而光标则停留在上方的窗格里。
C-x o(“o”指的是“其它(other)”), 将光标转移到下方的窗格。
C-x 1 (在上方窗格里)输入 C-x 1 关掉下方窗格。
C-x C-f 寻找文件。 C-x C-s 保存文件。
打开菜单 用F10或者M-` (就是键盘输入区左上角的那个键)就可以呼出菜单了
emacs-gtk 显示菜单 etc option -->show/hide 这样在 emacs-gtk 就有菜单了 而em还是没有的 非常 好
搜索
增量搜索 C-s 正向搜索
C-r 反向搜索
C-M-s使用正则表达式正向搜索
C-M-r 使用正则表达式反向搜索
M-p 选择上一个搜索结果
M-n 选择下一个搜索结果
RET 退出搜索并停留在当前搜索到的位置
C-g 中止当前搜索
save and exit
C-x C-c:退出Emacs C-x C-s:保存当前buffer
选中 复制 黏贴
把光标移动到区域的首字符 键入C-@(即ctrl+shift+2),以设置标记 有时是ctrl+shife +@ 把光标移动到区域的最后一个字符 键入M(alt)-w,拷贝这个选定区域到粘贴板(剪切是C-w) 用光标定位将要粘贴内容的地方,然后键入C-y ,拷贝成功。 C-@ mark --> c-f or c-n --> alt-w --> c-y C-w 剪切标记到当前光标所在处的文本 C-d 删除一个字符
查找
搜索/替换(Seach/Replace) C-s 向后搜索 C-r 向前搜索
替换
按M - %启动查找替换(M is alt on debian),输入要被替换的词,回车,然后输入要替换的词,再回车。 被替换的词会高亮起来,这时,输入y替换并跳到下一个,输入n忽略并跳到下一个,输入q结束,输入!替换剩下的全部。 一些常用的选项: C - g 中断查找替换过程。 ^ 返回上一个替换点,按y继续下一个,如果不想替换上一个的话,用^返回到上一个,然后按 C - r 进入编辑,修改完后按C - M - c退出继续下一个。 C - l 使当前匹配显示在文档中间。 C - r 进入修改。
移动
M-< 到文件开头 M-> esc ->shift+> 到文件末尾 以下命令在翻页浏览时相当有用: C-v 向前移动一屏 M-v 向后移动一屏 C-l 重绘屏幕,并将光标所在行置于屏幕的中央 (注意是 CONTROL-L,不是 CONTROL-1) 整屏的移动很有用,但是如何在文字中精确定位呢? 有几种方式可以选择。用方向键当然可以,不过更有效率的方法是保持双手位于 主键盘区,然后使用 C-p 、 C-b 、 C-f 和 C-n 这四个命令。它们的功能和方 向键是一样的,如下图所示: 上一行 C-p : : 向左移 C-b .... 目前光标位置 .... 向右移 C-f : : 下一行 C-n p-previous,n-next,b-backward,f-forward。 >> 用 C-n 或 C-p 将光标移到上图的中央。 按 C-l,整幅图会被显示在屏幕的中央。 移动的单位 向后 向前 字符 C-b C-f 当前行开头或结尾 C-a C-e C-n M-f 如果你嫌一个字符一个字符地挪光标太慢,你还可以一个词一个词地跳。M-f (META-f) 可以将光标往前移动一个词,而 M-b 则是往后移。【这里的“词”指 英文单词,对中文来说,则是指移动到下一个标点符号。】 类似的惯例在“行”与“句子”之间也同样适用:C-a 和 C-e 可以将光标移动到 “一行”的头部和尾部;而 M-a(和terminator冲突) 和 M-e 则将光标移动到“一句”的头部和尾部。 这里对简单的光标移动命令做一个总结,其中也包括了整词和整句的移动: C-f 向右移动一个字符 C-b 向左移动一个字符 M-f 向右移动一个词【对中文是移动到下一个标点符号】 M-b 向左移动一个词【对中文是移动到上一个标点符号】 C-n 移动到下一行 C-p 移动到上一行 C-a 移动到行首 C-e 移动到行尾 M-a 移动到句首 M-e 移动到句尾 这里还要介绍两个重要的光标移动命令:M-< (META 小于号)可以将光标移动到 所有文字的最开头;M-> (META 大于号)可以将光标移动到所有文字的最末尾。 注意,在大部分键盘上,小于号(<)需要用上档键(Shift)来输入,所以在这 些键盘上你应该用 Shift 键来输入 M-<,如果不按 Shift 键,你输入的会是 M-comma(META 逗号)。 >> 试一试 M-< ,移到本快速指南的最开始。 然后再按几次 C-v 回到这里。 >> 试一试 M-> ,移到本快速指南的最末尾。 然后再按几次 M-v 回到这里。 如果你的键盘上有方向键的话,也可以用它们来移动光标。不过我们有三个理由 推荐你学习 C-b 、C-f 、C-n 、和 C-p:(1)它们在任何键盘上都能用。(2) 当你熟练使用 Emacs 之后,你会发现用这些组合键比用方向键要快得多,因为你 的手不需要离开打字区。(3)一旦你习惯了使用这些组合键,你也可以很容易地 适应其它更高级的光标移动命令。 大部分的 Emacs 命令接受数字参数,并且对于多数命令而言,这些数字参数的作 用是指定命令的重复次数。为一个命令指定数字参数(也就是重复次数)的方法 是:先输入 C-u,然后输入数字作为参数,最后再输入命令。如果你有META (或 EDIT 或 ALT)键,那么还有另一种办法:按住 META 键不放,然后输入数字。不 过我们还是建议你用 C-u,因为它在任何终端机上都能用。这种数字参数也称为 “前缀参数”,意思是说这个参数是先于使用它的命令而输入的。 举例来说, C-u 8 C-f 会向前移动 8 个字符。
缓冲区、窗口与窗框
2018年 01月 23日 星期二 21:03:14 CST 学习这个 Emacs 启动后,窗框中默认只有一个窗口,但是使用 C-x 1 或 C-x 2 可以将其水平或竖直一分为二,这个分割过程可以无限的进行下去。每次被分割的窗口都是输入光标所在的窗口(也称为被激活的窗口)。使用 C-x o 可以在多个窗口中跳转。 由于 Emacs 在拆分窗口时,默认是水平或竖直均分,所以如果你希望将某个窗口调的宽一些,可 C-x } ;要使之窄一些,可 C-x { ;要使之高一些,可 C-x ^,但是要使之矮一些,貌似只能是激活该窗口下方的窗口,然后让下方的窗口高一些。这些窗口大小的调整方法,每次只能使得窗口的尺寸增大或减小一个字符的宽度或高度。如果你不想多次输入像 C-x ^ 这样的命令,那么可以用 C-u n C-x ^ 这样的组合键,其中 n 表示你要重复执行 C-x ^ 这样的命令 n 次。例如,要将当前窗口的高度增加 5 个字符的高度,只需 C-u 5 C-x ^ 即可。 C-u 最好要牢记,它的职能就是给某个组合键所绑定的 Emacs Lisp 函数传递一个参数值。 C-u 5 C-x ^ 表示向 C-x ^ 所绑定的 Emacs Lisp 函数传递参数值 5 ,而这个函数接受这个参数值之后,就会将窗口的高度增加 5 个字符的高度。 要查看按键被绑定到了哪个 Emacs Lisp 函数,只需 C-h k <RET> 按下你要查询的键 。 <RET> 表示回车键 如果觉得窗口太多,想关掉一些,那么关闭被激活的窗口的组合键是 C-x 0 。如果是图形界面的 Emacs,只需要鼠标右键点击窗口的模式行即可将该窗口关闭。我的建议是:能用键盘就不要用鼠标。 要在某个窗口中打开或新建一个文件,可 C-x C-f 文件路径。 为了节省内存占用,请尽量使用 Emacs 的多窗口模式,不要打开一个又一个 Emacs
文本编辑的正确姿势
用 Emacs 的正确姿势应该是永远保持能不用鼠标就不用鼠标的姿势!因此,你需要学会用键盘来控制光标在窗口中的位置。
最基本的光标位置控制键如下所示: 上一行 C-p : : 向左移 C-b .... 目前光标位置 .... 向右移 C-f : : 下一行 C-n</span> 要记忆这几个键并不困难。 p 就是 previous(在...之前), n 就是 next, b 就是 backward, f 就是 forward,而 C 就是 Control……美国人民真会玩!
上述按键虽然简单易懂,但它们只适合小范围移动光标。在行内,可以用 M-f 与 M-b 前后大步移动光标,步进单位对于英文而言是单词的长度,对于中文而言是两个标点符号的间距。
对于英文文本,若将光标快速移到行首或行尾,标准按键是 C-a 或 C-e 但是对于中文而言,这对按键有着将光标被移到段首或段尾的奇异效果……如果偶尔忘记了这对按键,用 Home 或 End 键也未尝不可。 M-a 与 M-e 则分别可将光标移动到句首或句尾。
如果文档很长,用 C-v 或 M-v 可实现向下或向上翻屏。如果偶尔忘记了这对按键,用键盘上的 PgUp 与 PgDn 翻页键也可行。
跨度最大的光标移动键是 M-< 与 M-> ,可分别将光标移动到缓冲区的首部与尾部。
一旦掌握了上述这几个控制光标位置的按键,在 Emacs 中鼠标基本上就变得不是那么不可或缺了,更重要的是,这些按键能够帮助你更快速的选择文本。对于文档中的待选文本区域,用上述按键将光标移动到该区域的起始位置,然后用 C-@ 标定选区之首,然后继续用上述按键将光标移动到选区之尾,这样就完成了文本的选取。
你可能不知道怎么产生 C-@ 按键序列。普通键盘上,应该是摁住 Ctrl 键,然后再摁住 Shift 键,最后摁下数字 2 键,然后松开手。因为 @ 在 2 上面,需要 Shift 切换……
对于选中的文本,随后的操作无非是剪切、复制或删除。剪切,请用 C-w;复制,请用 M-w;删除,请用 Backspace。对于剪切或复制的文本,要粘帖在光标所在位置,请用 C-y……或者你也可以试着看看 C-y 之后再 M-y 有什么效果!
对文本进行了一段时间的编辑之后,要反悔的话,就用 C-_ 键执行 Undo 操作。
要产生 C-_ 的按键序列,请参考上文所讲的 C-@ 的做法。 建议现在就立刻将上述提到的每个按键都反复试验六、七次,以后就一直坚持使用它们……用不了几天也许就变成手指的本能了。忘掉鼠标吧,键盘可以解放你的双手,可以让你从畸形的鼠标手解脱,然后变成键盘手……因为你很快就会觉得左手的小指会有点酸痛!我会在下一节中拯救你的手。
拯救你的左手小拇指
如果感到左手的小手指有点疼,就不要再去用左手去摁 C-x C-s 这样的键了,你完全可以用右手的小指去摁键盘右侧的 Ctrl 键,然后左手相应的手指去摁 x 与 s 键
将一段代码向右推
显示行号
临时显示行号或者取消行号
在Emacs下执行 M-x linum-mode 来显示或者取消行号 M-x : Alt + x 输入: linum-mode
跳转到指定行
临时
M-x goto-line 然后回车 <line_number> ESC x goto-line 然后回车 <line_number> ESC x goto-char 然后回车 char
长期
以在.emacs文件中定制一下(添加以下一行):
(define-key ctl-x-map "l" 'goto-line)
然后每次在emacs中按C-x再按l,输入指定的行号就可以了。
http://blog.csdn.net/grey_csdn/article/details/78905862 http://bbs.csdn.net/topics/60028785
常用插件
记笔记,安排日程,那么毫无疑问Org-Mode是首选
快捷键
M-s : 新建一个buffer(缓冲区) C-x O : 注意是大写的O,不是零,所以需要按住shift键再按o键。用于在缓冲区之间切换 C-g : 取消当前操作 C-x u : 回到上一步,相当于Undo C-x C-x : 变大写 C-x 3 : 把缓冲区(buffer)分为左右两个,新的一个缓冲区是复制当前的缓冲区 (可以执行多次,来分割出很多小窗口) C-x 2 : 把缓冲区(buffer)分为上下两个,新的一个缓冲区是复制当前的缓冲区 (可以执行多次,来分割出很多小窗口) M-w : 选中文字的情况是复制文字,而如果没有选中文字则是复制当前的一行 C-w : 选中文字的情况是剪切文字,而如果没有选中文字则是剪切当前的一行 M-x : 调出命令输入,可以在后面接命令,比如man,svn-status,等 C-y : 黏贴 C-x C-s : 保存文本 C-x C-f : 打开文件,如果文件不存在,则新建文件 C-x C-v : 打开一个文件,取代当前缓冲区 C-x k : 关闭当前缓冲区(buffer) C-s : 向前搜索 C-r : 向后搜索 C-x h : 全选 C-v : 向下翻页 M-v : 向上翻页 C-f : 前进一个字符 C-b : 后退一个字符 M-f : 前进一个单词 M-b : 后退一个单词 C-@ : 标记开始区域 C-a : 移到行首 C-e : 移到行尾 M-a : 移到句首 M-e : 移到句尾 M-< : 缓冲区头部 M-> : 缓冲区尾部 M-g M-g,再输入数字 : 跳转到文本的第几行 C-x 0 : 关闭当前缓冲区 C-x C-c : 退出Emacs emacs buffer read only Ctrl-x Ctrl-q
链接:https://www.jianshu.com/p/732157b02ecc
多窗口
首先先明确下Emacs窗口的概念,我们双击Emacs图标打开程序见到的Windows窗口叫做Frame,包含了标题栏,菜单栏,工具栏,最下面的Mode Line和回显区域,而中间一大块显示文本的区域则是Window,实际上每个窗口都有自己的Mode Line。下文中我将称Frame为框,Window为窗口,这里和我们平时理解的Windows窗口有点区别。
在Emacs里面,一个框可以分割出多个窗口,多个窗口可以显示同一个或者不同Buffer,但是一个窗口只能属于一个Frame。一个窗口同时也只能显示一个Buffer,但是同时打开两个窗口也能显示一个Buffer的不同部分,这两个窗口是同步的,就是说如果在一个窗口中对Buffer做了修改,在另一个窗口中可以立即表现出来。但在一个窗口中移动光标之类的操作不会影响另一个窗口。多缓冲中有当前缓冲这个概念,同样对于多窗口也有当前窗口,对于当前选中的窗口其Mode Line相对于其它窗口颜色会深一些。
显示窗口
命令C-x 2 (split-window-vertically) 垂直拆分窗口,就是把一个窗口上下等分为两个,拆分出来的窗口默认是显示当前Buffer。可以多次使用这个命令,会把一个窗口不停的两等分。
对应也有水平拆分窗口的命令C-x 3 (split-window-horizontally),这两个命令也可以混合使用,如果你屏幕够大画个迷宫出来也不是不可能的。拆分命令还可以加参数,比如M-5 C-x 2就是说上面那个窗口只占5行,其余的位置都给下面的窗口。
C-x o (other-window) 可以在多个窗口中切换,从上到下一个一个的来。使用参数来控制选中下面第几个窗口,想往回选的话参数设为负数。 C-M-v (scroll-other-window),用来滚动下一个窗口。 上一章我们看到有些命令加了C-x 4这个前缀,这一类命令都是用来操作多窗口的。 C-x 4 b bufname (switch-to-buffer-other-window) 在另一个窗口打开缓冲。 C-x 4 C-o bufname (display-buffer) 在另一个窗口打开缓冲,但不选中那个窗口。 C-x 4 f filename (find-file-other-window) 在另一个窗口打开文件。 C-x 4 d directory (dired-other-window) 在另一个窗口打开文件夹。 C-x 4 m (mail-other-window) 在另一个窗口写邮件。 C-x 4 r filename (find-file-read-only-other-window) 在另一个窗口以只读方式打开文件。 这一类的命令默认是垂直拆分窗口。
重排窗口
窗口排的密密麻麻看上去肯定不舒服,这时使用 C-x 0 (delete-window) 来关闭当前窗口,需要注意的是窗口和缓冲是两个概念,关闭一个窗口对缓冲,或者我们正在编辑的文件没有任何影响。也可以使用C-x 1 (delete-other-windows) 关闭其它所有窗口。如果想连窗口打开的缓冲一并关掉使用C-x 4 0 (kill-buffer-and-window)。
我们还可以对窗口的大小做些改变: C-x ^ (enlarge-window)让窗口变得高点, C-x { (shrink-window-horizontally) 这个是把窗口变窄,变宽的话是C-x } (enlarge-window-horizontally) ,C-x - (shrink-window-if-larger-than-buffer)这个看字面意思就能理解,如果窗口比缓冲大就缩小点,C-x + (balance-windows)这个命令和前面那个没有任何关系是将所有窗口变得一样高。 最后再说一个在窗口中切换的命令,有时候窗口开的太多自己也记不住顺序,使用C-x o就会很麻烦。有一类命令能让你在上下左右切换当前窗口,M-x windmove-right 就是移到右边那个窗口,对应的"left","up“, "down",向四个方向都能移。
小结
org mode
Emacs 的 Org-mode 在一定程度上可以替代 OneNote,有些方面甚至更好 Org-mode
reload configfile
emacs 打开~/.emacs的时候执行命令M-x eval-buffer,就可以使配置文件立即生效。
配置
https://github.com/gabrielelanaro/emacs-for-python https://github.com/jorgenschaefer/elpy http://www.jesshamrick.com/2012/09/18/emacs-as-a-python-ide/ https://realpython.com/blog/python/emacs-the-best-python-editor *day1 pass 20170610 有空再详细的再看 : 记得要添加在公司作的相关的emacs 笔记 ======= 这几天常用的几个重要使命 重要快捷键(Important) C-k 删除一行 C-g 停止当前运行/输入的命令 C-x u 撤销前一个命令 c-j 下称整个文件内容 emacs 菜单 用F10或者M-`。 ctrl+g q 退出 快速说明 编辑器内显示行号可使用 M-x linum-mode 来开启。 M-x 然后在最下面 输入 linum-mode not try q 获取帮助 ctrl+h k 要查看的快捷键盘 学习基础 Elisp ctrl+x ctrl +b C-x o:把光标在屏幕上的窗口间进行切换。记忆方法:其它(Other)窗口。 然后选择 *scratch* 运算 C-X c - E 插件管理 c-x o other window install company f2 打开配置文件 org-mode major mode and minor mode (C-h m) ;;evan配置文件 ;; ~/.emacs 行号什么 的 我是加到这个文件生效的 ;; ~/.emacs.d/emacs ;; 关闭工具栏,tool-bar-mode 即为一个 Minor Mode (tool-bar-mode -1) ;; 关闭文件滑动控件 (scroll-bar-mode -1) ;; 显示行号 试过 这个一定有效果 (global-linum-mode 1) ;; 更改光标的样式(不能生效,解决方案见第二集) (setq cursor-type 'bar) ;; 关闭启动帮助画面 (setq inhibit-splash-screen 1) ;; 关闭缩进 (第二天中被去除) ;; (electric-indent-mode -1) ;; 更改显示字体大小 16pt ;; http://stackoverflow.com/questions/294664/how-to-set-the-font-size-in-emacs (set-face-attribute 'default nil :height 160) ;; 快速打开配置文件 (defun open-init-file() (interactive) (find-file "~/.emacs.d/init.el")) ;; 这一行代码,将函数 open-init-file 绑定到 <f2> 键上 (global-set-key (kbd "<f2>") 'open-init-file) ; 开启全局 Company 补全 (global-company-mode 1) ;; 作者用的 是t 3(global-company-mode t) ;; ~/.emacs 生效的居然是这个 2018 ;; 在 mode line 上显示行列号 (setq column-number-mode 1) (setq line-number-mode 1) ;;显示列号 (setq column-number-mode t) ;; 显示行号 (global-linum-mode 1) ;; 取消滚动栏,工具栏 (tool-bar-mode 0) (menu-bar-mode 0) (scroll-bar-mode 0) ;; 关闭emacs启动时的页面 (setq inhibit-startup-message 1) (setq gnus-inhibit-startup-message 1) ;; 以 y/n代表 yes/no (fset 'yes-or-no-p 'y-or-n-p) ;;; 设置备份策略 (setq make-backup-files t) (setq kept-old-versions 2) (setq kept-new-versions 2) (setq delete-old-versions t) (setq backup-directory-alist '(("" . "~/.emacsbackup"))) ;; 公共插件配置 ;; 设置 package system,这里使用 MELPA,里面的包可以说是应有尽有 (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (package-initialize) ;;内置的package管理,emacs24以上的版本有用 (require 'package) ;;将melpa仓库地址加入到package-archives这个列表变量里面 (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) ;;这个是国内一个elpa仓库镜像,速度更快一些,你懂得 (add-to-list 'package-archives '("popkit" . "http://elpa.popkit.org/packages/") t) ;;初始化package (package-initialize) ;;更新仓库里面的package (when (not package-archive-contents) (package-refresh-contents)) (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(package-selected-packages (quote (company auto-complete autopair)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) I. 显示时间 .emacs加上: (display-time-mode 1) ;; 常显 (setq display-time-24hr-format t) ;;格式 (setq display-time-day-and-date t) ;;显示时间、星期、日期 II. 隐藏菜单栏工具栏滚动条 .emacs加上: (tool-bar-mode 0) (menu-bar-mode 0) (scroll-bar-mode 0) ;;注: 新版改成使用0,旧版使用nil的做法已失效,但 (set-scroll-bar-mode nil) 仍可使用 III. 关闭启动画面 .emacs加上: (setq inhibit-startup-message t) IV. highlight当前行 .emacs加上: (global-hl-line-mode 1) ;;;; c mode ;;;; (defvar xgp-cfsi-left-PAREN-old nil "Command used to input \"(\"") (make-variable-buffer-local 'xgp-cfsi-left-PAREN-old) (defun xgp-cfsi-modify-alist (alist term new) (let ((tl (assq term (symbol-value alist)))) (if tl (setcdr tl new) (add-to-list alist (cons term new))))) (defun xgp-cfsi (style) "Deciding whether using CFSI." (interactive "Style: ") (c-set-style style) (setq indent-tabs-mode nil c-hanging-semi&comma-criteria (quote (c-semi&comma-inside-parenlist))) (xgp-cfsi-modify-alist 'c-hanging-braces-alist 'class-open nil) (xgp-cfsi-modify-alist 'c-hanging-braces-alist 'class-close nil) (local-set-key " " 'self-insert-command)) (defun xgp-cfsi-erase-blanks () "Erase all trivial blanks for CFSI." (interactive) (save-excursion (goto-char (point-min)) (while (re-search-forward "[ \t]+$" nil t) (replace-match "" nil nil)))) (defun linux-c-mode() (define-key c-mode-map [return] 'newline-and-indent) (setq imenu-sort-function 'imenu--sort-by-name) (interactive) (imenu-add-menubar-index) (which-function-mode) (c-toggle-auto-state) (c-toggle-hungry-state) (setq indent-tabs-mode nil) (xgp-cfsi "linux")) (add-hook 'c-mode-common-hook 'linux-c-mode) ;; 代码补全 (add-hook 'c-mode-hook 'company-mode) (add-hook 'c++-mode-hook 'company-mode) # other 如果要一次移动若干个单位,可以给命令加上数值参数,通过C-u命令,如:C-u 8 C-n就表示往下移8行,C-u 10 M-e表示往后移10句。不过C-u的参数对C-v和M-v命令而言有特殊,它不表示上下翻多少页,而是表示上下滚动多少行。注意与C-n的区别,C-u 8 C-n表示光标下移8行,屏幕不一定会滚动,而C-u 8 C-v,表示屏幕滚动8行,如果光标没有滚到屏幕外的话,光标位置不变。 如果不给C-u带上数值,则默认的值是4。比如C-u C-n就表示下移4行。这一特性还可以重复使用C-u C-u C-p就表示上移16行,C-u C-u C-u C-f表示右移64个字符。 前面讲了用C-g可以中断当前的命令,这次再补充一点,有时候C-g不灵时,可以按三次<Esc>键达到相同的目的。
kali本本配置
;;cat ~/.emacs ;; 关闭工具栏,tool-bar-mode 即为一个 Minor Mode (tool-bar-mode 0) (menu-bar-mode 0) (scroll-bar-mode 0) (tool-bar-mode -1) (setq column-number-mode t) (setq column-number-mode 1) (setq line-number-mode 1) ;; 显示行号 (global-linum-mode 1) ;; 在 mode line 上显示行列号 (setq column-number-mode 1) (setq line-number-mode 1) ;;显示列号 (setq column-number-mode t) ;; 显示行号 (global-linum-mode 1) ;; 取消滚动栏,工具栏 (tool-bar-mode 0) (menu-bar-mode 0) (scroll-bar-mode 0) ;; 关闭emacs启动时的页面 (setq inhibit-startup-message 1) (setq gnus-inhibit-startup-message 1) ;; 以 y/n代表 yes/no (fset 'yes-or-no-p 'y-or-n-p) ;;; 设置备份策略 (setq make-backup-files t) (setq kept-old-versions 2) (setq kept-new-versions 2) (setq delete-old-versions t) (setq backup-directory-alist '(("" . "~/.emacsbackup"))) ;; 公共插件配置 ;; 设置 package system,这里使用 MELPA,里面的包可以说是应有尽有 (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (package-initialize) ;;内置的package管理,emacs24以上的版本有用 (require 'package) ;;将melpa仓库地址加入到package-archives这个列表变量里面 (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) ;;这个是国内一个elpa仓库镜像,速度更快一些,你懂得 (add-to-list 'package-archives '("popkit" . "http://elpa.popkit.org/packages/") t) ;;初始化package (package-initialize) ;;更新仓库里面的package (when (not package-archive-contents) (package-refresh-contents)) (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(package-selected-packages (quote (company auto-complete autopair)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) ;;;; c mode ;;;; (defvar xgp-cfsi-left-PAREN-old nil "Command used to input \"(\"") (make-variable-buffer-local 'xgp-cfsi-left-PAREN-old) (defun xgp-cfsi-modify-alist (alist term new) (let ((tl (assq term (symbol-value alist)))) (if tl (setcdr tl new) (add-to-list alist (cons term new))))) (defun xgp-cfsi (style) "Deciding whether using CFSI." (interactive "Style: ") (c-set-style style) (setq indent-tabs-mode nil c-hanging-semi&comma-criteria (quote (c-semi&comma-inside-parenlist))) (xgp-cfsi-modify-alist 'c-hanging-braces-alist 'class-open nil) (xgp-cfsi-modify-alist 'c-hanging-braces-alist 'class-close nil) (local-set-key " " 'self-insert-command)) (defun xgp-cfsi-erase-blanks () "Erase all trivial blanks for CFSI." (interactive) (save-excursion (goto-char (point-min)) (while (re-search-forward "[ \t]+$" nil t) (replace-match "" nil nil)))) (defun linux-c-mode() (define-key c-mode-map [return] 'newline-and-indent) (setq imenu-sort-function 'imenu--sort-by-name) (interactive) (imenu-add-menubar-index) (which-function-mode) (c-toggle-auto-state) (c-toggle-hungry-state) (setq indent-tabs-mode nil) (xgp-cfsi "linux")) (add-hook 'c-mode-common-hook 'linux-c-mode) ;; 代码补全 (add-hook 'c-mode-hook 'company-mode) (add-hook 'c++-mode-hook 'company-mode) ;; py (setq tab-width 4) (set-variable 'python-indent-offset 4) ;;(set-variable 'python-indent-guess-indent-offset nil)
不错的配置 c什么都包括了
mv ~/.emacs.d ~/.emacs.d.bak git clone --depth 1 https://github.com/seagle0128/.emacs.d.git ~/.emacs.d
有空好好的看一下 https://github.com/seagle0128/.emacs.d
c 常用命令
emacs中很多命令都对C语言格式支持,补充几个命令M-x c-mode 当无法识别C语法格式的文件,可以强制打开C mode语法高亮C-M-p 跳转到}或)匹配的括号C-M-n 跳转到(或{匹配的括号M-x indent-region 自动缩进选定的区域C-c C-c 注释掉整个区域C-u C-c C-c 取消注释C-c C-u 跳转到前面的一个#ifdef C-c C-n 跳转到宏的开头或结尾C-c C-e 扩展宏编译排错:C-x ` (出错信息中)下一个错误,一个窗口显示错误信息,另一个显示源码的出错位置C-c C-c 转到出错位置调试:启动gdb调试器后,光标在源码文件缓冲区中时:C-x SPC 在当前行设置断点gdb在emacs中调用调试并不完美,有时候会出一些异常的情况。工作中如果emacs作为IDE用的话,一般在远程终端字符环境下更合适,如果作为专业的图形化IDE,codeblock等更合适,eclipse+CDT也是一种选择。
c 配置文件
;; 配置文件 for c or c ++ ;; cat ~/.emacs ;; 在 mode line 上显示行列号 (setq column-number-mode 1) (setq line-number-mode 1) ;;显示列号 (setq column-number-mode t) ;; 显示行号 (global-linum-mode 1) ;; 取消滚动栏,工具栏 ;;(tool-bar-mode 0) ;;(menu-bar-mode 0) ;;(scroll-bar-mode 0) ;; 关闭emacs启动时的页面 (setq inhibit-startup-message 1) (setq gnus-inhibit-startup-message 1) ;; 以 y/n代表 yes/no (fset 'yes-or-no-p 'y-or-n-p) ;;; 设置备份策略 (setq make-backup-files t) (setq kept-old-versions 2) (setq kept-new-versions 2) (setq delete-old-versions t) (setq backup-directory-alist '(("" . "~/.emacsbackup"))) ;; 公共插件配置 ;; 设置 package system,这里使用 MELPA,里面的包可以说是应有尽有 (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (package-initialize)
from tour
#这些笔记完全作到wiki么 会不会太多 而没有重点的感觉 * 如果 EMACS 失去响应(IF EMACS STOPS RESPONDING) ----------------------------------------------- 如果 Emacs 对你的命令失去响应,你可以用 C-g 来安全地终止这条命令。C-g 也可以终止一条执行过久的命令。 C-g 还可以取消数字参数和只输入到一半的命令。 >> 输入 C-u 100 设定一个值为 100 的数字参数,然后按 C-g。 现在再按 C-f,光标应该只会移动一个字符,因为你已经用 C-g 取消了参数。 如果你不小心按了一下 <ESC>,你也可以用 C-g 来取消它。 【这个说法似乎有问题,因为按照这个按键顺序输入的应该是 C-M-g。 取消 <ESC> 的正确做法是再连按两次 <ESC>。】 * 插入与删除(INSERTING AND DELETING) -------------------------------------- ,大部分的 Emacs 命令都可以指定重复次数,这其中也包括输入字符的 命令。重复执行输入字符的命令实际上就是输入多个相同的字符。 >> 试试 C-u 8 *,这将会插入 ********。 好,现在你应该已经掌握了最基本的的文本插入和修改功能,其实删除还可以 “以词为单位”进行,下面是一个关于“删除”操作的小结: <DEL> 删除光标前的一个字符 C-d 删除光标后的一个字符 M-<DEL> 移除光标前的一个词 M-d 移除光标后的一个词 C-k 移除从光标到“行尾”间的字符 M-k 移除从光标到“句尾”间的字符 【可能你已经注意到了“删除(delete)”和“移除(kill)”的用词区别,后 文会有详细说明。】 注意“<DEL> 和 C-d”还有“M-<DEL> 和 M-d”是根据前述惯例从 C-f和 M-f 衍生的 出来的(其实<DEL>不是控制字符,我们先忽略这一点)。C-k和 M-k 的关系在 某种程度上与 C-e 和 M-e 一样――如果把“一行”和“一句”作一个类比的话。 你也可以用一种通用的办法来移除缓冲区里的任何一部分:首先把光标移动到你 想要移除的区域的一端,然后按 C-<SPC>(<SPC>指空格)【注意,C-<SPC> 往 往被中文用户设定成输入法热键,如果这样,C-<SPC> 就被系统拦截而无法传递 给 Emacs 了,在这种情况下可以使用C-@。】,然后将光标移动到你准备移除的 文字的另一端。这个时候, Emacs 会高亮光标和你按下 C-<SPC> 之间的文本。 最后,按下 C-w 。这样就可以把位于这两点之间的所有文字移除了。 注意,“移除(kill)”和“删除(delete)”的不同在于被移除的东西可以被重新 插入(在任何位置),而被删除的就不能使用相同的方法重新插入了(不过可以 通过撤销一个删除命令来做到,后文会提到)。 重新插入被移除的文字称为“召回(yank) 召回的命令是 C-y。它会在光标所在处插入你最后移除的文字。 C-y 可以召回最近一次移除的内容,那如何召回前几次移除的内容呢?它们当然 没有丢,你可以用 M-y 来召回它们。在用 C-y 召回最近移除的文字之后,紧接 着再按 M-y 就可以召回再前一次被移除的内容,再按一次 M-y 又可以召回再上 一次的……连续使用 M-y 直到找到你想要召回的东西,然后什么也不用做,继续 编辑就行了。 如果连续按 M-y 很多次,你可能会回到起始点,也就是最近移除的文字。 【看得出这实际上是一个环。】 >> 移除一行,移动一下光标,然后再移除另外一行。 按 C-y 将第二次移除的那行召回来。 紧接着再按 M-y,它将会被第一次移除的那行取代。 试着再按几下 M-y 看看会发生什么。 再继续,直到第二行被召回来,然后再做个几次。 如果感兴趣,你可以试着给 M-y 指定一个正的或负的参数。 * 撤销(UNDO) -------------- 如果你修改了一段文字,又觉得改得不好,可以用 undo 命令进行撤销:C-/。 另外, C-x u 和 C-/ 完全一样,但是按起来有些麻烦。 * 文件(FILE) -------------- * 缓冲区(BUFFER) ------------------ 你可以用 C-x C-f 找到并打开第二个文件,但第一个文件仍然在 Emacs 中。要 切回第一个文件,一种办法是再用一次 C-x C-f。这样,你就可以在 Emacs 中同 时打开多个文件。 不过还有一个更简单的办法,那就是用 C-x b。用这条命 令,你必须输入缓冲区的名称。(如果是返回默认的第一个不用名称) >> 通过输入 C-x C-f foo <Return> 创建一个名为“foo”的文件。 然后输入 C-x b TUTORIAL.cn <Return> 回到这里。 C-x s 保存多个缓冲区 输入 C-x 1 离开缓冲区列表 * 命令集扩展(EXTENDING THE COMMAND SET) ----------------------------------------- C-x 字符扩展。 C-x 之后输入另一个字符或者组合键。 M-x 命令名扩展。M-x 之后输入一个命令名。 C-z 可以暂时离开 Emacs――当然,你还可以再回来。 C-x 的扩展命令有很多,下面列出的是你已经学过的: C-x C-f 寻找文件。 C-x C-s 保存文件。 C-x C-b 列出缓冲区。 C-x C-c 离开 Emacs。 C-x 1 关掉其它所有窗格,只保留一个。 C-x u 撤销。 * 自动保存(AUTO SAVE) ----------------------- 所以,假如不幸真的发生了,你大可以从容地打开原来的文件(注意不是自动保 存文件)然后输入 M-x recover file <Return> 来恢复你的自动保存文件。在 提示确认的时候,输入 yes<Return>。 * 状态栏(MODE LINE) --------------------- “L” 和其后的数字给出了光标所在行的行号。 最开头的星号(*)表示你已经对文字做过改动。刚刚打开的文件肯定没有被改动 过,所以状态栏上显示的不是星号而是短线(-)。 状态栏上小括号里的内容告诉你当前正在使用的编辑模式。缺省的模式是 Fundamental,就是你现在正在使用的这个。它是一种“主模式”。 用 C-l C-l 将本行带到屏幕的最上方。 * 搜索(SEARCHING) ------------------- C-s 是向前搜索,C-r 是向后搜索。不过手别这么快!别着急试。 在按下 C-s 之后,回显区里会有“I-search”字样出现,表明目前 Emacs 正处 于“渐进搜索”状态,并等待你输入搜索字串。按 <Return> 可以结束搜索。 >> 输入 C-s 开始一个搜索。注意敲慢一点,一次输入一个字符。 慢慢输入“ccusor”这个词,每敲一个字都停顿一下并观察光标。 现在你应该已曾经找到“ccusor”这个词了。 >> 再按一次 C-s,搜索下一个“ccusor”出现的位置。 >> 现在按四次 <DEL> ,看看光标是如何移动的。 >> 敲 <Return> 结束搜索。 看仔细了么?在一次渐进式搜索中,Emacs 会尝试跳到搜索目标出现的位置。要 跳到下一个命中位置,就再按一次 C-s。如果找不到目标,Emacs 会发出“哔” 的一声,告诉你搜索失败。在整个过程中,都可以用 C-g 来终止搜索。【你会发 现 C-g 会让光标回到搜索开始的位置,而 <Return> 则让光标留在搜索结果上, 这是很有用的功能。】 在渐进式搜索中,按 <DEL> 会“撤回”到最近一次搜索的命中位置。如果之前没 有一个命中, <DEL> 会抹去搜索字符串中的最后一个字符。比如你已经输入了 “c”,光标就停在“c”第一次出现的位置,再输入“u”,光标停在“cu”第一次出现 的位置,这时再按 <DEL> ,“u”就从搜索字串中消失了,然后光标会回到“c”第 一次出现的位置。 * 多窗格(MULTIPLE WINDOWS) ---------------------------- > 移动光标到这一行,然后输入 C-l C-l。 >> 现在输入 C-x 2,它会将屏幕划分成两个窗格。 这两个窗格里显示的都是本篇快速指南,而光标则停留在上方的窗格里。 >> 试试用 C-M-v 滚动下方的窗格。 (如果你并没有 META 键,用 ESC C-v 也可以。) 【向上滚动是 C-M-S-v,也就是同时按住 CONTROL、META 和 SHIFT 再按 v】 >> 输入 C-x o(“o”指的是“其它(other)”), 将光标转移到下方的窗格。 >> 在下方的窗格中,用 C-v 和 M-v 来滚动。 同时继续在上方的窗格里阅读这些指导。 C-M-v 是一个 CONTROL-META 组合键。如果你有 META (或 Alt)键的话,可以 同时按住CONTROL 和 META 键并输入 v。CONTROL 和 META 键先按哪个都可以, 因为它们只是用来“修饰(modify)”你输入的字符的。 >> (在上方窗格里)输入 C-x 1 关掉下方窗格。 (如果你在下方的窗格里输入 C-x 1,那么就会关掉上方的窗格。你可以把这个 命令看成是“只保留一个窗格”――就是我们正在编辑的这个。) 不同的窗格可以显示不同的缓冲区。如果你在一个窗格里用 C-x C-f 打开了一个 文件,另一个窗格并不会发生什么变化。任何一个窗格里都可以用来打开文件。 * 多窗口(MULTIPLE FRAMES) ------------------ * 更多精彩(MORE FEATURES) --------------------------- 想学习更多的使用技巧,Emacs 使用手册(manual)值得一读。你可以读纸版的 书,也可以在 Emacs 中读(可以从 Help 菜单进入或者按 C-h r)。提两个你 可能会很感兴趣的功能吧,一个是可以帮你少敲键盘的 completion(自动补全), 另一个是方便文件处理的 dired(目录编辑)。 Completion 可以替你节省不必要的键盘输入。比如说你想切换到 *Message* 缓 冲区,你就可以用 C-x b *M<Tab> 来完成。只要 Emacs 能够根据你已经输入的 文字确定你想要输入的内容,它就会自动帮你补齐。Completion 也可用于命令 名和文件名。有关 Completion 的详细说明可以在 Emacs Info 中的 “Completion”一节里找到。 Dired 能够在一个缓冲区里列出一个目录下的所有文件(可以选择是否也列出子 目录),然后你可以在这个文件列表上完成对文件的移动、访问、重命名或删除 等等操作。Dired 也在 Emacs 使用手册中有详细介绍,参见“Dired”一节。 下面列出主要术语的译词对照,并给出注释说明: command 命令 cursor 光标 scrolling 滚动 numeric argument 数字参数 window 窗格 [1] insert 插入 delete 删除 [2] kill 移除 [2] yank 召回 [2] undo 撤销 file 文件 buffer 缓冲区 minibuffer 小缓冲 echo area 回显区 mode line 状态栏 search 搜索 incremental search 渐进式搜索 [3] 20180313 ln 792 here M-x replace-string ENTER search-string ENTER 替换 用 <Return> 结束文件名的输入 Return 这里是什么意思呢 回车么 Alt + x 输入: linum-mode emacs中如何跳到指定行 M-x goto-line 然后回车 <line_number> 以在.emacs文件中定制一下(添加以下一行): (define-key ctl-x-map "l" 'goto-line) 然后每次在emacs中按C-x再按l,输入指定的行号就可以了。 http://blog.csdn.net/grey_csdn/article/details/78905862 http://bbs.csdn.net/topics/60028785
package
也可以使用命令M-x list-packages获取插件列表,使用C-s找到 软件名 i - 选择要安装的包 例如叫 elpy 来安装 ;内置的package管理,emacs24以上的版本有用 (require 'package) ;;将melpa仓库地址加入到package-archives这个列表变量里面 (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t) ;;这个是国内一个elpa仓库镜像,速度更快一些,你懂得 (add-to-list 'package-archives '("popkit" . "http://elpa.popkit.org/packages/") t) ;;初始化package (package-initialize) ;;更新仓库里面的package (when (not package-archive-contents) (package-refresh-contents))
常用操作
#软件包安装 Alt+x list-packages 可以先用C-s向下搜索 autopair 找到后 回来后 按i再按x就下载到本地了。然后打开emacs的配置文件init.el,在里面添加下面: 常用快捷键 i - 选择要安装的包 d - 选择要删除的包 U - 升级已安装的包 x - 执行操作 d - 选择要删除的包
emacs-gtk
让选中可以高亮 自己打开随便看下 居然就看到了 不错 emacs-gtk --> Options --> customize emacs --> custom themes --> 个人感觉 adwaita 还不错 save theme settings
高级
Edit mediawiki sites from emacs
mediawiki.el -- Edit mediawiki sites from emacs
emacs 学习
https://link.zhihu.com/?target=https%3A//github.com/emacs-tw/awesome-emacs 0.我雖然是看man過來的,但是這份名單,如果早知道應該會輕鬆很多。--- update1.從starter-kit入手把,爬梯子出去看redguardtoo的獨立博客,你會發現吊爆了。當然他的一年的文章一定要看。而且可以git下來,revert到剛開始的commit,一個個commit看。2. 還有就是各種折騰。各種動手把,拒絕其他一切的編輯器。3.改鍵位,乾脆去買了HHKB也可以,如你很土豪。4.看書呀,學elisp,這個階段你要看田春冰河的,李殺的博客了。學着寫個插件把。PS.學習emacs會改變你編程思維的,包括你軟件開發的工作流。lisp系各種優雅.上面編號不分先後。
参考
Emacs 入门
https://i.linuxtoy.org/docs/guide/ch25.html
Emacs org mode https://i.linuxtoy.org/docs/guide/ch32s03.html#id3155525
https://www.emacswiki.org/emacs?interface=zh-cn
https://www.cnblogs.com/blfshiye/p/4566900.html
https://www.gnu.org/software/emacs/manual/html_node/efaq/Installing-Emacs.html
Emacs - the Best Python Editor https://realpython.com/blog/python/emacs-the-best-python-editor/
Emacs:最好的Python编辑器 http://codingpy.com/article/emacs-the-best-python-editor/
How to Install Packages Using ELPA, MELPA
【积水成渊-逐步定制自己的Emacs神器】3:为Emacs安装扩展
wiki
Wiki编辑器, 通过 Yaoddmuse 几乎能支持所有的Wiki格式, 实时语法高亮, 你不用担心保存以后确发现格式错了
https://www.emacswiki.org/emacs/Yaoddmuse
2019
Emacs有什么优点,用Emacs写程序真的比IDE更方便吗