【 XBATU . COM 】    【 MOZICHINA . COM 】    【 2858999 . COM 】


 

Emacs常用命令及使用技巧

webmaster@李松涛 提交于 周一, 01/18/2016 - 21:58

作者:【webmaster

 


Emacs
Emacs常用命令及使用技巧:
[符号]
--------------------------------------
C-     意思是按住 Ctrol 键
M-                    意指 Meta 键 (键盘上若无Meta 键,则可以ALT 或 ESC 键来取而代之)
DEL                   意指退格键 (不是 删除(Delete) key)
RET                   意指回车键
SPC                   意指空格键
ESC                   意指Escape键
TAB                   意指Tab键

像 "C-M-" (or "M-C") 这样连在一起的意味着同时按住 Control 和 Meta 键不放.
  
  
  
  
[进入Emacs] 
----------------------------------------
emacs                 要进入GNU Emacs,只需键入它的名字         
C-z                   挂起Emacs:                         
C-x C-c               永久离开Emacs                       
  
  


[用方向键]
---------------------------------------

        上一行 C-p (Prev line)
                .
                .
                .                  
向左移 C-b .... 。.... 向右移 C-f (Forward character)
(Backward )   .
                .
                .
        下一行 C-n (Next line)



[文件]
----------------------------------------
C-x C-f                读取文件到Emacs 
C-x r                  只读的方式打开一个文件
C-x C-q                清除一个窗口的只读属性                   
C-x C-s                保存文件到磁盘         
C-x s                  保存所有文件                         
C-x i                  插入其它文件的内容到当前缓冲             
C-x C-v                用将要读取的文件替换当前文件
C-x C-w                将当前缓冲写入指定的文件                 
C-x C-q                Version control checkin/checkout               




[错误恢复]
---------------------------------------
C-g                    取消当前要执行的命令                   
M-x recover-file       恢复系统崩溃后丢失的文件                 
C-x u或C-_             撤销更新                           
M-x revert-buffer      使缓冲回复到初始内容                   
C-l                    Redraw garbaged screen                 




[增量查找]
---------------------------------------
C-s                    向前查找                           
C-r                    向后查找                           
C-M-s                  规则表达式查找                       
C-M-r                  反向规则表达式查找                     
M-p                    选择前一个查找字符串                   
M-n                    选择下一个查找字符串                   
RET                    退出增量查找                         
DEL(Backspace)         取消上一个字符的作用                   
C-g                    退出当前查找模式                     
                       可重复使用C-s和C-r来改变查找方向
                       

[替换]
---------------------------------------
M-%                    交互式地替换一个文本串                 
M-x replace-regexp     交互式地替换一个规则表达式               
SPE                    替换当前的并移动到下一处                 
,                      替换当前的但不移动到下一处               
L(Backspace)           不替换当前的并移动到下一处               
!                      替换所有剩下的符合条件的文本             
RET                    退出替换模式                         
C-r                    进入递归的编辑模式                     
C-M-c                  退出递归的编辑模式                     




[光标移动]
---------------------------------------
C-f                    向前一个字符                         
C-b                    向后一个字符                         
M-f                    向前一个字                         
M-b                    向后一个字                         
C-p                    向上一行                           
C-n                    向下一行                           
C-a                    到行首                             
C-e                    到行尾                             
M-a                    到句首                             
M-e                    到句尾                             
M-{                    到段首                             
M-}                    到段尾                             
C-x [                  到页首                             
C-x ]                  到页尾                             
C-M-f                  到表达式首部                         
C-M-b                  到表达式尾部
M-<                    到缓冲首部                         
M->                    到缓冲尾部                         
C-v                    滚动到下一屏                         
M-v                    滚动到上一屏                         
C-x <                  滚动到右边一屏(内容向左移动)             
C-x >                  滚动到左边一屏(内容向右移动)             
C-u C-l                滚动当前行到屏幕中央

C-M-n                  移到结尾的)、}或]
C-M-p                  移到开始的)、}或]
C-M-u                  向上移到父结构开始
C-M-d                  向下移到父结构开始



[复制、粘贴、剪切、删除]
-----------------------------
C-d                    向前delete字符                       
DEL(Backspace)         向后delete字符                       
M-d                    向前delete到字首                     
M-DEL(Backspace)       向后delete到字尾                     
M-0 C-k                向前delete到行首                     
C-k                    向后delete到行尾                     
C-x DEL(Backspace)     向前delete到句首                     
M-k                    向后delete到句尾                     
M-- C-M-k              向前delete到表达式首部                 
C-M-k                  向后delete到表达式尾部                 
C-w                    Kill区域                           
M-w                    拷贝区域到Kill Ring                     
M-z <char>             Kill到下一个给定字符出现的位置             
C-y                    拉回(yank)上次kill的内容               
M-y                    用更早kill的内容取代拉回的上次kill的内容     



[标记Marking]
-----------------------------
C-SPC或C-@             标记当前位置                         
C-x C-x                以字符为单位使用移动命令动态标记区域         
M-@                    以字为单位使用移动命令动态标记区域         
M-h                    标记一段                           
C-x C-p                标记一页                           
C-M-@                  标记一个表达式                       
C-M-h                  标记一个函数                         
C-x h                  标记整个缓冲区                       


[寄存器]
-----------------------------
C-x r s                存储区域到寄存器                     
C-x r i                插入矩形内容到缓冲                     
C-x r SPC <num>        存储光标位置到寄存器                   
 C-x r j <num>         跳跃到寄存器中存储的光标位置            



[矩形]
-----------------------------
C-x r r                拷贝一个矩形到寄存器                   
C-x r k                Kill矩形                           
C-x r y                拉回矩形                           
C-x r o                打开一个矩形, 将文本移动至右边             
C-x r c                清空矩形                           
C-x r t                为矩形中每一行加上一个字符串前缀
C-x r i r              从r缓冲区内插入一个矩形           






[标记Tags]
-----------------------------
M-.                    查找标记                           
C-u M-.                查找标记下一次出现的位置                 
M-x visit-tags-table   指定一个新的标记文件                   
M-x tags-search        Regexp search on all files in tabs table           
M-x tags-query-replace 在所有文件中执行查询-替换               
M-,                    继续进行上一次标记查找或查询-替换           





[窗口与缓冲]
-----------------------------
C-x 1                  删除所有其它窗口

C-x 5 2                     
C-x 2                  上下分割当前窗口
                     
C-x 3                  左右分割当前窗口
 
C-x 5 0                    
C-x 0                  删除当前窗口   
                      
C-M-v                  滚动其它窗口                         
C-x o                  切换光标到另一个窗口                   
C-x 4 b C-x 5 b        选择另一个窗口中的缓冲

C-x 5 C-o                 
C-x 4 C-o              显示另一个窗口中的缓冲

C-x 5 f                
C-x 4 f                在另一窗口中查找并打开文件               

C-x 5 r
C-x 4 r                在另一窗口中以只读方式打开文件             

C-x 5 d
C-x 4 d                在另一窗口中运行dired命令  

C-x 5 .             
C-x 4 .                在另一窗口中查找tag
                   
C-x ^                  增加窗口高度                         
C-x {                  减小窗口宽度                         
C-x }                  增加窗口宽度                         


C-x b                  选择另一个缓冲                       
C-x C-b                列出所有的缓冲                       
C-x k                  Kill一个缓冲                         


[分栏编辑]

C-x 6                 2C-command
C-x 6 s                  2C-split
C-x 6 b    2             C-associate-buffer
C-x 6 2    2             C-two-columns



[格式]
-----------------------------
TAB                    缩进当前行(与模式相关)                 
C-M-\                  缩进区域(与模式相关)                
C-M-q                  缩进表达式(与模式相关)                 
C-x TAB                Indent region rigidly arg. Columns             
C-o                    在光标后插入一个新的行                 
C-M-o                  静态地将一行下移                     
C-x C-o                删除光标附近的空行(留下一行)             
M-^                    与上一行合并成一行                     
M-                     删除光标附近的所有空格                 
M-SPC                  删除光标附近的空格(留下一格)             
M-q                    Fill paragraph                         
C-x f                  Set fill column                         
C-x .                  设置每一行开始的前缀                   
M-g                    设置字体    

 

Emacs远程编辑文件的方法: C-x C-f RET /ftp:user@host:/path/file,ftp也可以换成其他emacs支持的协议,默认为scp(基于ssh登录)。

 

基本命令

C-x C-c : 退出Emacs

C-x C-f : 打开一个文件,如果文件不存在,则创建一个文件

C-g : 取消未完成的命令

编辑

C-z (redefined): Undo;原来C-z是挂起Emacs(然后用fg命令调出);C-x u 是默认的命令; 移动一下光标,再C-z就可以redo

M-d : 删除光标后的词语


移动光标

C-v : 向前翻页

M-v : 向后翻页

M-r : 将光标移动到屏幕中间那行

C-a : 移到行首

M-a : 移到句首,从行首到句首之间可能有空格

C-e : 移到行尾

M-e : 移到句尾

M-{ : 向上移动一段

M-} : 向下移动一段

C-right : 向前移动一个单词

C-left : 向后移动一个单词

C-up : 向前移动一段

C-down : 向后移动一段

M-< : 移到整个文本开头

M-> : 移到整个文本末尾


C-u 数字 命令 : 执行多次(数字表示次数)该命令;“M-数字 命令” 也可以

注意:

emacs默认安装的情况下,在不同的软、硬件系统环境中,M键 多数时候 代表Alt键,但是有的时候却代表的是 ESC键。

这个命令规则很有用,也很好用,下面列几个小练习:

M/C-u 100 * : 自动连续输入100个*

M/C-u 100 Del / Backspace: 自动执行100次 前删 / 后删


M-x goto-line : 移动到某一行

C-l : 重绘屏幕,效果就是当前编辑行移动窗口中央

Buffer 相关

C-x k : 关闭当前buffer

C-x b : 切换到前一个编辑的buffer

C-x C-b : 列出当前所有buffer

C-x C-s : 保存当前buffer

C-x s : 保存所有未保存的buffer,会提示你是否需要保存

C-x C-w : 文件另存为

拷贝与粘贴

M-space (redefined): 设置mark; C-@ 是默认命令

C-w (redefined) : 剪切一块区域;如果没有设置mark,则是剪切一行

M-w (redefined) : 拷贝一块区域;如果没有设置mark, 则是拷贝一行

C-k : 从当前位置剪切到行尾

C-y : 粘贴

M-y : 用C-y拉回最近被除去的文本后,换成 M-y可以拉回以前被除去的文本。键入多次的M-y可以拉回更早以前被除去的文本。

C-x r k : 执行矩形区域的剪切

C-x r y : 执行矩形区域的粘贴

窗口操作

C-x 0 : 关闭当前窗口

C-x 1 : 将当前窗口最大化

C-x 2 : 垂直分割窗口

C-x 3 : 水平分割窗口

M-o (redefined) : 在窗口之间切换; C-x o 是默认命令

C-x 5 1/2/3/0 : 对frame类似的操作

C-x < : 窗口内容右卷

C-x > : 窗口内容左卷(这两个命令在垂直分割窗口后比较有用)

(C-u) C-x ^ : 加高当前窗口,如果有C-u,则每次加高4行

(C-u) C-x } : 加宽当前窗口

(C-u) C-x { : 压窄当前窗口

ESC C-v : 在其它窗口进行卷屏操作

搜索和替换

C-s : 向前搜索(增量式搜索);连续C-s,跳到下一个搜索到的目标

C-s RET : 普通搜索

C-r : 向前搜索

C-s RET C-w : 按单词查询

M-% : 查询替换,也就是替换前会询问一下

M-x replace-string : 普通替换

Tags

M-! etags .c .h : 创建TAGS文件

M-. : 跳到tag所在位置

M-x list-tags : 列出tags

Bookmark

C-x r m : 设置书签bookmark

C-x r b : 跳到bookmark处

帮助

C-h ? : 查看帮助信息

C-h f : 查看一个函数

C-h v : 查看一个变量

C-h k : 查看一个键绑定 (C-h c 也是查看键绑定,但是信息较简略)

C-h C-f : 查看一个函数的Info,非常有用

C-h i : 看Info

其它

C-M-\ : 对选中区域,按照某种格式(比如C程序)进行格式化

C-x h : 全部选中

M-! : 执行外部shell命令

M-x shell : 模拟shell的buffer

M-x term : 模拟terminal, C-c k 关闭terminal

C-x C-q : 修改buffer的只读属性

 

注意:以下命令中标注的按键,大写的C代表Control,在键盘上通常是Ctrl键,而M代表Meta,在键盘上通常是Alt键,S则代表Shift,在键盘上通常是Shift键,也就是

C         Control

M        Alt

S          Shift

这三个键在Emacs里通常作为组合键的前导按键使用,也就是说,执行一条命令前可能需要按住这个键不放,比如搜索命令是C-s,要执行这个命令首先要按住Ctrl键不放,再按下字母s键;而打开文件命令是C-x C-f,要打开文件就必须按下Ctrl键不放,依次按下x和f(当然也可以按下Ctrl不放再按下x,放开,再按下Ctrl不放再按f);有的命令组合键和非组合键都要用到,比如保存所有文件是C-x s,需要按下Ctrl不放的时候按下x,然后放开所有按键,再按下s;也有两个组合按键一起使用的,比如使用正则表达式进行增量搜索的快捷键是C-S-%,这就要求你同时按下Ctrl和Alt不放开,再按下s。

 

 

启动Emacs

在有图形界面的环境下只需要在终端输入Emacs按回车或者找到启动emacs程序的图标打开就可以了。

在没有图形界面的环境或者伪终端下需要使用字符界面的Emacs可以输入emacs -nw,也就是增加一个-nw参数。

挂起Emacs            C-z

挂起在图形界面下通常是把Emacs窗口最小化的意思,而在字符界面下则是把Emacs挂起到后台后回到终端,比如在GNU/Linux字符终端下按C-z会回到shell,使用jobs命令可以列出你挂起的所有任务,使用fg可以返回以最后一次挂起的任务,fg %num可以选择回到任意一个被挂起的任务。

退出Emacs            C-x C-z

如果没有未保存的文件,那么这条命令会直接退出Emacs程序,否则它会提示是否保存文件。

 

 

文件

 

打开文件    C-x C-f

保存文件    C-x C-s

保存所有文件    C-x s

插入其他文件到当前缓冲区    C-x i

在当前缓冲区打开另一个文件    C-x C-v

另存为文件    C-x C-w

 

获取帮助

打开快速指南    C-h t

获取按键帮助    C-h k

获取函数帮助    C-h f

打开Emacs帮助手册    C-h r

 

错误恢复

 

放弃当前命令或终止正在执行的操作    C-g

恢复因系统崩溃而丢失的文件    M-x recover-file

撤销上一次操作    C-x u或C-_

还原缓冲区的内容    M-x revert-buffer

刷新屏幕    C-l

 

增量搜索

正向搜索    C-s

反向搜索    C-r

使用正则表达式正向搜索    C-M-s

使用正则表达式反向搜索    C-M-r

选择上一个搜索结果    M-p

选择下一个搜索结果    M-n

退出搜索并停留在当前搜索到的位置    RET

中止当前搜索    C-g

 

 

标记

设置标记    C-@

在当前光标位置和标记处跳转    C-x C-x

设置单词标记    M-@

标记段    M-h

标记页    C-x C-p

标记表达式    C-M-@

标记函数    C-M-h

标记整个缓冲区    C-x h

 

 

查询替换

 

交互替换    M-%

使用正则表达式    M-x query-replace-regexp

在查询替换模式下:

 

替换当前项并跳转到下一项    SPC

替换当前项不跳转    ,

不替换当前项并跳转到下一项    DEL

替换全部剩下的查询结果    !

回到上一个匹配结果    ^

退出查询替换    RET

进入递归编辑(C-M-c退出)    C-r

 

 

格式化

缩进当前行

TAB

缩进区域

C-M-/

缩进表达式

C-M-q

增加缩进

C-x TAB

在当前位置后增加新行

C-o

当前位置到行尾的内容下移

C-M-o

删除当前位置附近的空行

C-x C-o

将当前行连接到上一行

M-^

删除光标附近的空白

M-/

 

大小写转换

 

单词转换为大写

M-u

单词转换为小写

M-l

单词转换为首字母大写

M-c

区域转换为大写

C-x C-u

区域转换为小写

C-x C-l

 

 

微型缓冲区

 

尽可能多地补全

TAB

补全至多一个单词

SPC

补全并执行

RET

显示可能的补全项

?

切换到上一个输入

M-p

切换到下一个输入

M-p

用正则表达式往后搜索历史记录

M-r

用正则表达式往前搜索历史记录

M-s

终止命令

C-g

 

 

缓冲区

 

选择另一个缓冲区

C-x b

列出所有缓冲区

C-x C-b

关闭一个缓冲区

C-x k

 

交换

 

交换字符

C-t

交换单词

M-t

交换行

C-x C-t

交换表达式

C-M-t

 

拼写检查

 

检查当前单词拼写

M-$

检查区域内所有单词

M-x ispell-region

检查整个缓冲区

M-x ispell-buffer

 

 

标签

 

查找标签

M-.

查找下一个标签

C-u M-.

指定一个新标签

M-x visit-tags-table

在标签表内的所有文件用正则表达式搜索

M-x tags-search

在所有文件内运行查询替换

M-x tags-query-replace

继续最后一个标签搜索或查询替换

M-,

 

 

Shells

 

执行一个外部命令

M-!


使用一个外部命令处理当前区域

C-u M-!

这个命令,比较有趣,可以在当前区域插入某个外部命令的执行结果,来个小例子:

当你输入命令:

C-u M-! date 

将在当前区域自动插入系统当前的日期、时间信息,类似下面的内容:

2017年 03月 02日 星期四 08:59:33 CST


启动一个shell

M-x shell

 

 

矩形区域

 

复制矩形区域到寄存器

C-x r r

删除矩形区域

C-x r k

拉回矩形区域内容

C-x r y

插入一个矩形区域

C-x r o

清空矩形区域

C-x r c

矩形区域内每行内容替换为字符串

C-x r t

 

 

缩写

 

增加全局缩写

C-x a g

增加模式缩写

C-x a l

给这个缩写增加全局扩展

C-x a i g

给这个缩写增加模式扩展

C-x a i l

扩展缩写

C-x a e

动态扩展上一个单词

M-/

 

国际化字符集

 

指定语言

M-x set-language-environment

显示所有输入法

M-x list-input-methods

开启或禁用输入法

C-/

设置命令编码系统

C-x RET c

显示所有编码系统

M-x list-coding-systems

选择编码系统

M-x prefer-coding-system

 

 

信息

 

进入信息文档阅读器

C-h i

在信息文档中查找指定的函数或变量

C-h C-i

在节点中移动

 

  往前滚动

SPC

  反向滚动

DEL

  节点开始处

.

节点间移动

 

  下一个节点

n

  上一个节点

p

  上一层

u

  通过名字选择菜单项

m

  选择第n个菜单项

n

  填转到节点

f

  返回上一次所在的节点

l

  返回到目录节点

d

  通过名字跳转到任意节点

g

其他:

 

  进入快速指南

h

  退出信息文档

q

  用正则表达式搜索节点

M-s

 

 

 

寄存器

 

保存区域到寄存器

C-x r s

插入寄存器内容到缓冲区

C-x r i

保存当前位置到寄存器

C-x r SPC

跳转到保存在寄存器中的位置

C-x r j

 

 

 

键盘宏

 

开始记录键盘宏

C-x (

结束记录键盘宏

C-x )

执行最后一个宏

C-x e

追加内容到最后一个键盘宏

C-u C-x

给最后一个键盘宏命名

M-x name-last-kbd-macro

插入键盘宏的Lisp定义到当前缓冲区

M-x insert-kbd-macro

 


 

Emacs 如何在英文版 Linux 系统中使用系统的中文输入法:

以本人使用的英文版Ubuntu 14.04为例,在Emacs环境中无法调出系统的搜狗中文输入法进行中文输入,多次折腾后,总结解决方法:

首先查看是否已经安装了zh_CN.utf8:

locale -a | grep -i zh_cn.utf8 ,该命令行输出为空,表示没有安装。

如果没有安装:

cd /usr/share/locales

./install-language-pack zh_CN

 

方法 1、

在$HOME/.bashrc

中添加一行:

alias emacs="export LC_CTYPE=zh_CN.UTF-8;emacs";

这样可以保证只要是在terminal中打开的Emacs都可以输入中文。

方法 2、

如果想在任何方式打开的Emacs中都能输入中文的话可以在/etc/environment 文件中添加:

LC_CTYPE="zh_CN.UFT-8"

修改完毕以后,重启系统后在terminal方式或其他方式打开的Emacs里都可以输入中文。


 

 


 

审编:【webmaster】          校对:【webmaster】          关于:【webmaster】 

原创:【赛因拔都:XBATU.COM】          

标签


【 XBATU . COM 】    【 MOZICHINA . COM 】    【 2858999 . COM 】