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

本篇文章记录的是一些有用的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:重复命令。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值