怎样在emacs中方便的实现这个小功能

Vim、Emacs配置和使用
回复
zw2mba
帖子: 20
注册时间: 2006-11-21 17:23
送出感谢: 0
接收感谢: 0
联系:

怎样在emacs中方便的实现这个小功能

#1

帖子 zw2mba » 2007-11-27 16:46

如题:
1----- if ( condition ) {
2----------if ( condition ){
3--------------end;
4----------}
5------}

从 1 到 2 时 c-j 即可, 2 到 3 时也是 c-j 即可,但是从 3 到 4 要怎么办呢?我是先打上 } 然后在移回到 } 在 c-j 感觉方法拙大了.......哪位emacsor能帮个忙,给一下解决方法!谢谢!!!
zhangsong023
帖子: 768
注册时间: 2006-09-20 19:56
送出感谢: 0
接收感谢: 1 次

#2

帖子 zhangsong023 » 2007-11-27 18:17

C-j,根本不需要。

代码: 全选

(defun c-ret-hook ()
   (define-key c-mode-base-map (kbd "RET") 'c-context-line-break))
(add-hook 'c-mode-hook 'c-ret-hook)
zhangsong023
帖子: 768
注册时间: 2006-09-20 19:56
送出感谢: 0
接收感谢: 1 次

#3

帖子 zhangsong023 » 2007-11-27 18:19

几乎就没有在Emacs中手动缩进过。
zw2mba
帖子: 20
注册时间: 2006-11-21 17:23
送出感谢: 0
接收感谢: 0
联系:

#4

帖子 zw2mba » 2007-11-27 20:22

这样应该只是把 c-j 变成了 回车! 你是怎么实现从来不用手动缩进的呢,请指教!
zw2mba
帖子: 20
注册时间: 2006-11-21 17:23
送出感谢: 0
接收感谢: 0
联系:

#5

帖子 zw2mba » 2007-11-27 21:03

又搜了搜发现在.emacs中加入
(add-hook 'c-mode-common-hook
(lambda () (c-toggle-auto-hungry-state 1)))
就可以了,感谢zhangsong23,呵呵!
zhangsong023
帖子: 768
注册时间: 2006-09-20 19:56
送出感谢: 0
接收感谢: 1 次

#6

帖子 zhangsong023 » 2007-11-27 23:07

zw2mba 写了:这样应该只是把 c-j 变成了 回车! 你是怎么实现从来不用手动缩进的呢,请指教!
你不是问的是从3怎么到4么?
直接输入'}',它自己就会跳到适当的地方了啊。
打开auto-new-line-mode,之后,再像上面那样绑定一下回车键,几平就不用手动缩进了。

实在要手动缩进,用M-i,不过我基本上不用。
deerlux
帖子: 14
注册时间: 2006-10-15 13:04
送出感谢: 0
接收感谢: 0

#7

帖子 deerlux » 2007-12-06 20:28

贴一下我以前自己设置的c-mode吧,可以实现楼主所想要的功能。

代码: 全选

(add-hook 'c-mode-hook 'linux-c-mode)
(add-hook 'c++-mode-hook 'linux-cpp-mode)
;; 设置imenu的排序方式为按名称排序
(setq imenu-sort-function 'imenu--sort-by-name)
(defun linux-c-mode()
;; 将回车代替C-j的功能,换行的同时对齐
  (define-key c-mode-map [return] 'newline-and-indent)
  (interactive)
;; 设置C程序的对齐风格
  (c-set-style "K&R")
;; 自动模式,在此种模式下当你键入{时,会自动根据你设置的对齐风格对齐
  (c-toggle-auto-state)
;; 此模式下,当按Backspace时会删除最多的空格
  (c-toggle-hungry-state)
;; TAB键的宽度设置为8
  (setq c-basic-offset 8)
;; 在菜单中加入当前Buffer的函数索引
  (imenu-add-menubar-index)
;; 在状态条上显示当前光标在哪个函数体内部
  (which-function-mode)
 )
(defun linux-cpp-mode()
  (define-key c++-mode-map [return] 'newline-and-indent)
  (define-key c++-mode-map [(control c) (c)] 'compile)
  (interactive)
  (c-set-style "K&R")
  (c-toggle-auto-state)
  (c-toggle-hungry-state)
  (setq c-basic-offset 8)
  (imenu-add-menubar-index)
  (which-function-mode)
  )
回复

回到 “Vim和Emacs”