Antkillerfarm Hacking V7.0

Emacs

2014-12-24

emacs学习心得

emacs是大名鼎鼎的Richard Stallman的作品,我闻名已久。但作为早期一直在Windows操作系统下打拼的程序员,很少有机会用到emacs。用的最多的还是Notepad和UltraEdit。

后来,在STE工作期间,由于代码需要上传Linux服务器,那个服务器上的Vi又是个命令行程序,用起来很别扭。还好那上面有个GUI式的emacs,总算帮了大忙。但是emacs更深入的功能却没有研究,只是知道里面有个LISP语言的解释器而已。

现将我最近用的比较多的功能罗列如下:

M-x使用技巧:M-x下输入的命令过长的时候,可以输入开头的字符串,然后按TAB,emacs会显示所有满足输入前缀的命令。

复制、剪切: M-w、C-w,或者用M-x cua-mode切换到CUA模式,就可以用C-c和C-v来复制粘贴了

粘贴: C-y

搜索: C-s,如果要利用剪切板的内容来进行搜索的话,使用Esc-y

搜索下一个: 继续按C-s

向前搜索: C-r

正则式搜索和普通搜索的快捷键类似: C-M-s和C-M-r //在ubuntu里由于C-M-s和系统快捷键冲突,因此可以用Esc C-s的方式启动向前的正则式搜索。

替换: M-%

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

十六进制模式: M-x hexl-mode

十六进制模式下跳转到某个十六进制地址: M-g

十六进制模式退出: C-c C-c

多窗口的时候切换窗口: C-x o //”o”,not zero

关闭当前的窗口: C-x 0

只保留当前的窗口: C-x 1

新建一个上下式的窗口: C-x 2

新建一个左右式的窗口: C-x 3

退出emacs: C-x C-c

召唤菜单: M-`

打开shell: M-x shell //shell模式下,如果需要按C-c,终止程序的话,可以按两下C-c

关闭缓冲区: C-x k

比较两个已经打开的缓冲区: M-x ediff-buffers

比较两个文件夹: M-x edirs

缓冲区被外部程序改变之后,重新刷新缓冲区: M-x revert-buffer

Undo: C-x u

Redo: 用C-f中断Undo执行序列,然后再Undo,就可以Undo之前做的“Undo”操作,也就是Redo操作了。

打开文件: C-x C-f//这个命令不仅可用于打开文件,还可用于确定emacs默认的操作目录,.emacs配置文件就放在这个目录下,这一点对Windows用户来说十分重要。

空格变TAB: M-x tabify

在emacs中去除^M: M-x replace-string C-q C-m RET

选择整个缓冲区: C-x h

在windows下使用ediff: windows版的emacs没有自带diff工具,可以用cygwin中的diff代替之,具体的办法是将cygwin的bin文件夹加到PATH环境变量中。

高亮显示: C-x w h//后面需要跟正则表达式,如果是要全字匹配才高亮显示的话,可以用\的方式给出相应的正则表达式。

取消高亮显示: C-x w r

M-x list-matching-lines 或 M-x occur: 另开一个buffer列出当前buffer中所有匹配正则表达式的那些行。这个功能我找了好半天才查到,之前还以为只有UltraEdit里才有呢。。。

M-x find-grep-dired: 列出文件夹下所有匹配字符串的文件的名字。这个命令只能列出文件名,而不能列出在该文件中出现的匹配字符串的位置,有的时候仍然不太好用。

M-x rgrep: 这个命令可以解决上面的问题,列出匹配字符串在文件夹中所有出现的位置。

C代码相关的内容:

选择缩进的版式: C-c . //然后会提问使用什么风格,默认的gnu风格是缩进两个空格,我比较喜欢bsd风格的: 缩进一个TAB

代码排版: TAB//可支持块操作

输入TAB: C-q TAB

块小写: C-x C-l

块大写: C-x C-u

显示行号: (global-linum-mode t)

跳到第N行: M-g g

以指定编码读取文件–M-x revert-buffer-with-coding-system

以指定编码保存文件–M-x set-buffer-file-coding-system

查看当前文件编码–M-x describe-coding-system

这个命令可以查到emacs中支持的文件编码的名称。

使用cscope+emacs在Ubuntu 12.04下的注意事项

1)除了安装cscope还需要安装cscope-el,不然找不到xcscope.el

sudo apt install cscope-el cscope

2)xcscope.el的默认路径:/usr/share/emacs/site-lisp。安装好之后,还需要在配置文件~/.emacs(如果当前没有这个配置文件的话,直接创建一个即可)里面加上(require 'xcscope)。或者,如果希望在打开c或者c++文件的时候才加载xcsope,可以这样写:

(add-hook 'c-mode-common-hook
'(lambda ()
(require 'xcscope)))

注:Windows下创建配置文件的步骤:

1.HKEY_CURRENT_USER\Software\GNU\Emacs,注意GNU\Emacs是需要新建的。接下来在Emacs里新建一个HOME项,值是你的emacs路径,比如我的:D:\emacs-23.1\bin。

2.把.emacs文件在这个bin目录下。.emacs文件不能用Windows Explorer创建,但可以用Emacs保存功能来创建。

3)进入源代码的根目录,然后

cscope-indexer -r

即可建立索引文件。

4)添加cscope查询的历史功能

http://sourceforge.net/p/cscope/patches/65/

5)csope中的initial directory表示全局的搜索目录。如果在同一个emacs实例中,打开多个工程的代码时,不要设置这个initial directory,否则所有工程代码都将在这个路径下搜索,而不是在各自的路径下搜索了。

修改颜色

(set-background-color "#CCE8CF") ;; 使用苹果绿背景
(set-foreground-color "black") ;; 使用黑色前景
(set-face-foreground 'region "green")  ;; 区域前景颜色设为绿色
(set-face-background 'region "blue") ;; 区域背景色设为蓝色

设置快捷键

(global-set-key (kbd "C-x M-s") 'rgrep)

软件仓库

Emacs自从24.1之后,也开始支持软件仓库的概念。这对于一个有30年历史的老软件来说,实属不易。相关的代码在package.el中。

常见的软件仓库地址:

http://elpa.gnu.org/

GNU官方的软件仓库,无须安装。但是软件少的很,还不到200个,差点让我放弃emacs了。

http://marmalade-repo.org/

这个没用过。

http://melpa.org/

这是目前最全的软件仓库,3000+的软件。

melpa的安装方法:

(when (>= emacs-major-version 24)
  (require 'package)
  (add-to-list
   'package-archives
   '("melpa" . "http://melpa.org/packages/")
   t)
  (package-initialize))

重启emacs之后,执行:

M-x list-packages

就可以看到melpa的软件包了。

GNU Global+emacs

2016.10

最近由于编写java代码,原有的cscope已经不满足需要了。上网一阵找寻,终于找到了解决方案。

GNU GLOBAL是GNU项目提供的源代码标记系统。默认支持C、C++、Yacc、Java、PHP4、assembly等6种编程语言,并可通过插件支持多达25种编程语言。

其官网为:

https://www.gnu.org/software/global/

插件主要基于Pygments和Exuberant Ctags项目,网址为:

https://github.com/yoshizow/global-pygments-plugin

http://ctags.sourceforge.net/

安装步骤:

1.安装GNU GLOBAL。

sudo apt install global

GLOBAL中虽然有gtags.el,然而并不好用。这一点官网上也认为debian的包太老了。

2.安装ggtags。

ggtags是GNU GLOBAL的一个前端。

其官网:

https://github.com/leoliu/ggtags

安装方法:

M-x package-install ggtags

3.配置ggtags。

在配置文件~/.emacs中添加:

(add-hook 'c-mode-common-hook
          (lambda ()
            (when (derived-mode-p 'c-mode 'c++-mode 'java-mode)
              (ggtags-mode 1))))

手动安装库

有些库没有收录到melpa中,针对这类库:

  1. 首先下载库文件

2.

(add-to-list 'load-path "~/.emacs.d/<lib path>")
(require 'dired-sort-menu)

scratch缓冲区

这是每次启动Emacs时,默认打开的几个缓冲区之一。正如缓冲区最上面的说明所说的,它的目的有两个:

1.提供一个草稿缓冲区。

2.提供一个执行Emacs Lisp的缓冲区。需要执行命令的时候,将光标落在相应的Lisp命令右括号的后面,执行C-x C-e即可。

例如,计算器功能:

(+ (* 33 4) 2)

计算33*4+2,可以看出这是一个典型的逆波兰表达式。

快速打开最近打开过的文件

在配置文件~/.emacs中添加:

(require 'recentf)
(setq recentf-max-saved-items 100)
(recentf-mode 1)

添加scala支持

我使用的是ensime插件。其官网为:

http://ensime.github.io/getting_started/

添加R支持

我使用的是ESS插件。其官网为:

http://ess.r-project.org/

ESS基本涵盖了RStudio提供的大多数常用功能。但对于变量的查看支持有限,可以配合使用ess-R-data-view插件。其官网:

https://github.com/myuhe/ess-R-data-view.el

上述插件都可在melpa中找到。

Emacs v25在win7卡顿

打开菜单Options->Set Default Font,将字体改为宋体。

然后再回到Options菜单,点Save Options。这一步可千万别忘了,否则,关闭窗口后,重新打开又会出现同样的症状。

grep在windows版本中的使用

1.将msys2的bin添加到系统环境变量PATH中。

2.搜索中文时,不要用引号括起来,否则什么都找不到。

有用的插件

https://www.emacswiki.org/emacs/DiredSortMenu

https://github.com/manateelazycat/blink-search

https://jblevins.org/projects/markdown-mode/

Anything、Ivy、Helm、Snails

参考

https://emacs-china.org/

Emacs中文社区

https://nyk.ma/posts/emacs-write-your-own

Emacs 自力求生指南 ── 来写自己的配置吧

Lazarus

Lazarus为开放的IDE,且在Linux下表现良好,目前被中国计算机学会指定为NOI系列竞赛的Pascal语言推荐IDE。

官网:

https://www.lazarus-ide.org/

Fork me on GitHub