Emacs 从入门到精通

2024-05-08 01:18
文章标签 入门 精通 emacs

本文主要是介绍Emacs 从入门到精通,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1 前言

不想再说废话了,既然你会阅读这篇文档,说明你多少对Emacs有些兴趣,或者已 经非常熟悉Emacs的基础操作了,并且希望有所提高。因此我不需要再把"编辑器 之神,还是神的编辑器"之类的恶俗话语放出来,来吸引你的好奇心。下面的内容, 从最基础的快捷键操作开始,一直到让你生活在Emacs中。这中间没有跳跃,你只 需要跟着我做,就可以了。

 

注意  该文档就是用Org生成的,我会把.org源码和html文档一块打包。关于 什么是Org,怎么生成,且看后面的讲解
    
2 Emacs 基础操作

 

2.1 基本文件操作

 

下面这些主要涉及了文件的基本操作,包括打开,新建,保存,另存为以及退出等比较常用的命令。

C-x C-f打开/新建一个文件
C-x C-s保存文件
C-x C-w另存为文件
C-x C-v关闭当前缓冲区文件并打开新文件
C-x i在当前光标处插入文件
C-x b新建/切换缓冲区
C-x C-b显示缓冲区列表
C-x k关闭当前缓冲区
C-x C-c关闭emacs
2.2 光标移动

 

这里边最方便的就是句首句尾和行首行尾,因为我的是笔记本键盘,上下左右主 要是用方向键,如果要是标准键盘的话,最好常用绑定键。

 

 

C-f后一个字符
C-b前一个字符
C-p上一行
C-n下一行
M-f后一个单词
M-b前一个单词
C-a行首
C-e行尾
C-v向下翻一页
M-v向上翻一页
M-<到文件开头
M->到文件末尾
2.3 文本编辑

 

这里面包括了复制粘贴剪切删除等常用的操作命令。注意,在这里,移除包括了 剪切和删除两个概念,要区分清楚。

 

M-n/C-u n重复执行后一个命令n次
C-d删除后一个字符
M-d删除后一个单词
Del删除前一个字符
M-Del删除前一个单词
C-k移除一行
C-@设定标志位(主要是为了粘贴剪切以及删除使用)
C-w移除标记区域的内容(剪切)
M-w复制标记区域的内容(复制)
C-y召回(yank)复制/移除的区域/行(粘贴)
M-y召回更早的内容 (在kill缓冲区内循环)
C-t交换两个字符的位置
M-t交换两个单词的位置
C-x C-t交换两行的位置
M-u使从光标位置到单词结尾处的字母变成大写
M-l与M-u相反
M-c使从光标位置开始的单词的首字母变为大写
2.4 一些重要的命令
C-g停止当前运行/输入的命令
C-x u/C-_撤销前一个命令(undo)
2.5 搜索
C-s向后搜索
C-r向前搜索
2.6 窗口命令

 

窗口命令比较常用,尤其是编辑多个文件的时候,你可以打开多个窗口,可以提 高编辑效率。

 

 

C-x 2水平分割窗格
C-x 3垂直分割窗格
C-x o切换至其他窗格
C-x 0关闭窗格
C-x 1关闭除了光标所在窗格外所有窗格
2.7 帮助
C-h m查看当前模式
C-h c显示快捷键绑定的命令
C-h k显示快捷键绑定的命令和它的作用
C-h f显示函数的功能
C-h b显示当前缓冲区所有可用的快捷键
C-h t打开emacs教程
3 Emacs 基础定制

 

每一次emacs启动的时候,它将加载一个名为~/.emacs的Lisp代码文件,对该文件 进行编辑是一种常用的定制emacs的方式。

 

下面是一个典型的Lisp语句:

 

(setq column-number-mode t)
(setqline-number-mode t)
 

它的意思是在minibuffer上栏显示行列号。其中,括号表示这是一个lisp函数调 用,圆括号内第一个符号setq为emacs配置文件中常用的的函数,它为某个全局变 量赋值。该函数第一个参数为要设置的变量名,第二个数则是该变量的值。

 

下面讲到的每一行代码,你都可以直接拿到~/.emacs中使用。当你想要了解某一 行代码的作用时,可以把它复制粘贴到~/.emacs中,保存然后重启emacs就可以看 到效果了。

 

小技巧  当你编辑~/.emacs配置文件的时候,每一次要看到效果都必须重新 启动emacs,非常麻烦。你可以用emacs打开.emacs文件并加入你想 要的lisp代码后,使用C-x C-s保存,接着在minibuffer输入:M-x eval-buffer,它会立即生效。你可以试验一下,非常方便和简单。
 
 
3.1 设置启动界面

 

每一条上面都有注释,我就不多说了。

 

;; 设置标题栏,我的设置为Welcome to Emacs world!
(setq frame-title-format "Welcome to Emacs world! ")
 
;; 禁用菜单栏,F10 开启关闭菜单
(menu-bar-mode nil)
 
;; 取消工具栏
(tool-bar-mode nil)
 
;; 取消滚动栏
(set-scroll-bar-mode nil)
 
;; 显示行列号,它显示在minibuffer上面那个杠上
(setq column-number-mode t)
(setq line-number-mode t)
 
;;关闭emacs启动时的画面
(setq inhibit-startup-message t)
 
;;关闭gnus启动时的画面
(setq gnus-inhibit-startup-message t)
 
;; 设置启动时窗口的长宽,下面为80*40
(setq initial-frame-alist '((width . 80) (height . 40)))
 
;;关闭出错时的提示声
(setq visible-bell t)
 
 
3.2 操作习惯
 
;;设置打开文件的缺省路径,这里为桌面,默认的路径为“~/”
(setq default-directory "~/桌面")
 
;;让 Emacs 可以直接打开和显示图片。
(setq auto-image-file-mode t)
 
;;防止页面滚动时跳动,
;;scroll-margin 3 可以在靠近屏幕边沿3行时就开始滚动
;;scroll-step 1 设置为每次翻滚一行,可以使页面更连续
(setq scroll-step 1 scroll-margin 3 scroll-conservatively 10000)
 
;; 当光标在行尾上下移动的时候,始终保持在行尾。
(setq track-eol t)
 
 
 
3.3 时间设置
 
 
;; 启用时间显示设置,在minibuffer上面的那个杠上
(display-time-mode t)
 
;; 使用24小时制
(se tq display-time-24hr-format t)
 
 
3.4 绑定键设置
 
 
;; 把C-j绑定到到达指定行上
(global-set-key (kbd "C-j") 'goto-line)
 
;; 设置C->键作为窗口之间的切换,默认的是C-x-o,比较麻烦
(global-set-key (kbd "C->") 'other-window)
 
;; 改变Emacs要你回答yes的行为,按y或空格键表示yes,n表示no。
(fset 'yes-or-no-p 'y-or-n-p)
 
;;设置C-/为undo,M-/为set-mark
(global-set-key (kbd "C-/") 'undo)
 
 ;;设置M-/作为标志位,默认C-@来setmark,C-@不太好用
;;M-/本来对应zap-to-char,这里占用了 (global-set-key (kbd "M-/") 'set-mark-command)
;; 扩大或者缩小窗口(上下),Ctrl+{}
(global-set-key (kbd "C-}") 'enlarge-window)
(global-set-key (kbd "C-{") 'shrink-window)
 
 
 
3.5 全屏或最大化
 
 
3.5.1 全屏设置
(global-set-key [f11] 'my-fullscreen)
(defun my-fullscreen ()
(interactive)
(x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_FULLSCREEN" 0))
)
 
 
3.5.2 最大化设置
 
 
(global-set-key [f12] 'my-maximized)
(defun my-maximized ()
(interactive)
(x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0)) (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
 )
 
 
 
4 Emacs 高级定制

 

这里所说的高级定制,基本上都属于比较重要的日常应用,比如说主题,w3m浏览 器,Irc,日程管理Org,版本控制Git,代码浏览Cscope。而像那些查看pdf,听 音乐以及煮咖啡的玩意,基本上是华而不实的东西,你要有兴趣,完全可以自己 去做,记住,Emacs提供无限可能。

 

4.1 开始前的一点说明

 

Emacs的插件一般都是一个以el为后缀名的文件, 把这个文件下载下来后放到一个 目录, 比如~/.emacs.d/, 然后执行下面这两条语句:

 

(add-to-list 'load-path "~/.emacs.d/")
(require 'pluginname)
 

这样该插件就安装好了。

 

4.2 Emacs Theme

 

其实主题非常重要,因为字体的颜色,背景光标等等都是你天天必须面对的,设 定一个合适的主题,就像一个舒服的狗窝,让你不愿意离开。

 

下面是我的Emacs主题截图:

 

 
4.2.1 下载emacs theme压缩包
 
4.2.2 解压
 
 
4.2.3 复制相应文件到.emacs.d/下
 
cp -r themes color-theme.el ~/.emacs.d/
 
 
4.2.4 在~/.emacs加上如下代码
 
;;将~/.emacs.d/添加到加载路径
(add-to-list 'load-path "~/.emacs.d/")
(require 'color-theme)
(color-theme-initialize)
;; 这个是你选择的主题,后面的calm forest就是它的名字,注意使用小写。
(color-theme-calm-forest)
技巧
打开Emacs后可以 M+X color-theme-select 选择你喜欢的主题,然后 将相应的名称写入.emacs中。
 
 
4.3 Emacs Irc

 

这个在Emacs23之后已经自带了,只需要在~/.emacs中加入下面的代码即可使用。

 

(require 'erc)
;; 将F9设置为打开Erc的快捷键
(global-set-key [f9] 'erc)
 
 
4.4 Emacs Org>D

 

虽然Emacs23自带了Org-mode,但是如果方便地需要使用它,必须做相应的配置才 行。而关于Emacs org是什么,到底有什么用,这里不解释,如果你想了解,可以 在网上搜索,或者进入我的博客找到关于Emacs org 和 GTD 的文章。

 

好了,在这之前,我还是放一张我打开Emacs的截图

 

 
4.4.1 快速启动remember-mode
;; Ctrl-c-c 快速启动remember
(global-set-key "\C-cc" 'remember)
 
4.4.2 快速打开inbox
 
;; 快速打开inbox
(defun gtd()
(interactive)
(find-file "~/GTD/inbox.org"))
 
(global-set-key "\C-cz" 'gtd)
 
 
4.4.3 为生成的html着色

 

正常生成的html白白黑黑的,没有第三种颜色,对一般人来说比较枯燥。如果你 需要插入lisp/shell代码,五颜六色的比较赏心悦目,当然我不太喜欢它生成的 html,也没有使用。

 

  • 下载htmlize.el 
    这个很简单,输入htmlize.el,直接就会找到,很简单。
  • 添加配置 
    ;; 添加网页着色 (require 'htmlize)
 
4.4.4 设置GTD收集项目的模板
;; GTD 收集项目的模板设置
(org-remember-insinuate)
(setq org-directory "~/GTD/")
(setq org-remember-templates '(
("Task" ?t "** TODO %? %T\n %i\n %a" "~/GTD/inbox.org" "Tasks")
("Book" ?b "** %? %t\n %i\n %a" "~/GTD/inbox.org" "Book")
("CUBlog" ?c "** %? %t\n %i\n %a" "~/GTD/inbox.org" "CUBlog")
("Project" ?p "** %? %t\n %i\n %a" "~/GTD/inbox.org" "Project")
("GitHub" ?g "** %? %t\n %i\n %a" "~/GTD/inbox.org" "GitHub")
("Log" ?l "** %? %T\n %i\n %a" "~/GTD/log.org" ) ))
 
(setq org-default-notes-file (concat org-directory "/inbox.org"))
 
 
 
4.4.5 设置TODO关键字
 
 
;;设置TODO关键字
 
(setq org-todo-keywords (list "TODO(t)" "|" "CANCELED(c)" "DONE(d)"))
 
 
4.4.6 设置快捷键启动日程表
 
;; 快速启动 agenda-view
(define-key global-map "\C-ca" 'org-agenda-list)
(define-key global-map "\C-ct" 'org-todo-list)
(define-key global-map "\C-cm" 'org-agenda-month-view)
 
 
4.4.7 打开Emacs显示日程表

 

日程表这个东西就是需要不时的看一下,不然单单把它记录起来很容易遗忘,所 以我就把它放在启动的时候。每天,开机,打开Emacs,查看今天的日程表,然后 做相应的工作,多好~

 

;; 自动显示日程表
(setq org-agenda-files (list "~/GTD/inbox.org")) (org-agenda-list t )
;; 关闭其它窗口 (delete-other-windows)
 
 
4.4.8 转接

 

如果你不知道org或者GTD为何物,可能有些云里雾里的。转接的目的,就是方便 在文件内或者文件之间,互换某些内容。比如,我在inbox里完成了某个 TODO ,然后将其标志成 DONE ,接着需要将这部分内容放到finished里面。如果按 照正常的流程,肯定是先剪切然后复制。由于每天的可能标记完成的任务比较多, 如果都剪切复制,这样的效率太低了,转接就是专门为了提高这个而来的。

 

;; 将项目转接在各文件之间,方便清理和回顾。
(custom-set-variables '(org-refile-targets
(quote (("inbox.org" :level . 1)("canceled.org" :level . 1) ("finished.org":level . 1)) )))
 
 
4.5 Emacs W3m
 
4.5.1 安装必需的依赖文件

首先在你的系统里查询是否有下列文件包。

 

cvs autoconf libgc-dev libncurses5-dev

 

查询的方法很简单,例如在终端输入:

 

dpkg -l 'cvs'
 

它就会自动查看是否已经安装cvs,如果没有,你需要使用下面的指令安装:

 

sudo apt-get install cvs
 

上面的几个都可以使用这种方法来确定是否有该安装包。

 

4.5.2 安装w3m
  • APT安装 
    如果是ubuntu的话,可以先试试apt 
    sudo apt-get install w3m

    如果可以的话,就不需要使用源代码安装了

  •  

  • 源代码安装 
  • 首先:回到主目录 cd
  • 其次:使用cvs下载源码包,输入下面的命令:

  •  

    cvs -d:pserver:anonymous@w3m.cvs.sourceforge.net:/cvsroot/w3m login

    它会要求你输入密码,直接回车即可。然后在输入下面的命令:

  •  

    cvs -d:pserver:anonymous@w3m.cvs.sourceforge.net:/cvsroot/w3m checkout w3m
  • 这一步会下载w3m安装包,可能会浪费点时间,别着急。

  •  

    然后:安装w3m

  •  

    cd w3m ./configure sudo make sudo make install

 

  • 这几步都是常见的安装命令,无错误之后就表示w3m已经安装完毕。

  •  

    最后:验证w3m是否正确安装。

  •  

    在终端输入

  •  

    w3m http://www.google.com
  • 如果出现谷歌的搜索界面就表示成功了,这个时候可能中文显示是乱码,别着急, 后面我会解决这个问题。

  •  

 
4.5.3 安装Emacs-w3m

这个貌似只能用源代码安装了~

 

首先:仍旧是回到主目录:

 

cd
 

其次,使用cvs下载安装包(这一步和w3m安装差不多)

 

cvs -d :pserver:anonymous@cvs.namazu.org:/storage/cvsroot login
 

要你输入密码,直接回车。接着输入下面的命令:

 

cvs -d :pserver:anonymous@cvs.namazu.org:/storage/cvsroot co emacs-w3m
 

这一步需要下载安装包,需要一段时间,当下载完毕的时候,进入emacs-w3m:

 

cd emacs-w3m
 

然后:安装emacs-w3m

 

autoconf ./configure sudo make sudo make install
 

这些步骤下来不出现问题就表明emacs-w3m安装成功。

 

4.5.4 编辑Emacs-w3m的lisp代码

这是我的~/.emacs中关于Emacs-w3m部分。

(add-to-list 'load-path "~/emacs-w3m/")
(require 'w3m-load) (require 'mime-w3m)
 
;; 设置w3m主页
 (setq w3m-home-page file:///home/hic/audio/Home.html)
 
;; 设置快捷键
(global-set-key [f5] 'w3m)
 
;; 默认显示图片
(setq w3m-default-display-inline-images t)
(setq w3m-default-toggle-inline-images t)
 
;; 使用cookies
(setq w3m-use-cookies t)
 
;;设定w3m运行的参数,分别为使用cookie和使用框架
(setq w3m-command-arguments '("-cookie" "-F"))
 
;; 使用w3m作为默认浏览器
(setq browse-url-browser-function 'w3m-browse-url)
(setq w3m-view-this-url-new-session-in-background t)
 
 
;;显示图标
(setq w3m-show-graphic-icons-in-header-line t)
(setq w3m-show-graphic-icons-in-mode-line t)
 
 
(defun remove-w3m-output-garbages ()
"去掉w3m输出的垃圾."
(interactive)
(let ((buffer-read-only))
(setf (point) (point-min)) (while (re-search-forward "[\200-\240]" nil t) (replace-match " "))
(set-buffer-multibyte t)) (set-buffer-modified-p nil))
 
 
4.5.5 一些小问题

 

由于w3m-el和emacs23并不能充分匹配,有的时候会出现中文乱码问题。这个时候 你需要卸载w3m-el包,同时安装w3m-el-snapshot包。命令如下:

 

sudo apt-get remove w3m-el sudo apt-get install w3m-el-snapshot
 
 
4.6 Emacs Git

 

在Emacs上使用git的选择比较多,有Emacs VC git.el git-emacs magit等等,我 使用的是git-emacs。我已经默认你安装了git。

 

同样,我还是先放上一张git-emacs的截图:

 

 
4.6.1 下载安装包
git clone https://github.com/tsgates/git-emacs.git
 

其实https那个是git-emacs在github上的托管地址,有兴趣可以进去看一看。

 

4.6.2 配置.emacs
 
 
(add-to-list 'load-path "~/.emacs.d/git-emacs/") (require 'git-emacs)
 
 
4.7 Emacs Cscope
 
4.7.1 安装Cscope
  • 下载cscope 
  • 这是cscope的下载地址: http://sourceforge.net/projects/cscope/files/

     

  • 这是cscope的主页: http://cscope.sourceforge.net/

  •  

4.7.2 编译安装

仍然是老三步:

./configure
make
sudo make install
 

Cscope 的发行包里面有个 xcscope.el 能很好地用于XEmacs 。它处于源代 码包的 contrib/xcscope 目录下,请将xcospe放入.emcs.d/中。

 

4.7.3 配置
 
(require 'xcscope)
;; 设置仅在打开c/c++文件时打开
(add-hook 'c-mode-common-hook '(lambda() (require 'xcscope)))
 
 
4.7.4 使用

 

如果需要使用cscope,请将cscope-indexer放入该目录,同时执行M+X cscope-index-files,即可在该目录下生成索引文件。同时将cscope-indexer放 入/usr/bin中,设置为可执行,在该目录下执行 sudo cscope-indexer -r,它会 生成cscope.files和cscope.out两个文件或目录。

这篇关于Emacs 从入门到精通的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968913

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

MySQL入门到精通

一、创建数据库 CREATE DATABASE 数据库名称; 如果数据库存在,则会提示报错。 二、选择数据库 USE 数据库名称; 三、创建数据表 CREATE TABLE 数据表名称; 四、MySQL数据类型 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串类型 4.1 数值类型 数值类型 类型大小用途INT4Bytes整数值FLOAT4By

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是