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中支持的文件编码的名称。
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的软件包了。
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中,针对这类库:
2.
(add-to-list 'load-path "~/.emacs.d/<lib path>")
(require 'dired-sort-menu)
这是每次启动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)
我使用的是ensime插件。其官网为:
http://ensime.github.io/getting_started/
我使用的是ESS插件。其官网为:
http://ess.r-project.org/
ESS基本涵盖了RStudio提供的大多数常用功能。但对于变量的查看支持有限,可以配合使用ess-R-data-view插件。其官网:
https://github.com/myuhe/ess-R-data-view.el
上述插件都可在melpa中找到。
打开菜单Options->Set Default Font,将字体改为宋体。
然后再回到Options菜单,点Save Options。这一步可千万别忘了,否则,关闭窗口后,重新打开又会出现同样的症状。
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为开放的IDE,且在Linux下表现良好,目前被中国计算机学会指定为NOI系列竞赛的Pascal语言推荐IDE。
官网:
https://www.lazarus-ide.org/
https://mp.weixin.qq.com/s/ceq4vn1GcGGw-Q26dAy2hw
别迷失在森林里…
https://mp.weixin.qq.com/s/STmSnyl4vaz3WS-kJ8aUmQ
评分卡设计-变量筛选
https://mp.weixin.qq.com/s/qOZq30ua2q_avgRLZie-VQ
R语言实战之模型部署
https://mp.weixin.qq.com/s/G-6ZcMIba-fLKRN0hgQFWg
面向数据科学和AI的开发库推荐:Python、R各7个
https://mp.weixin.qq.com/s/0jKN59DMo1HmCtw8ce-y7Q
在R中估计GARCH参数存在问题
https://mp.weixin.qq.com/s/SLmyeLOp3h0bkD08WJS_Rg
如何用R绘制交互式社会网络图?
https://mp.weixin.qq.com/s/bB7583hMU9DGIc4-PMMQXw
详解线性回归、朴素贝叶斯、随机森林在R和Python中的实现应用!
https://mp.weixin.qq.com/s/Q_chMLju5YEIFncWJ2GFlw
为新手准备的现代化R包开发流程
https://mp.weixin.qq.com/s/VyuEC1M_6Wsl1KUvzVUyGA
同一个项目中让R和Python无缝工作的五种方法
您的打赏,是对我的鼓励