Emacs 笔记 常用快捷键和命令

C: Ctrl M: Meta/Alt

RET: 回车


在终端中运行Emacs

emacs -nw/-no-window-system:emacs不启动X界面;




放大缩小字体 Zooming (emacs 23有效)

C-x C-+/=: 放大, text-scale-increase,text-scale-adjust RET +

C-x C-_: 缩小, text-scale-decrease,text-scale-adjust RET _

C-x C-0: 恢复全局默认字体,text-scale-adjust 0

操作方式:C-x 之后可以接任意多个任意组合的C-_/C-+/C-=/C-0

text-scale-adjust: 交互式命令,直接按_,+,=,0调节,可以任意此调节


帮助信息

C-h w: where-is,查看命令对应的快捷键;

C-h k: 和C-h w对应作用相反,查看快捷键对应的命令;

C-h b: 查看当前有效的绑定的快捷键;

C-h f: 查询函数信息;

C-h v: 查询变量信息;

C-h m: 查看当前模式信息;

C-h t: 打开tutorial;


Frame

C-x 5 2: 创建一个frame,可以对frame有一个真实的认识;

C-x 5 0: 删除当前的Frame;

C-x 5 1: 删除除当前的Frame之外的其他Frame;


窗口

C-x o:跳转到其他窗口,o (other),逆时针方向;

M n C-x o:n是一个数字,按照逆时针方向,跳转n个窗口;


C-x 0:关闭当前窗口

C-x 1:delete other windows


C-x 2:水平分割窗口

C-x 3:垂直分割窗口


C-x <:窗口内容左卷

C-x >:窗口内容右卷


C-x ^:加高当前窗口 enlarge-window,降低当前窗口 shrink-window

C-x }:enlarg-window-horizontally

C-x {:shrink-window-horizontally


保存、恢复窗口配置(布局)

C-x w rwindow-configuration-to-register, C-x w r RET register,把当前窗口配置保存到register中,register是用一个字符表示;

C-x r j:jump-to-register,C-x r j RET register;

 用例:1. C-x w r RET a,保存当前配置到 a;2. C-x 1 RET,最大话当前窗口;3. C-x w r RET b;4. C-x r j RET b;5. C-x r j RET a,回到先前的窗口配置。


文本跳转

C-a:到行首

C-e:到行末

C-HOME键,M-<:文件(缓冲区)开头
C-END键,M->:文件末尾

G:view-goto-line n,跳转到第n行,按下g,先跳转到文本开头,不同模式G可能保定到不同命令;



M-b:上一单词

M-f:下一单词

M-a:跳到上一句

M-e:跳到下一句

M-{:跳到上一段

M-}:跳到下一段

PgUp,M-v:上一屏

PgDn,C-v:下一屏


M-x goto-line n RETURN:跳转到指定行


C-l : 以循环的方式,把当前行移动到窗口顶、中间、底部;

C-u n C-l: 把当前行移动到离窗口顶部 n 行;


C-up:backward-paragraph,向上跳转一个段落;up 是向上箭头;

C-down:和C-up相反;


跳转半页,scroll half page

;; scroll half page
(defun window-half-height ()
  (max 1 (/ (1- (window-height (selected-window))) 2)))

(defun scroll-down-half ()
  (interactive)
  (scroll-up (window-half-height)))

(defun scroll-up-half ()         
  (interactive)                    
  (scroll-down (window-half-height)))

(global-set-key (kbd "M-<up>") 'scroll-up-half)
(global-set-key (kbd "M-<down>") 'scroll-down-half)

参考:http://www.emacswiki.org/emacs/HalfScrolling



括号跳转

C-M-n:向前,跳转到匹配的括号之后一个字符;

C-M-p:向后,需要令光标处于括号之后一个字符;

上面两个命令可以用于圆括号,花括号

参考:http://emacswiki.org/emacs/ParenthesisMatching#toc3



显示行号

global-linum-mode: 轮流设置global-linum-mode为nil或者t,用于控制行号的显示(全局控制);

linum-mode: 控制当前文本;


文本编辑

M-w:kill-region-save,复制

C-w:kill-region,剪切

C-y:粘贴(前一次kill的内容)

M-y:粘贴kill-ring中的某次删除的内容;

用例:M-y之前需要先C-y,然后可以多次使用 M-y,依次选择以前kill的内容,找到需要粘帖的内容即可;多次M-y以后,选择的内容会循环出现,所以这是一个 kill ring;



删除

        <Delback>为 backspace 键:

        <Delback>    删除光标前的一个字符
        C-d          删除光标后的一个字符

        M-<Delback>  移除光标前的一个词
        M-d          移除光标后的一个词

        C-k          移除从光标到“行尾”间的字符
        M-k          移除从光标到“句尾”间的字符


替换:

M - %启动查找替换,输入要被替换的词,回车,然后输入要替换的词,再回车。

被替换的词会高亮起来,这时,输入y替换并跳到下一个,输入n忽略并跳到下一个,输入q结束,输入!替换剩下的全部。

一些常用的选项:

  C - g 中断查找替换过程。

  ^ 返回上一个替换点,按y继续下一个,如果不想替换上一个的话,用^返回到上一个,然后按 C - r 进入编辑,修改完后按C - M - c退出继续下一个。

  C - l 使当前匹配显示在文档中间。

  C - r 进入修改。


标记

C-空格:set-mark-command,开始标记区域

C-x C-x:exchange-point-and-mark,标记的开始点和结束点之间跳转

用 C-g 取消标记 


缓冲区

C-x k:kill当前缓冲区

C-x C-s:保存当前缓冲区

C-x s:找出当前已修改但未保存的缓冲区,依次询问是否保存

C-x C-w:另存为...

C-x s:保存所有缓冲去,save-some-buffers

ECS C-x h:全选,mark-whole-buffer


C-x C-b:list-buffers,列出所有编辑缓冲区清单

* - 已经修改  % - 只读

C-x b:switch-to-buffer

配置 C-TAB和C-S-TAB 切换缓冲区:

默认C-x <left>/<right>对应previous-buffer/next-buffer;

;; Ctrl-TAB Scroll Buffer
(global-set-key (kbd "C-<tab>") 'next-buffer)

;; 在emacs中直接输入C-S-TAB,显示C-S-iso-lefttab,加上[]即可用于设置命令

;(global-set-key [C-S-iso-lefttab] 'previous-buffer) ;此命令等同于下面的命令,都可用
(global-set-key (kbd "C-S-<iso-lefttab>") 'previous-buffer)

C-s:搜索当前缓冲区

M-b C-s C-w:搜索当前光标下的单词,M-b 回到单词开头,C-w 复制光标下到单词末尾到搜索缓冲区;

参考:Search At Poin

重新加载(reload)文件:revert-buffer, find-alternate-file(C-x C-v) 参考:http://superuser.com/questions/208488/how-do-i-re-open-a-file-in-emacs


撤销

C-g:To quit a partially entered command

C-x u,C-/ :撤销前一个命令


用户自定义

custom-set-variables:

customize-option:

customize-variable: 自定义某些变量

customize-group: 自定义选项和变量是分组的,直接进入该分组,如:find-file


命令重复

C-u n: 重复执行n次,输入完n后,后面可以按命令快捷键或者命令;



shell

M-x shell:打开shell

M-x ansi-term:以ansi-term终端模式,运行制定shell,支持颜色显示,emacs中的快捷键需要加上C-c

C-c C-c 类似unix里的C-c(停止正在运行的程序)

C-d 删除光标后一个字符

C-c C-d 发送EOF

C-c C-z 挂起程序(unix下的C-z)

M-x eshell:好用,快捷键有效,不需要加C-c前缀,支持颜色

M-p 显示前一条命令 

M-n 显示后一条命令


M-! cmd RET:执行单条shell命令,shell命令输出会插入到当前buffer;

M-| cmd RET:执行单条shell命令,shell命令输出显示在命令输入的minibuffer中,这个输出不会干扰当期buffer;


选择文件字符编码 coding system

C-x RET c :universal-coding-system-argument ,一般可选择:utf-8, utf-8-unix, utf-8-dos, utf-8-mac, gb18030*, gb2312*, gbk*等;


Keyboard Macro 宏

宏用于记录一组键盘操作,用例如下:

1. C-x ( :kmacro-start-macro,开始记录宏;

2. 键盘操作,比如注释某一行:C-a --> ; --> C-n;

3. C-x ) :kmacro-end-macro,结束记录宏;

4. C-u 10 C-x e:注释下面的10行;

参考:keyboard macros


编译和调试

compile:提示要求输入的编译命令,比如:g++ -o test test.cpp

gdb:提示输入调试命令,比如:gdb --annotate=3 test (--annotate=3必须有,如果没有,无法在emacs中执行正常的gdb的命令)

--annotate选项是GUI程序和GDB交互的接口,参考:GDB Annotations

参考:Using Emacs for Programming

Debug with Emacs

Emacs mode for GDE:Emacs中gdb的GUI界面操作

gdb-many-window:会出现break-points,stack frame,locals多个提供调试信息的窗口;


Emacs Lisp 编辑

C-j:LINEFEED,插入下一行;

ESC C-p:调整光标后面 lisp 代码格式;

ESC TAB:自动补全函数或者变量,如果有多个匹配,会弹出选择窗口;

ESC ; :添加注释符号:在代码行,根据comment-column,添加一个分号作为注释开头;在空白行,智能缩进,并以两个分号作注释开头;

ESC j:下一行,继续注释;

ESC C-x:如果当前光标处于某个函数中,令 lisp 解释器加载改函数,以后其他函数就可以调用并执行该函数了;

ESC : :eval-expression,执行在mini-buffer中输入的一个 lisp 表达式,mini-buffer中可以通过ESC TAB补全,而不是用TAB;

C-x C-e:eval-last-sexp,需要将光标至于需要执行的语句之后,如下图;


emacs-lisp-mode:进入 emacs lisp 模式,后缀为.emacs或者.el的文件;

lisp-mode:进入lisp模式,后缀为.l或者.lisp的文件;

lisp-interaction-mode:进入 lisp 交互模式,此时 C-j 绑定为 eval-print-last-sexp,不在是换行(LINEFEED)操作了;

    参考:Learning GNU Emacs, Chapter 12, Lisp Mode


打开#include <头文件.h>

ffap.el 包:

find-file-at-point / ffap:emacs内置函数,属于ffap.el;打开光标说在位置的文件,也可以打开URL;

相关参数可以通过,M-x customize-group RET ffap 来查看;


find-file.el 包:

自定义系统头文件路劲:M-x customize-variable RET ff-search-directories (如果:没有这时没找到这个变量,可以通过 M-x customize-group ff 找到这个变量,之后就可按照customize-variable来定制了,似乎这里有一个缓存加载问题??)

C-h v 查询 ff-search-directories :


ff-find-other-file:属于find-file.el软件包,如果光标在#include行,打开相应的头文件;如果光标在其他行:1)如果是.h文件,则打开对应的.c文件;2)如果是.c文件,则打开.h文件; 头文件和源文件的对应规则根据 ff-other-file-alist,不一定是.h和.c,ff-other-file-alist的值就是cc-other-file-alist,修改方法如下:

(setq cc-other-file-alist (
 ("\\.c\\'"
  (".h"))
 ("\\.c\\+\\+\\'"
  (".h++" ".hh" ".h")) ;.c++ --> .h++, .hh, .h
 ("\\.h\\+\\+\\'"
  (".c++"))
 ("\\.cpp\\'"
  (".hpp" ".hh" ".h"))
 ...
)




好用的命令列表链接:

Wiki of ArchLinux

Emacs Quick Reference

A Guide Tour of Emacs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值