免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: flw
打印 上一主题 下一主题

有关 Emacs 使用技巧的内容请在这个帖子讨论。 [复制链接]

论坛徽章:
0
651 [报告]
发表于 2008-04-22 20:52 |只看该作者
换行对齐
这个看似简单功能太有用了!!!不知道省了多少无谓的光标移动。很多时候,我们修改了一行语句后,想立刻跳到下一行,并且光标自动移到正确缩进的位置。在普通的编辑器里,换行前光标得移动到行尾,然后我们再敲下ENTER。Vi里CTRL-o解决了这个问题,让我们在一行的任何地方换到下一行,自动缩进,而不用担心把上一行分成两半。而Emacs有了下面的配置,也就支持CTRL-o了。够强大吧?

(local-set-key [(control o)] 'vi-open-next-line)(defun vi-open-next-line (arg)

"Move to the next line (like vi) and then opens a line."
(interactive "p")
(end-of-line)
(open-line arg)
(next-line 1)
(indent-according-to-mode))


我就是看到这个才想起的,可是我按C-o时是光标不动,而光标后的文字换行,每按一次就换一次行,郁闷!

论坛徽章:
0
652 [报告]
发表于 2008-04-22 21:02 |只看该作者
原帖由 projoy 于 2008-4-22 20:52 发表
换行对齐
这个看似简单功能太有用了!!!不知道省了多少无谓的光标移动。很多时候,我们修改了一行语句后,想立刻跳到下一行,并且光标自动移到正确缩进的位置。在普通的编辑器里,换行前光标得移动到行尾,然 ...


local-set-key换成global-set-key试试

论坛徽章:
0
653 [报告]
发表于 2008-04-24 07:02 |只看该作者
谢谢啦,我这就去看看

[ 本帖最后由 projoy 于 2008-4-24 07:03 编辑 ]

论坛徽章:
0
654 [报告]
发表于 2008-04-24 07:06 |只看该作者
哎,效果还是一样,难道emacs没有这个功能吗?我晕

论坛徽章:
0
655 [报告]
发表于 2008-04-24 09:50 |只看该作者
原帖由 projoy 于 2008-4-22 20:52 发表
换行对齐
这个看似简单功能太有用了!!!不知道省了多少无谓的光标移动。很多时候,我们修改了一行语句后,想立刻跳到下一行,并且光标自动移到正确缩进的位置。在普通的编辑器里,换行前光标得移动到行尾,然 ...


  1. (local-set-key [(control o)] 'vi-open-next-line)

  2. (defun vi-open-next-line (arg)
  3. "Move to the next line (like vi) and then opens a line."
  4. (interactive "p")
  5. (end-of-line)
  6. (open-line arg)
  7. (next-line 1)
  8. (indent-according-to-mode))
复制代码


这个代码是好用的(我测过了)。这段代码包含两部分:第一部分是将C-o 绑定到函数vi-open-next-line上;剩下的定义了函数vi-open-next-line。你描述的现象来看,没绑定成功。你确定两段代码都运行了么?

论坛徽章:
0
656 [报告]
发表于 2008-04-24 21:21 |只看该作者
还是老问题,特别是lgfang前辈竟然用同样的代码实现了功能,我真是无语,只好做了一个演示,请看看我这里到底是哪里错了
首先是在VI中实现了我想要的功能。我只是按了o。

vi.gif (6.89 KB, 下载次数: 37)

vi.gif

论坛徽章:
0
657 [报告]
发表于 2008-04-24 21:23 |只看该作者
这个是我在windows xp下使用emacs是的情形,我已经把.emacs清空了在输入新的.emacs的。

emacs-win下显示.gif (50.77 KB, 下载次数: 40)

emacs-win下显示.gif

论坛徽章:
0
658 [报告]
发表于 2008-04-24 21:24 |只看该作者
这个是我在linux下使用的情况。同样,我事先把.emacs清空了

[ 本帖最后由 projoy 于 2008-4-24 21:29 编辑 ]

emacs-linux下显示.gif (93.41 KB, 下载次数: 40)

emacs-linux下显示.gif

论坛徽章:
0
659 [报告]
发表于 2008-04-25 09:33 |只看该作者
原帖由 projoy 于 2008-4-24 21:24 发表
这个是我在linux下使用的情况。同样,我事先把.emacs清空了



你可以按下面的步骤试一下:
1.只留下这段代码,其他删除
2.将local-set-key换成global-set-key,保存,退出
3.重新启动emacs,再试一下看行不行。

ps. 我对elisp不怎么懂,不过我觉得在.emacs里面直接local-set-key不妥,local-set-key是用来设定当前keymap的键映射,可是在启动过程中的local keymap是什么也不知道(是我不知道啊,不一定没有,懒得查文档了)。我觉得这个函数主要有两个可用之处:一是给某个mode添加hook的时候,拿我的一个做例子吧:
     (add-hook 'c-mode-hook (lambda () (local-set-key [(return)] 'newline-and-indent) ))
另一个就是启动后想为某个函数添加或者更改键映射的时候,譬如说你可以这样试一下:
就像你上面演示的那些gif里面那样,如果键映射不生效,你可以先M:(就是按alt+shift+,然后输入(local-set-key [(control o)] 'vi-open-next-line),回车。这时候你再试试应该就可以了。(如果不可以别找我麻烦啊,我也不知道为啥)。

还有我猜测你说得local-set-key改成global-set-key不行是你改完了之后,没有重新启动或者执行eval-current-buffer让设置生效。
再试试吧,别气馁,开始用emacs肯定有个适用期,慢慢熟悉了就好了。

good luck!

论坛徽章:
0
660 [报告]
发表于 2008-04-25 10:01 |只看该作者
哇,谢谢你耐心的讲解,我安装你说的做了,可是还是不行,真是郁闷,看着同寝那家伙拿Vi气我,哼,一定搞明白这个问题!!哈哈不过真是有点厌烦了,呵呵希望很快我就能知道这到底是为什么哈,再次感谢你啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP