| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2410 人关注过本帖
标题:【久受尊名 不详】比较智能的处理硬换行的emacs lisp代码
只看楼主 加入收藏
阿鞠尼
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:首尔
等 级:蒙面侠
威 望:5
帖 子:1467
专家分:4442
注 册:2012-5-30
收藏
得分:10 
来来来

喜欢睡觉 却经常熬夜
2013-01-16 12:35
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:10 
专程蹭分

无知
2013-01-16 12:37
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11782
专家分:43421
注 册:2006-5-13
收藏
得分:10 
楼主引我入此,何不散分与我。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2013-01-16 13:11
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
学习了。


顺带提一下 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版 的小程序都不能处理。


[ 本帖最后由 pangding 于 2013-1-22 11:16 编辑 ]
2013-01-22 11:13
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
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用zklhp在2013-1-22 11:47:38的发言:


Emacs默认也有快捷键 但不好摁而且用法挺奇怪的。。
哦,我只知道 M-^
2013-01-22 11:58
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
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用zklhp在2013-1-22 12:07:24的发言:

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

膜拜一下pangding版主深厚的vim功底 祝您感情生活顺利 你貌似比我大罢 也该成家立业了 嗯 祝你成功。。

谢谢你的祝福。

我 89 的,就比你大一岁吧。着急可以成家了,不着急也可以再拖拖。
难得我和我的女朋友特别投缘,找到真爱不容易呀。不过今年是我本命年,又是寡妇年,家长说结婚不好。也许等明年了,今年应该会订婚吧。
2013-01-22 12:35
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
chuankay
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-1-14
收藏
得分:0 
搜索lisp关键词来着
2013-04-05 15:48
快速回复:【久受尊名 不详】比较智能的处理硬换行的emacs lisp代码
数据加载中...
 
   



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

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