本篇文章记录的是一些有用的 Emacs 配置,有些是自己原创,有些是借鉴别人(能记起来出处的我放了链接)。

规定:C 代表 Ctrl,M 代表 Alt。

1.设置一次跳跃 n 行的快捷键

按 C-M-n 可以连续下跳 5 行,按 C-M-p 可以连续上跳 5 行:

 (global-set-key (kbd "C-M-n")
(lambda () (interactive) (next-line 5)))
(global-set-key (kbd "C-M-p")
(lambda () (interactive) (previous-line 5)))

2. 在一个 emacs 中打开多个 shell buffer

在 emacs 中,使用 M-x(输入: shell 或 eshel) 来打开 shell 的 buffer,当作 shell 终端使用。但是有时候需要在一个 emacs 中打开多个 shell buffer,需要进行一下设置:

 ;; set open multi shell
(defun wcy-shell-mode-auto-rename-buffer (text)
(if (eq major-mode 'shell-mode)
(rename-buffer (concat "shell:" default-directory) t)))
(add-hook 'comint-output-filter-functions'wcy-shell-mode-auto-rename-buffer)

3. 窗口操作的撤销和重做

在 emacs 中,使用 C-x,2 或 C-x,3 来新建窗口,使用 C-x,0 或 C-x,1 来关闭窗口,这些称为窗口操作。在进行窗口操作时有时候需要撤销或重做,可以使用以下配置:

C-x,4,u 代表撤销,C-x,4,r 代表重做。

 ;;set windows undo and redo
(when (fboundp 'winner-mode)
(winner-mode 1)
(global-set-key (kbd "C-x 4 u") 'winner-undo)
(global-set-key (kbd "C-x 4 r") 'winner-redo)
)

(感谢 redguardtoo

4. 在行末或行中位置删除整行

在 emacs 默认设置中,要想删除整行,需要先 C-a 跳到行首,然后使用 C-k 来删除整行,有些不方便。通过一下配置,可以使用 C-w 来删除整行(操作时不用事先选中整行),同时不影响原有的剪切功能。M-w 也可以在不事先选中整行的情况下复制整行。
 (defadvice kill-ring-save (before slickcopy activate compile)
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
(defadvice kill-region (before slickcut activate compile)
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))

(感谢浏忙大爆炸

5. 在各个窗口之间快速切换

在 emacs 的默认设置中,需要使用 C-x, o 来进行窗口切换,颇为不便,特别是窗口数量比较大的时候。通过以下设置,可以使用 M-1/M-2/M-3/.../M-9 来快速切换到第 1/2/3/.../9 窗口(窗口上有编号)。

事先下载 window numbering el,放置到~/.emacs.d/ 目录下,然后在.emacs 中做以下配置:

 ;;set windows numbering
(require 'window-numbering)
(window-numbering-mode 1)

(感谢 redguardtoo

6. 设置 color-theme 主题

下载 color-theme,放置到~/.emacs.d/ 目录下,然后在.emacs 中做以下配置:
 ;;set color theme
(add-to-list 'load-path"~/.emacs.d/")
(require ')
(color-theme-initialize)
;; 这个是你选择的主题,后面的 calm forest 就是它的名字,注意使用小写。
(color-theme-calm-forest)

(7) 设置透明效果

我觉得这个很有用,特别是需要一边写代码一边看参照其他文档时。按 F11 键可以一键切换透明度,非常方便:

 ;;set transparent effect
(global-set-key [(f11)] 'loop-alpha)
(setq alpha-list '((100 100) (95 65) (85 55) (75 45) (65 35)))
(defun loop-alpha ()
(interactive)
(let ((h (car alpha-list))) ;; head value will set to
((lambda (a ab)
(set-frame-parameter (selected-frame) 'alpha (list a ab))
(add-to-list 'default-frame-alist (cons 'alpha (list a ab)))
) (car h) (car (cdr h)))
(setq alpha-list (cdr (append alpha-list (list h))))
)
)

(感谢 ccat

8. 将光标移动到当前行的中间位置

Emacs 可以将光标跳到行首(C-a)和行尾(C-e),但是没有跳到行中的快捷键。可以通过以下配置来实现:
将 C-z 绑定为将光标移动到当前行的中间位置。
 (defun middle-of-line ()
"Put cursor at the middle point of the line."
(interactive)
(goto-char (/ (+ (point-at-bol) (point-at-eol)) 2)))
(global-set-key (kbd "C-z") 'middle-of-line)

9. 优化注释功能

Emacs 的默认设置中,M-; 可以起到注释的作用,但是有不方便的地方:必须在选中一部分区域后才能进行注释。通过如下配置,可以达到以下效果:当光标位于行尾时,M-; 在行尾进行注释;当光标位于其他位置时,M-; 起到注释该行的作用;当选中一部分区域时,M-; 起到注释该区域的作用。
 (defun qiang-comment-dwim-line (&optional arg)
(interactive "*P")
(comment-normalize-vars)
(if (and (not (region-active-p)) (not (looking-at "[ \t]*$")))
(comment-or-uncomment-region (line-beginning-position) (line-end-position))
(comment-dwim arg)))
(global-set-key "\M-;" 'qiang-comment-dwim-line)

(感谢 cmdblock

附录:

这部分是一些快捷键备忘。

(1) 编辑

M-\:删除光标处的所有空格和 Tab 字符
M-SPC:删除光标处的所有空格和 Tab 字符,但留下一个。
C-x C-o:删除光标周围的空白行,保留当前行。
C-o:插入空行。
M-^:将两行合为一行,删除之间的空白和缩进。
C-k:从光标处起删除该行。
M-z char:删至字符 char 为止
连续使用 kill 命令(M-w 除外),所 kill 掉的东西会智能的连在一起。还可以使用 C-M-w(紧接一个 kill 命令)强制下次删除加入上一个记录中。
M-y(我重定义为 M-p):这个命令只能在刚用完 C-y 后使用。它的作用是用 kill 环中再前一个内容替换掉刚用 C-y 粘贴出来的内容。
M-;:注释。
shift+ 其他操作(比如 C-a,C-e,C-f,C-b 等)可以选中特定内容。注意:按大写键可以辅助该操作。
C-@:mark set,开始选定模式。
C-g:退出选定模式。
C-x h:全选。
C-x C-f:打开文件。
C-x C-v:更换文件。
C-x C-s:保存 buffer。
C-x C-w:另存为 buffer。
C-x k:关闭 buffer。

(2) 浏览

M-m:跳过所有空格
M-g g:跳到指定行
C-v:下翻页。
M-v:上翻页。
C-l:置中。
M-<:文首。
M->:文末。
M-r :移动到页面中间行首位置。
C-l:将当前行提到页面中间。
C-s:向后查找,再按一次则跳到下一个匹配项。
C-r:向前查找,再按一次则跳到下一个匹配项。
M-%:替换。

(3) 窗口操作

C-x 5 b:在另一个窗口选择 buffer。
C-x 0:关闭本窗口。
C-x 4 0:关闭本窗口及 buffer。
C-x 1:关闭其他窗口。
C-x 2:垂直拆分窗口。
C-x 3:水平拆分窗口。

(4) 其他

C-x C-c:退出 emacs。
C-x z:重复命令。

一些有用的 Emacs 配置(窗口快速切换、一键透明效果、任意位置删除整行等)的更多相关文章

  1. Windows同一软件不同窗口如何快速切换

    windows快速切换应用的快捷键是Alt + Tab 这个快捷键可以在多个应用之间快速切换,但是软件多开时,而此时我只想在同一软件内的多个窗口切换,一切换好多个窗口扑面而来,我还要去用找并用鼠标点击 ...

  2. Grafana 利用Grafana Variables变量配置快速切换不同主机的图表数据展示

    用Grafana Variables变量配置快速切换不同主机的图表数据展示   by:授客 QQ:1033553122 测试环境 需求描述 操作步骤 结果展示 测试环境 influxdb-1.5.2. ...

  3. Windows环境下使用Netsh命令快速切换IP配置

    不同的内网环境需要使用不同的IP配置,频繁切换令人发狂,因此搜索了快速切换IP配置的方法. Netsh interface IP Set address "以太网" Static ...

  4. 【DATAGUARD】物理dg配置客户端无缝切换 (八.2)--Fast-Start Failover 的配置

    [DATAGUARD]物理dg配置客户端无缝切换 (八.2)--Fast-Start Failover 的配置 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各 ...

  5. 第一篇 Postman的初级使用之设置环境快速切换生成环境与测试环境

    POSTMAN是有谷歌的开源工具,在开发调试.测试执行过程中使用频率非常广泛,本文将记录一些postman在测试中常见的一些配置和使用方法 一.基本的页面区域 略,很简单,大家都会看,再有,学习下面的 ...

  6. 【DATAGUARD】物理dg配置客户端无缝切换 (八.4)--ora-16652 和 ora-16603错误

    [DATAGUARD]物理dg配置客户端无缝切换 (八.4)--ora-16652 和 ora-16603错误 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各 ...

  7. 【DATAGUARD】物理dg配置客户端无缝切换 (八.3)--客户端TAF 配置

    [DATAGUARD]物理dg配置客户端无缝切换 (八.3)--客户端TAF 配置 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各位技术爱好者,看完本文后,你 ...

  8. 【DATAGUARD】物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置

    [DATAGUARD]物理dg配置客户端无缝切换 (八.1)--Data Guard Broker 的配置 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各位技 ...

  9. 多项目并行开发如何做到快速切换——sublime Text3

    sublime text有一个很人性化的功能,就是打开窗口的时候,它会把上一次关闭时的编辑器工作区状态完全复原(不论文件是否已经保存). 只有一个项目的时候,这个功能非常方便,可以保证重启电脑后cod ...

随机推荐

  1. SQL SERVER 查询死锁

    USE mastergo CREATE PROCEDURE [dbo].[sp_who_lock]AS     BEGIN        DECLARE @spid INT ,             ...

  2. mysql 交互式连接和非交互式连接

    交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端 mysql_real_connect() 函数介绍 函数原型描述: MYSQL *m ...

  3. 第二次装OA系统

    第二次安装:1.解压之后再MYOA目录下 找到一键安装.bat2.安装之后,一闪而过.(电脑上不需要apache,也不需要 mysql)3.192.168.1.111(自己电脑IP)看是否可以,若不可 ...

  4. android智能天气闹钟应用开发经过

    开发这个应用的初衷是这样产生滴,和我一块租房的同学每天早上都是骑单车上班,所以手机闹钟就会定一个刚好适合骑车的起床时间点.但是呢,有一天早上起床以后发现外面下挺大雨,肯定是不能骑车去上班了,于是就只好 ...

  5. 【转】正确使用Block避免Cycle Retain和Crash

    原文地址:http://tanqisen.github.io/blog/2013/04/19/gcd-block-cycle-retain/ 使用指南:http://blog.csdn.net/nic ...

  6. java 流程执行 循环 foreach循环

    一. if分支 1. 结构  if  else if   else 2.执行原则 if  if  if 结构  会一直去执行()里的判断语句 if else if  else if 结构  只要一条( ...

  7. Google Map API v2 步步为营 (二)----- Location

    接上篇. 改造一下MapsActivity: public class MapsActivity extends Activity implements LocationListener, InfoW ...

  8. Django 初探--Django的开发服务器及创建数据库(笔记)

    1.Django的开发服务器 Django框架中包含一些轻量级的web应用服务器,开发web项目时不需再对其配置服务器,Django提供的内置服务器可以在代码修改时自动加载,从而实现网站的迅速开发. ...

  9. [DEncrypt] RSACryption--RSA加密/解密字符串 (转载)

    点击下载 RSACryption.zip 这个类是关于加密,解密的操作,文件的一些高级操作1.RSACryption RSA 的密钥产生2.RSACryption RSA的加密函数3.RSACrypt ...

  10. DataGridView 绑定 List

    DataGridView 绑定 List<T> 不会自动更新 正确方式是将  List<T> 设置为 BindingList<T> 即可 (双向绑定)