Unverified Commit da223c65 authored by akakw1's avatar akakw1 Committed by GitHub
Browse files

Update emacs.md

parent 6fdd0020
Loading
Loading
Loading
Loading
+153 −60
Original line number Diff line number Diff line
author: akakw1, Ir1d, partychicken

## Emacs——神的编辑器
## Emacs入门教程

15 分钟入门 Emacs(因为是入门教程,所以比较简短,仅介绍编写程序常用的功能),进阶内容请自行搜索
15 分钟入门 Emacs

### 简介

Emacs 是一款非常容易上手的编辑器,重要的快捷键不多,随便输几行配置就能较方便地使用
Emacs 是一款非常容易上手的编辑器,只需要简短的几行配置就能使用,但是想要非常熟练地使用 Emacs 进行各项工作还是需要一定的时间。

作为入门教程,这里仅介绍如何使用 Emacs 的基本功能并能够较方便地用 Emacs 编写、调试代码。

### 入门

这一部分用于介绍 Emacs 的基本功能及一些重要部分。

#### 命令

按下右侧 Ctrl 左边的第一个键或者使用 Alt-x 可以输入命令,按三下 Esc 可以取消,常用的有 "es" 或 "eshell"(打开 eshell)
命令在 Emacs 中有很大的作用,但是由于一般用快捷键代替输入命令,所以这里只简单介绍一下。

使用快捷键 M-x(Alt+x)或者右 Ctrl 左边的第一个键(不是 windows 键)可以打开命令输入,输入完按下回车可以执行命令。

通常我们使用`es`或者`eshell`命令来打开 eshell(类似一个终端)。

#### 缓冲 (buffer)

缓冲即打开的文件和进程,在不保存的情况下,在缓冲中修改并不会修改到文件
缓冲即打开的文件和进程,在不保存的情况下,在缓冲中修改并不会修改到文件

在缓冲区的底部点击缓冲的名字可以切换缓冲
在缓冲区的底部点击缓冲的名字或者使用快捷键可以切换缓冲

#### 编译、调试和运行

在顶部的菜单栏中有一个 Tools 点开就有编译和调试
在顶部的菜单栏中有一个 Tools 点开就有编译和调试,或者你也可以输入命令或者自定义快捷键使用编译和调试功能。

运行可以使用终端或 Eshell(其实也是终端)运行程序
运行可以使用终端或 Eshell 运行程序

按下 Tools 中的调试 (gud-gdb) 后,输入程序名(一般会自动输好,但如果中途将程序另存为或者打开了两个需要调试的程序, **自动输好的文件名可能会有误** )即可开始调试
按下 Tools 中的调试 (gud-gdb) 后,输入程序名(一般会自动输好,但如果中途将程序另存为或者打开了两个需要调试的程序, **自动输好的文件名可能会有误** )即可开始调试

#### 分屏

这个稍微重要一点
这个功能便于我们查看各个缓冲的内容,而不需要来回切换缓冲,方便我们测试、调试代码。

分屏功能可以同时显示多个窗口,用鼠标拖动窗口的边缘可以缩放窗口
分屏功能可以同时显示多个窗口,用鼠标拖动窗口的边缘可以缩放窗口

几个快捷键:

@@ -40,63 +48,148 @@ Emacs 是一款非常容易上手的编辑器,重要的快捷键不多,随
-   横向分屏 "C-x 3":将这个分屏横向分成两半
-   纵向分屏 "C-x 2":将这个分屏纵向分成两半

一般窗口分为四块:先横向分,调整一块的宽度约为 3/4 屏,作为编辑窗口,再将另一块横向分,一块作为调试和编译信息显示的窗口,另一块再纵向分,一块打开输入文件,一块打开输出文件
一般窗口分为四块:先横向分,调整一块的宽度约为 3/4 屏,作为编辑窗口,再将另一块横向分,一块作为调试和编译信息显示的窗口,另一块再纵向分,一块打开输入文件,一块打开输出文件

![](./images/emacs.png)

#### 快捷键

Emacs 拥有极为丰富的快捷键,可以大幅提高写工作的效率,同时你也可以在配置中自定义快捷键或者设置键盘的映射。

由于快捷键过多,所以 Emacs 快捷键的使用不同于我们的操作系统,一般有以下三种:

-   `F?``ESC`:直接按下对应的功能键
-   `M-?``C-?``C-M-?`:按下`Alt`或者`Ctrl``M-`对应`Alt``C-`对应`Ctrl`)的同时按下`?`
-   `? ?`:先按下第一个`?`代表的键,松开再按下第二个`?`代表的键

下面是一些常用的快捷键:

-   `C-x h`:全选
-   `C-x left``C-x right`:切换到上/下一个缓冲
-   `C-x d`:打开一个目录
-   `C-x C-f`:打开一个文件(如果不存在文件则新建文件)

### 个性化

打开最初的 Emacs,非常丑,并且不好用,我们需要个性化设置
打开最初的 Emacs,非常丑,并且不好用,我们需要个性化设置

以下是推荐在考场使用的
由于配置不好记,所以部分可以直接设置的部分建议不要记配置

#### 初级
#### 直接设置

-   点击 Options,勾选第二项(高亮匹配括号)
-   点击 Options,点击 Show/Hide,第一行 Tool Bar 选 None
-   点击 Options,勾选第六行可以使用 Ctrl + C,Ctrl + V 等快捷键
-   点击 Options,最后一行点开再点第一行可以设置主题,勾选后要保存
-   点击 Options,点倒数第三行保存
-   Options:`Highlight Matching Parentheses`高亮匹配括号
-   Options:`Blink Cursor`设置光标闪烁
-   Options Show/Hide:`Tool Bar`显示/不显示工具栏(默认显示,建议不显示)
-   Options:`Use CUA Keys`勾选后可以使用 Ctrl + C,Ctrl + V 等快捷键进行复制粘贴
-   Options Customize-Emacs:`Custom Theme`选择配色方案,选择完后需要点击保存
-   Options:`Save Options`**保存配置**

#### 配置

 [获取上文图片中的配置](https://www.cnblogs.com/akakw1/p/10088191.html) 

再 home 目录下显示隐藏文件,".emacs" 就是配置文件(如果没有说明之前没保存)

几个重要的

    (global-set-key [f9] 'compile);;;f9编译
    ;(global-set-key [f9] 'compile-file);;;设置了一键编译的用这条
    (global-set-key [f10] 'gud-gdb);;;f10调试
    (global-set-key (kbd "C-s") 'save-buffer);;;ctrl+s保存
    (global-set-key (kbd "C-z") 'undo);;;ctrl+z撤销
    (global-set-key (kbd "RET") 'newline-and-indent);;;自动缩进
    (define-key key-translation-map (kbd "C-a") (kbd "C-x h"));;;全选
    (global-set-key (kbd "C-y") 'kill-whole-line);;;删除一行
    (setq c-default-style "awk");;;设置C语言风格awk

考场把上面的需要的输进去就行了

    ;;;一键编译(C++)
    (defun compile-file ()
      (interactive)
      (compile (format "g++ -o %s %s -g -lm -Wall"  (file-name-sans-extension (buffer-name))(buffer-name))))
    ;;;;;允许emacs和外部其他程序的粘贴
    (setq x-select-enable-clipboard t)
    ;; 显示列号
    (setq column-number-mode t)
    ;;;;;修改透明度
    (set-frame-parameter (selected-frame) 'alpha (list 85 50))
    (add-to-list 'default-frame-alist (cons 'alpha (list 85 50)))
    (setq-default cursor-type 'bar)
在 home 目录下显示隐藏文件(Windows 系统在用户目录的`AppData\Roaming`目录下),".emacs" 就是配置文件(如果没有说明之前没保存),打开修改即可,如果有打开的 Emacs 需要重启 Emacs 生效。

考场必备
```
;;设置一键编译 可以自行添加参数 难背考场不建议使用 不建议依赖一键编译
(defun compile-file ()(interactive)(compile (format "g++ -o %s %s -g -lm -Wall" (file-name-sans-extension (buffer-name))(buffer-name))))
(global-set-key [f9] 'compile-file)
;;;;设置编译快捷键(如果设置了一键编译不要与一键编译冲突)
;;(global-set-key [f9] 'compile)

(global-set-key (kbd "C-a") 'mark-whole-buffer) ;;全选快捷键
(global-set-key (kbd "C-z") 'undo) ;;撤销快捷键
(global-set-key [f10] 'gud-gdb) ;;GDB调试快捷键
(global-set-key (kbd "RET") 'newline-and-indent) ;;换行自动缩进
(global-set-key (kbd "C-s") 'save-buffer) ;;设置保存快捷键
(setq-default kill-ring-max 65535) ;;扩大可撤销记录

;;C++ 代码风格 一般控制缩进规则
;;;"bsd" 所有大括号换行
;;;"java" 所有大括号不换行。else 接在右大括号后面
;;;"awk" 只有命名空间旁、定义类、定义函数时的大括号换行。else 接在右大括号后面
;;;"linux" 只有命名空间旁、定义类、定义函数时的大括号换行。else 接在右大括号后面。一般来说,这个风格应该有 8 格的空格缩进
(setq-default c-default-style "awk")
```

??? "完整配置"
```
;;设置一键编译
(defun compile-file ()(interactive)(compile (format "g++ -o %s %s -g -lm -Wall" (file-name-sans-extension (buffer-name))(buffer-name))))
(global-set-key [f9] 'compile-file)
;;;;设置编译快捷键(如果设置了一键编译不要与一键编译冲突)
;;(global-set-key [f9] 'compile)

;;考场必备
(global-set-key (kbd "C-a") 'mark-whole-buffer) ;;全选快捷键
(global-set-key (kbd "C-z") 'undo) ;;撤销快捷键
(global-set-key [f10] 'gud-gdb) ;;GDB调试快捷键
(global-set-key (kbd "RET") 'newline-and-indent) ;;换行自动缩进
(global-set-key (kbd "C-s") 'save-buffer) ;;设置保存快捷键
(setq-default kill-ring-max 65535) ;;扩大可撤销记录

;;设置缩进
;;;C++ 代码缩进长度。
(setq-default c-basic-offset 4)
;;;使用 tab 缩进
(setq-default indent-tabs-mode t)
;;;tab 的长度。务必和缩进长度一致
(setq-default default-tab-width 4)
(setq-default tab-width 4)

;;设置默认编码环境
(set-language-environment "UTF-8")
(set-default-coding-systems 'utf-8)

;;不显示欢迎页面
(setq-default inhibit-startup-screen t)

;;设置标题
(setq-default frame-title-format "")

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

;;高亮
    (set-cursor-color "wheat")
    (set-mouse-color "wheat")
    (global-font-lock-mode t)
    ;;;;;滚动页面时比较舒服,不要整页的滚动
    (setq scroll-step 1
            scroll-margin 3
            scroll-conservatively 10000)

无脑配置请百度
(global-hl-line-mode 1);;高亮当前行
(show-paren-mode t);;高亮匹配括号
(global-font-lock-mode t);;语法高亮

;;允许emacs和外部其他程序的粘贴 好像默认允许
(setq-default x-select-enable-clipboard t)

;;设置字体是 Ubuntu Mono 的 16 号
(set-default-font "Ubuntu Mono-16")

;;鼠标滚轮支持
(mouse-wheel-mode t)

;;设置光标形状为竖线(默认为方块)
(setq-default cursor-type 'bar)

;;回答 yes/no 改成回答 y/n
(fset 'yes-or-no-p 'y-or-n-p)

;;透明度
(set-frame-parameter (selected-frame) 'alpha (list 85 60))
(add-to-list 'default-frame-alist (cons 'alpha (list 85 60)))

;;优化页面滚动
(setq-default scroll-margin 3 scroll-conservatively 10000)

;;优化文件树结构
(ido-mode t)

;;deeper-blue 配色方案
(custom-set-variables
 '(ansi-color-faces-vector
   [default default default italic underline success warning error])
 '(ansi-color-names-vector
   ["#212526" "#ff4b4b" "#b4fa70" "#fce94f" "#729fcf" "#e090d7" "#8cc4ff" "#eeeeec"])
;;启动 Ctrl-x Ctrl-c Ctrl-v = 剪切 复制 粘贴
 '(cua-mode t nil (cua-base))
 '(custom-enabled-themes (quote (deeper-blue)))
 '(show-paren-mode t)
;;隐藏工具栏
 '(tool-bar-mode nil))
(custom-set-faces)
```