Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2225|回复: 3
打印 上一主题 下一主题

Emacs 基本使用

[复制链接]

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
跳转到指定楼层
楼主
发表于 2017-9-11 17:13:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 firemail 于 2017-9-11 17:50 编辑

http://www.cnblogs.com/robertzml/archive/2009/09/10/1564108.html




上面依次是标题栏、菜单栏、工具栏,中间一大块就是编辑文本的地方,下面两行是mode line 和echo area。

echo area是你输入命令和显示消息的地方。
      在mode line中第一个字符表示字符集,c代表chinese-gbk,后面那个 \ 符号表示换行类型,\是指DOS的CRLF换行,另外还有Unix的LF换行和Mac的CR换行。

(
回车  CR  '\r'  13 0x0D
换行  LF  '\n'  10  0x0A


Dos和 window   回车+换行 CR/LF     0d 0a
MAC OS        回车  CR                      0d
Unix/linux   换行 LF                            0a
在不同平台间使用FTP软件传送文件时, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化. 如果你不想ftp修改原文件, 可以使用bin模式(二进制模式)传输文本.)

然后一个字符,表示打开的文件是否可写(先称为文件便于理解,实际上是buffer),%表示只读,- 和 * 表示可写。再一个字符表示文件是否已写,% 或 - 表示还没动,*表示已经更改。这两个字符组合起来有四个状态。
符号
表示
%%
只读,未更改
--
可写,未更改
**
可写,已更改
%*
只读,已更改
     再后面一个 - 表示路径,后面黑体的 *GNU Emacs* 表示buffer的名称。后面的All表示光标的位置,当文件在一页就能显示完的时,这里是All,此外还有Top, Bot,以及当前位置百分比。L5表示第五行。Fundamental 是模式名,模式种类很多,这个以后介绍。
     如果是第一次使用,点击Emacs Tutorial,里面也有Emacs的一些基本介绍,而且是中文。


二、Emacs按键
     Vim 把控制和编辑分成了两个模式,单独操作,互不影响。而Emacs是同时进行编辑和控制,只不过控制命令需要使用控制键。
     Emacs的控制键就三个Control,Shift和 Meta,Control 和 Shift 键盘上都有,Meta 在美式键盘中就是Alt,在苹果键盘上是那个很花的四个圈的键,如果键盘上没有Alt (这个要某些欧洲人才会遇到)可以使用Esc 代替,另外Esc 不想Alt 通常当组合键用,它要单独按一下,再按另外的。
     以后控制命令就这样表示:   
     C-f       Ctrl+f
     C-M-f   Ctrl+Alt+f
     C-_    Ctrl+Shift+-
     Emacs中,这些组合键其实是一些函数的快捷方式,比如C-n 是next-line的快捷方式。我们除了使用组合键意外,还可以直接调用函数。
按下M-x,然后输入函数名就可以调用函数了。



三、进入退出Emacs
   进入前面已经说了,现在说怎么退出。
  最直接的办法,点右上角的叉,当然这个没什么技术含量。
      比较文明的方法,C-x C-c ,如果当前文件已经修改会问你是否保存。
  野蛮点的方法,调用函数kill-emacs,即M-x kill-emacs,直接退出,不管是否修改。
  不过直接退出后,Emacs会在相同目录下保留一个以#号开头结尾的相同文件名文件,下次启动可以使用M-x recover-file来恢复。如果是多次保存后,还会有个以~结尾的文件,保存了上次信息。

怎么移动你的光标。可能有人会说,这上下左右键不是很好用吗,还用你来讲。呶,Emacs的强大在于你能够只使用键盘左边那堆键来完成任何事情(不包括顶上的ESC和Function),这也是Emacs的设计宗旨。
  为了试验这些按键,大家在进入Emacs时选择页面中间的Emacs Tutorial,这里面可以随便乱按不用担心出什么岔子。


一、基本导航
  看下面这张图片:

  
  可以这么记,p-previous,n-next,b-backward,f-forward。这里所说的字符对于E文,就是一个字母,而中文是一个汉字,其实Emacs对中文支持还是很厚道的,后面慢慢可以看出来。不过在这儿我个人感觉这个光标移动没有Vim方便,别人就HJKL,一个键就能动了,这需要两个,Ctrl 有时还觉得按着很别扭,不太和谐呀。
  在按C-n 时,如果越过了页尾,不像一般Windows编辑器是往下滚一行,而是往下滚半页,当前光标会置于页面中间。C-p 也是一样的。
  另外两个使用较多的是C-v 往下翻页,M-v 往上翻页。呃,还有一个C-l 就是把当前行提到页面中间,感觉Emacs对页面中似乎情有独钟啊。



二、中级导航
  按字符移的上节说了,然后说按单词移动:
  M-f 向前移动一个单词,Emacs理解的中文单词是两个标点符号之间的东西,所以中文就是移到下一个标点符号的位置。往回是M-b ,向后移动一个单词。
  C-a 移动到行首,C-e 移动到行尾。
  M-a 移动到句首,M-e 移动到句尾,在中文中一般就是跑到句号的位置,这里我不得不说一下,现在很多年轻人写文章有一逗到底的习惯,就只在文章最后加个句号,如果用Emacs来看你的文章,一个M-e 啥都不用干了。作为一个有一定文学素养的人,在此我严厉反对这种写文章的作风,不和谐。
  M-} 移动到下一段M-{ 移动到上一段。
  还有两个跑的更快的导航,M-< 移到文档首,这里要注意是小于符号<,不是逗号, ,所以我们是按Alt + Shift + ,  切记。移到文档尾是M->
  C-x [ 和 C-x ] ,分别是往上一页和往下一页。这里页是由分页符控制的,在Emacs Tutorial 中是没有分页符的,所有这两个键会跑到文档头和文档尾去。
  例图:

  阴影处是当前光标的位置,其它箭头所指是按相应键后光标的位置。


三。高级导航
  可以这么来看基本导航是普通人用的,中级导航是高手采用的,高级导航是砖家、叫兽用的。
  M-r 移动到页面中间行首位置,holly shit,又是页面中间,真XX阴魂不散。
  M-x goto-char (n),这个比较复杂,先按M-x,然后空格输goto-char回车,另外Emacs有Tab键补全功能,大家可以试试,如果有多个选项会有提示,最后输入一个整数。这个东西会移动到从头数第n个字符的位置,我估计不会有人变态到能记住每个字是第几个字符。
  M-g M-g [n],按两次M-g,不用回车,提示输入一个数字,移动到指定行n,两个M-g,也可以输M-g g
  还有一个比较罕见的,C-x C-n, 这个是设置当前列为目标列。这是什么意思呢,本来我们按C-n 和C-p 时,光标会往下或往上移一行,而列的位置就是当前光标列的位置,除非下一行列没那么多(就是字符没那么多),光标会到距当前列最近的列。而我们可以用这个组合键重新设一个目标列,这样在按C-n 和C-p 时,光标会跑到我们设的目标列上。如果你不幸按了,而且又不习惯,可以使用C-u C-x C-n 来取消目标列设置。补充一点,这两个命令都是禁用命令,是Emacs考虑大家多半不会用,而且比较怪的命令,所以通常就禁用了,你不小心调出时会给出提示问你是否需要继续。就像这个样子:

  大家按个空格稍微试下就行了。
  最后还有两个重复命令:
  M-nn是数字,意思是重复下个命令n次,比如M-3 C-f,就是向前移三个字符。
  C-u nn还是数字,也是重复下个命令n次。 如果省略n,就是4次。按两次C-u,就是重复16次。


小结:
按键
命令
作用
C-fforward-char向前一个字符
C-bbackward-char向后一个字符
C-pprevious-line上移一行
C-nnext-line下移一行
M-fforward-word向前一个单词
M-bbackward-word向后一个单词
C-abeginning-of-line移到行首
C-eend-of-line移到行尾
M-eforward-sentence移到句首
M-abackward-sentence移到句尾
M-}forward-paragraph下移一段
M-{backward-paragraph上移一段
C-vscroll-up下移一屏
M-vscroll-down上移一屏
C-x ]forward-page下移一页
C-x [backward-page上移一页
M-<beginning-of-buffer移到文档头
M->end-of-buffer移到文档尾
M-g g ngoto-line移到第n行
(none)goto-char移到第n个字符
C-lrecenter将当前位置放到页面中间(Emacs最喜欢的地方)
M-ndigit-argument重复下个命令n次
C-u nuniversal-argument重复下个命令n次,n默认为4

[size=13.0667px]注:这里命令这列就是按了M-x后输的东东。






回复

使用道具 举报

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
沙发
 楼主| 发表于 2017-9-12 14:15:29 | 只看该作者
1 启动speedbarspeedbar可以用来查看当前buffer的概况信息.调用它的方法是执行命令M-x speedbar


2 speedbar的通用命令命令说明
Q退出speedbar并杀掉frame
q退出speedbar并隐藏frame
g刷新
t是否追踪绑定的frame
p/n上/下移动,被绑定的frame的minibuffer中会显示指定项的信息
M-p /M-q同级之间上下移动,被绑定的frame的minibuffer中会显示指定项的信息
C-M-n / C-M-p快速跳转
C-x b切换被绑定frame的buffer
b临时切换speedbar到Qucik-buffer-mode
f切换speedbar到Qucik-file-mode
r切回speedbar到上一个模式
RET / e打开speedbar的指定项
+ / =展开speedbar的指定项
-收缩speedbar的指定项

3 speedbar的三种modespeedbar提供了三种显示模式:file-mode,buffer-mode和quick-buffer-mode. 可以通过鼠标右键弹出的菜单里选择"Displays->Files","Displays->Quick Buffers","Displays->Buffers"来切换不同的显示模式

3.1 File-mode
3.1.1 文件标识说明在文件的后面有时会有一些字母表示的标识,这些标识表示了文件的一些附加信息
  • * 星号表示该文件有版本控制功能
  • # 井号表示该源文件有最新的对应目标文件存在
  • ! 感叹号标识该源文件有过时的对应目标文件存在



3.1.2 如何显示隐藏文件?默认情况下speedbar不显示隐藏文件,要显示隐藏文件需要点击鼠标右键,在弹出的菜单中选择“Show-all-files”


3.1.3 操作命令说明
U跳转到上一级目录
I在被绑定的frame的minibuffer中显示当前文件的信息
B编译当前的Emacs Lisp文件
L加载当前的Emacs Lisp文件
C拷贝当前文件
R重命名当前文件
D删除当前文件
O删除当前文件的目标文件(object file)


3.2 buffer-mode命令说明
kkill当前buffer
rrevert当前buffer

3.3 qucik-buffer-mode
quick-buffer-mode跟buffer-mode类似,所不同之处在于在quick-buffer-mode下,对指定的buffer操作之后,speedbar会立刻返回前一个mode,所以可以将之理解为临时的buffer-mode

http://blog.csdn.net/lujun9972/article/details/46002869




回复 支持 反对

使用道具 举报

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
板凳
 楼主| 发表于 2017-9-12 14:17:05 | 只看该作者
emacs常用命令:新建,打开,保存文件,另存文件C-x C-f     按提示输入文件名,如果文件不存在则新建文件,如果文件存在则打开文件
C-x C-s    保存
C-x C-w    按提示输入文件名,另存为
M-x customize-variable 回车 make-backup-files 回车     关掉文件备份

回复 支持 反对

使用道具 举报

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
地板
 楼主| 发表于 2017-9-12 14:17:44 | 只看该作者
Window
    Emacs中的window是指在你的窗口管理器下面管理的窗口,在默认情况下只有一个窗口,你可以根据自己的喜好来对窗口进行分割,分割成多个窗口。试一下命令”C-x 2”,现在你的窗口被分割成上下两个了,当然也可以垂直分割窗口:”C-x 3”。恩,”C-x”经常和buffer,window,frame的操作相关,会经常用到的。
Frame
    Frame就是我们在使用Microsoft Windows或X Window等图形操作系统中的顶层窗口了。Frame的操作一般和命令”C-x 5”绑在一起,许多关于window的操作可以应用的frame上。
Buffer
     Buffer就是我们编辑的地方,它的依托体就是window,你输入的文字在window中被echo,而实际输入内容记录在当前编辑window显示的buffer中,这些内容只是在buffer中被记录,并没有写入到硬盘中。如果要保存输入的文字,则要使用”C-x C-s”来保存buffer中的内容。刚刚说到window只是buffer的依托体,一个buffer的内容可以在多个window中显示,恩,就像MFC中的document-view结构。呵呵,这样一想就可以很直观了。
Minibuffer
    Minibuffer是我们看到的在Frame下面的小条,恩,这是我们和Emacs交流的地方。命令通过这里输入,回显的消息也在这里显示。编辑minibuffer和一般的编辑buffer差不多,而且默认的设置中可以使用tab键补全,很方便。
关于tabbar和speedbar
    其实对于tabbar和speedbar的功能都不是用得特别好,只是会用一些简单的功能,但是我觉得还是很方便的功能,就先提出来。
    1、speedbar
    Speedbar是emacs的标准插件,通过命令”M-x speedbar”就可以调出speedbar,默认操作打开一个新的长条frame。Speedbar不仅是一个很方便的文件浏览窗口,而且能个诸如etags,semantic等tag工具结合,方便地显示文件中的tags。再使用”M-x speedbar”关闭,恩,当然关闭frame的方法都可以用来关闭它。
    具体的一些hacks还是要在后面的研究中慢慢补充,自己也不能很好用它。


2、tabbar
    Tabbar还是很眩的一个插件。下载tabbar插件,然后加载之。在王垠的笔记里有一段对tabbar的操作键定义:

(require 'tabbar)
(tabbar-mode)
(define-prefix-command 'lwindow-map)
(global-set-key (kbd "<M-up>") 'tabbar-backward-group)
(global-set-key (kbd "<M-down>") 'tabbar-forward-group)
(global-set-key (kbd "<M-left>") 'tabbar-backward)
(global-set-key (kbd "<M-right>") 'tabbar-forward)
    在原来的设置中使用super键来帮定实现tab的移动,但是在Windows下怎么都不灵,就设成了M前缀了。这样就可以使用这些快捷键在这些tabbar中移动了。我基本就使用这些功能,差不多也足够平时的使用了。
http://laokaddk.blog.51cto.com/368606/593613/


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-23 10:11 , Processed in 0.073780 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表