| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 23723 人关注过本帖
标题:【年末钜献】Emacs越用越有意思 写一写最近的收获和心得
取消只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
结帖率:100%
收藏
 问题点数:0 回复次数:5 
【年末钜献】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 编辑 ]
搜索更多相关主题的帖子: 东西 Email 
2012-12-28 10:26
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用madfrogme在2012-12-28 17:53:55的发言:

最近没经常来了,过来顶了个
多谢大牛 顺便 我最近加了个QQ群 QQ群主一直在说你水平高 不知道有没有兴趣到群里和大家交流交流啊

我说这个没啥意思 只是问问 要是不用QQ或不想加就算了。。
2012-12-28 20:18
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
本帖由 静夜思 于 2012-12-28 15:21 加入精华

站长钦点的精华 站长我爱你。。
2012-12-28 20:18
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用madfrogme在2012-12-29 00:37:46的发言:

 
Z版表说什么大牛了,
 
我也就对linux刚入门, 计算机范围太广,
 
大家喜欢的东西也都不一样,人们也都基本只对自己的的东西感兴趣,
 
如果是讨论和linux,服务器,安全技术相关的我很想和大家交流,
 
如果是C语言,ACM之类,我真的就只有听天书的份,各种无知了。
 
最近对iptables psad fwsnort几个开源软件来构建防火墙,入侵检测很有兴趣,估计要弄上好一阵子了
 
不过也开始打算慢慢着手python,ruby ,mysql之类linux周边了。
 
话说Z版研二了?

砖二?我是砖一班的。。

感谢您的回复 我把您的回复发给那个群主让群主决定邀请不邀请罢 祝您开心。。

哦 记得要有规律作息哦
2012-12-29 11:28
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用额外覆盖在2012-12-31 23:24:01的发言:

接分不手软
没分你也接
2013-01-01 21:12
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用pangding在2013-4-30 20:51:07的发言:

忽然发现自己都没顶过这个帖子

我会经常发这种东西的 欢迎大牛批评
2013-05-01 12:26
快速回复:【年末钜献】Emacs越用越有意思 写一写最近的收获和心得
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018168 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved