| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2410 人关注过本帖
标题:【久受尊名 不详】比较智能的处理硬换行的emacs lisp代码
取消只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:4 
【久受尊名 不详】比较智能的处理硬换行的emacs lisp代码
;*****************************************************************************************************************
;作者:zklhp
;Email:zklhp@
;QQ:493165744
;2013.1.14
;转载请保持完整
;*****************************************************************************************************************

写得比较水啦

程序代码:
(defun make-a-long-sentence ()
  "make a long sentence and also work on region"
  (interactive)
  (if (region-active-p)
      (progn    ; there is a text selection
    (let (str pt)
      (while (< (point) (region-end))
        (progn
          (delete-indentation 1)        ;一个现成函数 但要处理连字符
          (backward-char)
          (setq str (buffer-substring (setq pt (point)) (1+ pt)))
          (if (string-equal str "-")
          (delete-char 2)
        (forward-char)
        )
          )
        )
      )
    )
    )
  (progn
    (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))


这个实现了从

this
is
a hard-war-
ped



this is a hard-warped

的一键转换 而且加了处理选区(region)的功能

程序代码:
(defun dwim-make-a-long-sentence ()
  "make a long sentence and also work on region"
  (interactive)
  (if (region-active-p)
      (progn    ; there is a text selection
    (save-restriction
      (narrow-to-region (region-beginning) (region-end))
      (goto-char (point-min))
      (while (search-forward "\n" nil t) (replace-match "" nil t))
      )
    )
    (progn
      (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))


这个实现的是不加空格和删除连字符的版本 主要用于中文 例子

这句话

人为
分开了
好讨厌呀



这句话被人为分开了好讨厌呀

进步之处也是能处理选区

效率大大提高了诶 Emacs的无限可定制性真好

但有一个 要是能自动判断哪些是截断的就好了 不过我感觉实现有困难。。

显摆一下 顺便发今年的第一个有点技术的帖子。。



[ 本帖最后由 zklhp 于 2013-1-15 13:00 编辑 ]
搜索更多相关主题的帖子: Email 智能 
2013-01-15 11:54
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用madfrogme在2013-1-15 14:53:57的发言:

z版把emacs玩的出神入化的时候有没有感到曲高和寡的悲凉

【曲高和寡】这四个字 等什么时候我能去emacs的开发者邮件列表谈笑风生再说罢
2013-01-15 15:24
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用pangding在2013-1-22 11:13:47的发言:

学习了。


顺带提一下 vim 里的实现方法。
  由于 vim 里有 J 和 gJ 两个指令,连接行已经十分方便了。(助记符是 join)
  它们的区别是 J 连接行后,第一行行末和第二行行首的空格全部会删掉只保留一个。但有一些例外,比如如果第二行行首是标点符号,就不加空格了。如果第一行行末是句子结束用的标点,比如是 ., !, ? 之类的会加两个空格。
  gJ 则是连接一律删除所有空格。
  有些选项可以改变 J 的行为:置位 'cpoptions'('cpo') 中的 j 可以让 J 只在 . 后加两个空格(即是说 !, ? 之类加一个)。关闭 'joinspaces'('js') 这个选项(默认是开启的),可以让 J 的行为最多只加一个空格。置位 'formatoptions'('fo') 中的 M 可以让 J 智能判断,当处理多字节的字符时,比如中文、日文、俄文,一律不加空格。而处理单字节字符时,比如英文、法文,行为不变。

可以看出 vim 自带的功能也不能处理连字符。所以要想完成 z版 的工作也得自己写函数。先把行连接好,再把变成 '- ' 的东西删掉就行了。
function Join() range
    exe a:firstline . ',' . a:lastline . 'j'
    s/- //ge
endfunction
在某些情况下,比如文中自带了 '- ' 的情况,这样处理效果和 z版 的会有些区别。虽然这种字符是不合文法的,但也可以算是个 bug 吧。
另一方面,有的时候折可能会在连字符上出现。比如 a 2-year-old baby 这样的,即使在 year- 后面折行了,连接回来也不能删去 '-'。这种情况我和 z版 的小程序都不能处理。

Emacs默认也有快捷键 但不好摁而且用法挺奇怪的。。
2013-01-22 11:47
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用pangding在2013-1-22 11:58:23的发言:

哦,我只知道 M-^
我也是后来知道这个的 这个是下面一行往上面去 当然也可以用参数让它连下面一行 但麻烦了

膜拜一下pangding版主深厚的vim功底 祝您感情生活顺利 你貌似比我大罢 也该成家立业了 嗯 祝你成功。。
2013-01-22 12:07
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用pangding在2013-1-22 12:35:01的发言:


谢谢你的祝福。

我 89 的,就比你大一岁吧。着急可以成家了,不着急也可以再拖拖。
难得我和我的女朋友特别投缘,找到真爱不容易呀。不过今年是我本命年,又是寡妇年,家长说结婚不好。也许等明年了,今年应该会订婚吧。

记得到时候散分庆祝哦
2013-01-22 12:52
快速回复:【久受尊名 不详】比较智能的处理硬换行的emacs lisp代码
数据加载中...
 
   



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

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