分页: 1 / 1
怎样在emacs中方便的实现这个小功能
发表于 : 2007-11-27 16:46
由 zw2mba
如题:
1----- if ( condition ) {
2----------if ( condition ){
3--------------end;
4----------}
5------}
从 1 到 2 时 c-j 即可, 2 到 3 时也是 c-j 即可,但是从 3 到 4 要怎么办呢?我是先打上 } 然后在移回到 } 在 c-j 感觉方法拙大了.......哪位emacsor能帮个忙,给一下解决方法!谢谢!!!
发表于 : 2007-11-27 18:17
由 zhangsong023
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)
发表于 : 2007-11-27 18:19
由 zhangsong023
几乎就没有在Emacs中手动缩进过。
发表于 : 2007-11-27 20:22
由 zw2mba
这样应该只是把 c-j 变成了 回车! 你是怎么实现从来不用手动缩进的呢,请指教!
发表于 : 2007-11-27 21:03
由 zw2mba
又搜了搜发现在.emacs中加入
(add-hook 'c-mode-common-hook
(lambda () (c-toggle-auto-hungry-state 1)))
就可以了,感谢zhangsong23,呵呵!
发表于 : 2007-11-27 23:07
由 zhangsong023
zw2mba 写了:这样应该只是把 c-j 变成了 回车! 你是怎么实现从来不用手动缩进的呢,请指教!
你不是问的是从3怎么到4么?
直接输入'}',它自己就会跳到适当的地方了啊。
打开auto-new-line-mode,之后,再像上面那样绑定一下回车键,几平就不用手动缩进了。
实在要手动缩进,用M-i,不过我基本上不用。
发表于 : 2007-12-06 20:28
由 deerlux
贴一下我以前自己设置的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)
)