一些有用的 Emacs 配置(窗口快速切换、一键透明效果、任意位置删除整行等)
本篇文章记录的是一些有用的 Emacs 配置,有些是自己原创,有些是借鉴别人(能记起来出处的我放了链接)。
规定:C 代表 Ctrl,M 代表 Alt。
1.设置一次跳跃 n 行的快捷键
按 C-M-n 可以连续下跳 5 行,按 C-M-p 可以连续上跳 5 行:
1 (global-set-key (kbd "C-M-n")
2 (lambda () (interactive) (next-line 5)))
3 (global-set-key (kbd "C-M-p")
4 (lambda () (interactive) (previous-line 5)))
2. 在一个 emacs 中打开多个 shell buffer
在 emacs 中,使用 M-x(输入: shell 或 eshel) 来打开 shell 的 buffer,当作 shell 终端使用。但是有时候需要在一个 emacs 中打开多个 shell buffer,需要进行一下设置:
1 ;; set open multi shell
2 (defun wcy-shell-mode-auto-rename-buffer (text)
3 (if (eq major-mode 'shell-mode)
4 (rename-buffer (concat "shell:" default-directory) t)))
5 (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 代表重做。
1 ;;set windows undo and redo
2 (when (fboundp 'winner-mode)
3 (winner-mode 1)
4 (global-set-key (kbd "C-x 4 u") 'winner-undo)
5 (global-set-key (kbd "C-x 4 r") 'winner-redo)
6 )
(感谢 redguardtoo)
4. 在行末或行中位置删除整行
1 (defadvice kill-ring-save (before slickcopy activate compile)
2 (interactive
3 (if mark-active (list (region-beginning) (region-end))
4 (list (line-beginning-position)
5 (line-beginning-position 2)))))
6 (defadvice kill-region (before slickcut activate compile)
7 (interactive
8 (if mark-active (list (region-beginning) (region-end))
9 (list (line-beginning-position)
10 (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 中做以下配置:
1 ;;set windows numbering
2 (require 'window-numbering)
3 (window-numbering-mode 1)
(感谢 redguardtoo)
6. 设置 color-theme 主题
1 ;;set color theme
2 (add-to-list 'load-path"~/.emacs.d/")
3 (require ')
4 (color-theme-initialize)
5 ;; 这个是你选择的主题,后面的 calm forest 就是它的名字,注意使用小写。
6 (color-theme-calm-forest)
(7) 设置透明效果
我觉得这个很有用,特别是需要一边写代码一边看参照其他文档时。按 F11 键可以一键切换透明度,非常方便:
1 ;;set transparent effect
2 (global-set-key [(f11)] 'loop-alpha)
3 (setq alpha-list '((100 100) (95 65) (85 55) (75 45) (65 35)))
4 (defun loop-alpha ()
5 (interactive)
6 (let ((h (car alpha-list))) ;; head value will set to
7 ((lambda (a ab)
8 (set-frame-parameter (selected-frame) 'alpha (list a ab))
9 (add-to-list 'default-frame-alist (cons 'alpha (list a ab)))
10 ) (car h) (car (cdr h)))
11 (setq alpha-list (cdr (append alpha-list (list h))))
12 )
13 )
(感谢 ccat)
8. 将光标移动到当前行的中间位置
1 (defun middle-of-line ()
2 "Put cursor at the middle point of the line."
3 (interactive)
4 (goto-char (/ (+ (point-at-bol) (point-at-eol)) 2)))
5 (global-set-key (kbd "C-z") 'middle-of-line)
9. 优化注释功能
1 (defun qiang-comment-dwim-line (&optional arg)
2 (interactive "*P")
3 (comment-normalize-vars)
4 (if (and (not (region-active-p)) (not (looking-at "[ \t]*$")))
5 (comment-or-uncomment-region (line-beginning-position) (line-end-position))
6 (comment-dwim arg)))
7 (global-set-key "\M-;" 'qiang-comment-dwim-line)
(感谢 cmdblock)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2018-01-28 CentOs下安装gcc/g++/gdb
2018-01-28 VS2015配置Linux开发远程调试