本篇文章记录的是一些有用的 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. PowerDesigner跟表的字段加注释

    选择那个表 右键- >Properties- >Columns- >Customize Columns and Filter(或直接用快捷键Ctrl+U)- >Comment( ...

  2. Java实现邮箱找回密码

    通过邮件找回密码功能的实现 1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的 ...

  3. XMPP协议实现原理介绍

    本文介绍XMPP协议原理及相关信息. XMPP协议简介   XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM ...

  4. hadoop错误org.apache.hadoop.util.DiskChecker$DiskErrorException Could not find any valid local directory for

    错误: org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory ...

  5. Java基础知识强化之集合框架笔记51:Map集合之Map集合的功能概述与测试

    1. Map集合的功能概述 (1)添加功能 V put(K key,V value):添加元素.这个其实还有另一个功能?先不告诉你,等会讲 如果键是第一次存储,就直接存储元素,返回null 如果键不是 ...

  6. JQuery字符串替换replace方法

    在日常的js开发中,常常会用到JQuery, 当要把字符串中的内容替换时,如果使用类似C#的string.replace方法,如下 var str='aabbccaa'; str=str.replac ...

  7. .net单元测试——常用测试方式(异常模拟、返回值测试、参数测试、数据库访问代码测试)

    最近在看.net单元测试艺术,我也喜欢单元测试,今天介绍一下如何测试异常.如何测试返回值.如何测试模拟对象的参数传递.如何测试数据库访问代码.单元测试框架使用的是NUnit,模拟框架使用的是:Rhin ...

  8. (转)PHP获取今天、昨天、明天的日期

    <?php echo "今天:".date("Y-m-d")."<br>"; echo "昨天:".d ...

  9. javascript-设置div隐藏

    html code: <div class="title"> <ul id="col02_left_title"> <li> ...

  10. SQL打印全年日历

    数据库环境:SQL SERVER 2008R2 我之前有写过打印本月日历的SQL,里头有详细的说明.具体请参考前面的博文——生成本月日历. 全年日历只是在本月日历的基础上加了月信息,并按月份分组求得. ...