【年末钜献】Emacs越用越有意思 写一写最近的收获和心得
Emacs越用越有意思 写一写最近的收获和心得;*****************************************************************************************************************
;作者:zklhp
;Email:zklhp@
;QQ:493165744
;2012.12.27
;转载请保持完整
;*****************************************************************************************************************
感觉写东西越来越少了 一方面搬砖忙 一方面写了也没人看 正好晚上琢磨出个好东西 顺便把最近一段时间的一些收获和心得写一写罢 这个也权作今年的总结了 能使用Emacs这种强大的工具是真能提高效率啊
当然我用Emacs也是新手啦 说错勿怪
①嘻嘻 这种特殊符号怎么打方便呢
Emacs有个很好的功能 abbrev-mode 简单来说就是缩写 比如用bc代替https://www.bccn.net 如果要完成这个替换 要么直接新建这个缩写 要么直接编辑.emacs.d文件夹里面的abbrev_defs文件 这两者是等效的 比如要实现这个 文件的内容是类似这样的
(define-abbrev-table 'text-mode-abbrev-table '(
("bc" "https://www.bccn.net")
)
)
这样的话 打开abbrev-mode的情况下 打bc 空格 就会替换成网址
要实现这种符号快捷输入的功能可以定义这样的东西
("O1" "①")
("O2" "②")
("O3" "③")
("O4" "④")
这样 我直接就能打出特殊符号 当然这还不够方便 如果能按一个键替换就好了 当然有 比如容易的是C-x ' 和 C-x a e 诶 好麻烦啊 所以我把它放在M-'上了 ①② 就这么简单 而且这样不用开abbrev-mode也可以哦。。
②M-f M-b的使用能提高光标移动的效率
③两个函数方便从pdf复制内容
程序代码:
(defun make-a-long-sentence () "make a long sentence" (interactive) (let (str pt) (delete-indentation 1) ;一个现成函数 但要处理连字符 (backward-char) (setq str (buffer-substring (setq pt (point)) (1+ pt))) (if (string-equal str "-") (delete-char 2) (forward-char) ) ) ) ;; C-; (global-set-key [67108923] (quote make-a-long-sentence)) (defun dwim-make-a-long-sentence () "dwim make a long sentence" (interactive) (end-of-line) (delete-char 1) ) ;; C-' (global-set-key [67108903] (quote dwim-make-a-long-sentence)) ;; C-M-; (global-set-key [201326651] (quote dwim-make-a-long-sentence))
现在处理那种硬换行的内容方便多了
④修正鼠标放在链接上慢的问题
程序代码:
(defun mouse-fixup-help-message (msg) "Fix help message MSG for `mouse-1-click-follows-link' but speed up." (let (mp pos) (if (and mouse-1-click-follows-link (stringp msg) (string-match-p "\\`mouse-2" msg) (setq mp (mouse-pixel-position)) ;; (consp (setq pos (cdr mp))) (setq pos (cdr mp)) ;; (car pos) (>= (car pos) 0) ;; (cdr pos) (>= (cdr pos) 0) ;; (setq pos (posn-at-x-y (car pos) (cdr pos) (car mp))) (windowp (posn-window pos)) ) (with-current-buffer (window-buffer (posn-window pos)) (if (mouse-on-link-p pos) (setq msg (concat (cond ((eq mouse-1-click-follows-link 'double) "double-") ((and (integerp mouse-1-click-follows-link) (< mouse-1-click-follows-link 0)) "Long ") (t "")) "mouse-1" (substring msg 7))))))) msg)
注释掉几句 快多了 在我的配置文件里面重新定义这个函数 自动覆盖Emacs里面的 反正大家都是lisp代码
⑤修正linum-mode缩放时显示异常
程序代码:
(defadvice linum-update-window (after linum-fix-scale-bugs (win) activate compile) "fix the bug when scale text" (interactive) (if (memq 'text-scale-mode minor-mode-list) (progn (let ((width (car (window-margins win)))) ;; (or (boundp 'text-scale-mode-step) (defvar text-scale-mode-step)) ;; (or (boundp 'text-scale-mode-amount) (defvar text-scale-mode-amount)) (defvar text-scale-mode-step) (defvar text-scale-mode-amount) (setq width (ceiling (* width (expt text-scale-mode-step text-scale-mode-amount)))) (set-window-margins win width (cdr (window-margins win))) ) ) ) )
不解释了 反正可以。。 自己琢磨了好长时间的 网上的解决方法都没我这好 嘻嘻
⑥压榨键盘上的功能键
程序代码:
(require 'google-translate) (define-prefix-command 'Hyper-g-map) (global-set-key (kbd "H-g") 'Hyper-g-map) (global-set-key (kbd "H-g g") (quote google-translate-at-point)) (global-set-key (kbd "H-g H-g") (quote google-translate-at-point)) (global-set-key (kbd "H-g r") (quote google-translate-at-point-reverse)) (global-set-key (kbd "H-g H-r") (quote google-translate-at-point-reverse))
⑦方便^{}和_{}的书写
来源于LaTex的这些表示方法太好了 可惜打起来麻烦 尤其这个还要配对
程序代码:
(defun insert-_-or-insert-_-in-region () "insert _{}." (interactive) (let (pos1 pos2) (if (region-active-p) (progn (setq pos1 (region-beginning) pos2 (region-end)) (goto-char pos1) (insert "_{") (setq pos2 (+ 2 pos2)) (goto-char pos2) (insert "}") ) (progn (insert "_{}") (backward-char 1) ) ) ) ) ;; C-= (global-set-key [67108925] (quote insert-_-or-insert-_-in-region)) (defun insert-^-or-insert-^-in-region () "insert ^{}." (interactive) (let (pos1 pos2) (if (region-active-p) (progn (setq pos1 (region-beginning) pos2 (region-end)) (goto-char pos1) (insert "^{") (setq pos2 (+ 2 pos2)) (goto-char pos2) (insert "}") ) (progn (insert "^{}") (backward-char 1) ) ) ) ) ;; C-+ (global-set-key [67108907] (quote insert-^-or-insert-^-in-region))
顺便一提 Emacs lisp里函数名可以有这种符号诶 真好
⑧大小写转换
M-l 从当前位置把这个词变小写
M-u 从当前位置把这个词变大写
M-c 从当前位置把这个词变首字母大写
呵呵 都是从当前位置 有人说不方便 我感觉之所以这么定是从灵活性上考虑的 灵活性 这是Emacs的灵魂 而且 由于Emacs的可扩展性实现一个键变一个词太容易了
⑨whitespace-cleanup很好用啊
⑩十全十美
尽量减少手的移动来提高效率
一些需要动手才能摁的键尽量都调调 比如
TAB C-i 这俩功能一样
<backspace> C-h 我把它绑这里了 和bash里的保持一致
<delete> C-d 默认的
方向键自然是不能用啦 Emacs和Vi/Vim都不大实用方向键移动光标 为啥啊 效率低啊
我在想 M-h M-j M-k M-l弄成和Vim里一样 可惜会影响其他功能 好在有模拟Vim的mode 真需要的话有比这好的多的
顺便一说 机械键盘键比较高 小拇指关节压Ctrl的技巧很好用 嘻嘻。。
就这些罢 如有不当 欢迎各位批评指正
[ 本帖最后由 zklhp 于 2012-12-28 20:33 编辑 ]