Emacs越用越有意思 写一写最近的收获和心得

来源:互联网 发布:jquery.qrcode.js下载 编辑:程序博客网 时间:2024/04/30 10:48
Emacs越用越有意思 写一写最近的收获和心得
;*****************************************************************************************************************
;作者:zklhp 
;Email:zklhp@sina.com
;QQ:493165744
;2012.12.27
;转载请保持完整
;*****************************************************************************************************************

感觉写东西越来越少了 一方面搬砖忙 一方面写了也没人看 正好晚上琢磨出个好东西 顺便把最近一段时间的一些收获和心得写一写罢 这个也权作今年的总结了 能使用Emacs这种强大的工具是真能提高效率啊

当然我用Emacs也是新手啦 说错勿怪

①嘻嘻 这种特殊符号怎么打方便呢

Emacs有个很好的功能 abbrev-mode 简单来说就是缩写 比如用bc代替http://www.bccn.net 如果要完成这个替换 要么直接新建这个缩写 要么直接编辑.emacs.d文件夹里面的abbrev_defs文件 这两者是等效的 比如要实现这个 文件的内容是类似这样的

(define-abbrev-table 'text-mode-abbrev-table '(
("bc" "http://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的技巧很好用 嘻嘻。。

就这些罢 如有不当 欢迎各位批评指正

鱼台论坛http://bbs.370827.org/thread-2112-1-1.html

0 0
原创粉丝点击