免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
671 [报告]
发表于 2008-04-27 17:23 |只看该作者
呵呵,想问一个事情,就是如何把一个组合键绑到另一个组合键上?
因为c-k只能删去从光标开始以后的文字,而要删除整行则需用Ctrl-u 0 Ctrl-k,因为我更需要删除整行,所以每次按这个太麻烦,想把Ctrl-u 0 Ctrl-k绑到C-k上,这样就可以按c-k删除整行了,请问能办到吗?

论坛徽章:
0
672 [报告]
发表于 2008-04-27 22:42 |只看该作者
原帖由 projoy 于 2008-4-27 17:23 发表
呵呵,想问一个事情,就是如何把一个组合键绑到另一个组合键上?
因为c-k只能删去从光标开始以后的文字,而要删除整行则需用Ctrl-u 0 Ctrl-k,因为我更需要删除整行,所以每次按这个太麻烦,想把Ctrl-u 0 Ctrl- ...


1, Emacs 很强,功能很多。要用好、用爽,必须善于学习、总结。你问的问题可以在手册里查到,也可以在本帖中找到例子
2, 不用 C-u 0 C-k; C-a C-k 就行了。
3, 你是不是用操作vi的思路来操作emacs? 我在emacs中的做法是把要删除的部分mark上,然后 C-w
4, 建议你不要修改emacs默认的快捷键,否则A,你到别人机器上会不适应;B,大部分快捷键实际上都被占了,所以一改动就影响好几个快捷键。

论坛徽章:
0
673 [报告]
发表于 2008-04-28 06:43 |只看该作者
呵呵,知道了,不好意思啊,我会认真学习的。呵呵,谢谢指点

论坛徽章:
0
674 [报告]
发表于 2008-04-29 21:58 |只看该作者

请教lgfang:关于switch-case格式设置问题

现在我的emacs里显示的switch-case格式是:
switch (ch) {
case '1':
    ....;
    break;
case '2':
    ....;
    break;
}


我想把它改成:
switch (ch) {
    case '1':
        ....;
        break;
    case '2':
        ....;
        break;
}

请问:我应该怎么设置才能让它按我想要的格式显示呢?
我试了设置c-style,但是都是第一种格式。
希望您看到后能帮我一下。谢谢!

论坛徽章:
0
675 [报告]
发表于 2008-05-02 13:52 |只看该作者
我在UBUNTU下CVS了一个EMACS,打开后却出现如下warning
Warning (initialization): Building Emacs overflowed pure space.  (See the node Pure Storage in the Lisp manual for details.)
请问这是怎么回事?虽然不影响使用,可是每次都出来,每次都得关掉,蛮不爽的。

论坛徽章:
0
676 [报告]
发表于 2008-05-05 11:14 |只看该作者
原帖由 molisiye 于 2008-4-29 21:58 发表
现在我的emacs里显示的switch-case格式是:
switch (ch) {
case '1':
    ....;
    break;
case '2':
    ....;
    break;
}


我想把它改成:
switch (ch) {
    case '1':
        ....;
   ...


设置一下c style 然后重启emacs就行了。关键是case-label要往里缩进。例如

  1. ;; C/C++ indentation style
  2. (defconst lgfang-c-style
  3.   '((c-tab-always-indent        . t)
  4.     (c-basic-offset . 4)
  5.     (c-ignore-auto-fill . nil)
  6.     (c-comment-only-line-offset . (0 . 0))
  7.     (c-hanging-braces-alist     . (
  8.                                    (substatement-open after before)
  9.                                    (brace-list-open)
  10.                                    ))
  11.     (c-hanging-colons-alist     . ((member-init-intro before)
  12.                                    (inher-intro)
  13.                                    (case-label after)
  14.                                    (label after)
  15.                                    (access-label after)))
  16.     (c-cleanup-list             . (scope-operator
  17.                                    empty-defun-braces
  18.                                    defun-close-semi))
  19.     (c-offsets-alist . (
  20.                         (knr-argdecl-intro . 5)
  21.                         (arglist-intro . +)
  22.                         (arglist-close . c-lineup-close-paren)
  23.                         (inclass . +)
  24.                         (member-init-intro . +)
  25.                         (statement-block-intro . +)
  26.                         (defun-block-intro . +)
  27.                         (substatement-open . 0)
  28.                         (label . 0)
  29.                         (statement-case-open . +)
  30.                         (statement-case-intro . +)
  31.                         (case-label . +)
  32.                         (statement-cont . c-lineup-math)
  33.                         (inline-open . 0)
  34.                         (brace-list-open . +)
  35.                         (topmost-intro-cont . 0)
  36.                         ))
  37.     (c-special-indent-hook . c-gnu-impose-minimum)
  38.     (c-block-comment-prefix . "")
  39.     (c-echo-syntactic-information-p . t)
  40.     )
  41.   "lgfang's C Programming Style")
  42. (c-add-style "lgfang" lgfang-c-style nil)

复制代码

论坛徽章:
0
677 [报告]
发表于 2008-05-06 18:00 |只看该作者
可以看看O'Reilly那本关于Emacs的书。

论坛徽章:
0
678 [报告]
发表于 2008-05-23 13:22 |只看该作者

C代码格式问题

呵呵真是搞不懂,为什么我的这个C程序会是这样的格式?我编好后用C+M+\,代码就没变,还是这个样子,请问如何才能设置成正常的样子?就是11,17,31到40行,明显就是没有缩进好嘛,可是我连手工调整都不行,呵呵水平太有限了这是我的.emacs,请大家看看是设置有问题吗?
  1. ;插件路径
  2. (add-to-list 'load-path "/cygdrive/e/HOME/smouse/emacscool")
  3. (add-to-list 'load-path "/cygdrive/e/HOME/smouse/emacscool/ecb-2.32")
  4. (add-to-list 'load-path "/cygdrive/e/HOME/smouse/emacscool/cedet-1.0pre4/common")
  5. (add-to-list 'load-path "/cygdrive/e/HOME/smouse/emacscool/emms-3.0")







  6. ;;放歌听嘿嘿
  7. (defun emms ()
  8.   (interactive)
  9.   (require 'emms-init))
  10. (global-set-key [f9] 'emms)

  11. (setq gdb-many-windows t)
  12. (load-library "multi-gud.el")
  13. (load-library "multi-gdb-ui.el")

  14. ;自定义按键
  15. (global-set-key [f4] 'shell);F1进入Shell
  16. (global-set-key [f5] 'gdb);F5调试程序
  17. (global-set-key [f1] 'compile);F1编译文件
  18. (setq compile-command "make ")
  19. (global-set-key [f8] 'other-window);F8窗口间跳转
  20. (global-set-key [C-return] 'kill-this-buffer);C-return关闭当前buffer
  21. (global-set-key [f10] 'split-window-vertically);F10分割窗口
  22. (global-set-key [f11] 'delete-other-windows);F11 关闭其它窗口
  23. (global-set-key (kbd "C-,") 'backward-page);文件首
  24. (global-set-key (kbd "C-.") 'forward-page);文件尾

  25. ;普通设置
  26. (setq inhibit-startup-message t);关闭起动时闪屏
  27. (setq visible-bell t);关闭出错时的提示声
  28. (setq make-backup-files nil);不产生备份文件
  29. (setq default-major-mode 'text-mode);一打开就起用 text 模式
  30. (add-hook 'text-mode-hook 'turn-on-auto-fill);打开text后是自动换行自动换行
  31. (global-font-lock-mode t);语法高亮
  32. (auto-image-file-mode t);打开图片显示功能
  33. (fset 'yes-or-no-p 'y-or-n-p);以 y/n代表 yes/no
  34. (column-number-mode t);显示列号
  35. (show-paren-mode t);显示括号匹配
  36. (display-time-mode 1);显示时间,格式如下
  37. (setq display-time-24hr-format t)
  38. (setq display-time-day-and-date t)
  39. (tool-bar-mode nil);去掉那个大大的工具栏
  40. (scroll-bar-mode nil);去掉滚动条
  41. ;(mouse-avoidance-mode 'animate);光标靠近鼠标指针时,让鼠标指针自动让开
  42. (setq mouse-yank-at-point t);支持中键粘贴
  43. (transient-mark-mode t);允许临时设置标记
  44. (setq x-select-enable-clipboard t);支持emacs和外部程序的粘贴
  45. (setq frame-title-format '("" buffer-file-name "@emacs" ));在标题栏显示buffer名称
  46. (setq default-fill-column 80);默认显示 80列就换行

  47. ;鼠标滚轮,默认的滚动太快,这里改为3行
  48. (defun up-slightly () (interactive) (scroll-up 3))
  49. (defun down-slightly () (interactive) (scroll-down 3))
  50. (global-set-key [mouse-4] 'down-slightly)
  51. (global-set-key [mouse-5] 'up-slightly)

  52. ;shell,gdb退出后,自动关闭该buffer
  53. (add-hook 'shell-mode-hook 'mode-hook-func)
  54. (add-hook 'gdb-mode-hook 'mode-hook-func)
  55. (defun mode-hook-func  ()
  56.   (set-process-sentinel (get-buffer-process (current-buffer))
  57.                         #'kill-buffer-on-exit))
  58. (defun kill-buffer-on-exit (process state)
  59.   (message "%s" state)
  60.   (if (or
  61.        (string-match "exited abnormally with code.*" state)
  62.        (string-match "finished" state))
  63.       (kill-buffer (current-buffer))))


  64. ;加入color-theme插件
  65. (require 'color-theme)
  66. (color-theme-blue-mood)

  67. (setq initial-frame-alist '((top . 30) (left . 0) (width . 139) (height . 44)))



  68. (add-hook 'window-setup-hook 'maximize-frame t)

  69. (setq make-backup-files nil)
  70. ;; 设定不产生备份文件

  71. (setq auto-save-mode nil)
  72. ;;自动保存模式文件


  73. ;;;C的风格
  74. ;我的C设置:
  75. ;C语言编辑
  76. (add-hook 'c-mode-hook 'linux-c-mode)
  77. (add-hook 'c++-mode-hook 'linux-cpp-mode)
  78. ;; 设置imenu的排序方式为按名称排序
  79. (setq imenu-sort-function 'imenu--sort-by-name)
  80. (defun linux-c-mode()
  81. ;; 将回车代替C-j的功能,换行的同时对齐
  82.   (define-key c-mode-map [return] 'newline-and-indent)
  83.   (interactive)
  84. ;; 设置C程序的对齐风格
  85.   (c-set-style "K&R")
  86. ;; 自动模式,在此种模式下当你键入{时,会自动根据你设置的对齐风格对齐
  87. ; (c-toggle-auto-state)
  88. ;; 此模式下,当按Backspace时会删除最多的空格
  89.   (c-toggle-hungry-state)
  90. ;; TAB键的宽度设置为4
  91.   (setq c-basic-offset 4)
  92. ;; 在菜单中加入当前Buffer的函数索引
  93.   (imenu-add-menubar-index)
  94. ;; 在状态条上显示当前光标在哪个函数体内部
  95.   (which-function-mode)
  96. )
  97. (defun linux-cpp-mode()
  98.   (define-key c++-mode-map [return] 'newline-and-indent)
  99.   (define-key c++-mode-map [(control c) (c)] 'compile)
  100.   (interactive)
  101.   (c-set-style "K&R")
  102.   ;(c-toggle-auto-state)
  103.   (c-toggle-hungry-state)
  104.   ;(setq c-basic-offset 8)
  105.   (imenu-add-menubar-index)
  106.   (which-function-mode)
  107.   )



  108. ;;字体
  109. ;; create a fontsets
  110. (create-fontset-from-fontset-spec
  111. "-adobe-courier-medium-r-*-*-14-*-*-*-*-*-fontset-adobe,
  112.   latin-iso8859-1:-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-1,
  113.   latin-iso8859-2:-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-2,
  114.   cyrillic-iso8859-5:-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-5,
  115.   chinese-gb2312:*-song-medium-r-normal-*-14-*")
  116. (create-fontset-from-fontset-spec
  117. "-adobe-courier-medium-o-*-*-14-*-*-*-*-*-fontset-adobe,
  118.   latin-iso8859-1:-adobe-courier-medium-o-*-*-14-*-*-*-*-*-*-1,
  119.   latin-iso8859-2:-adobe-courier-medium-o-*-*-14-*-*-*-*-*-*-2,
  120.   cyrillic-iso8859-5:-adobe-courier-medium-o-*-*-14-*-*-*-*-*-*-5,
  121.   chinese-gb2312:*-song-medium-r-normal-*-14-*")
  122. (create-fontset-from-fontset-spec
  123. "-adobe-courier-bold-o-*-*-14-*-*-*-*-*-fontset-adobe,
  124.   latin-iso8859-1:-adobe-courier-bold-o-*-*-14-*-*-*-*-*-*-1,
  125.   latin-iso8859-2:-adobe-courier-bold-o-*-*-14-*-*-*-*-*-*-2,
  126.   cyrillic-iso8859-5:-adobe-courier-bold-o-*-*-14-*-*-*-*-*-*-5,
  127.   chinese-gb2312:*-song-medium-r-normal-*-14-*")
  128. (create-fontset-from-fontset-spec
  129. "-adobe-courier-bold-r-*-*-14-*-*-*-*-*-fontset-adobe,
  130.   latin-iso8859-1:-adobe-courier-bold-r-*-*-14-*-*-*-*-*-*-1,
  131.   latin-iso8859-2:-adobe-courier-bold-r-*-*-14-*-*-*-*-*-*-2,
  132.   cyrillic-iso8859-5:-adobe-courier-bold-r-*-*-14-*-*-*-*-*-*-5,
  133.   chinese-gb2312:*-song-medium-r-normal-*-14-*")
  134. (set-default-font "fontset-adobe")
  135. (setq default-frame-alist (append '((font . "fontset-adobe")
  136.                                     (width . 78) (height . 45))))
  137. ;;行号
  138. ;; 加载显示行号模块
  139. (require 'display-line-number)
  140. ;; 如果想所有打开的文件都显示行的话就打开下面的注释
  141. (global-display-line-number-mode 1)
  142. ;; 设置显示格式
  143. (setq display-line-number-format "%4d|")

  144. ;; 仅对某种 mode 启动显示行号的模式
  145. (add-hook 'c-mode-hook 'display-line-number-mode)





  146. ;;ctrl-o换行哈哈我太高兴了
  147. (define-key global-map (kbd "C-o") 'vi-open-next-line)

  148. (defun vi-open-next-line (arg)
  149. "Move to the next line (like vi) and then opens a line."
  150. (interactive "p")
  151. (end-of-line)
  152. (open-line arg)
  153. (next-line 1)
  154. (indent-according-to-mode))


  155. ;; tabbar
  156. (require 'tabbar)
  157. (tabbar-mode t)
  158. (global-set-key (kbd "M--") 'tabbar-backward-group)
  159. (global-set-key (kbd "M-=") 'tabbar-forward-group)
  160. (global-set-key (kbd "M-1") 'tabbar-backward)
  161. (global-set-key (kbd "M-2") 'tabbar-forward)
  162. ;;现在,我们就可以按alt加上1或者2什么的来在不同的tab间切换了。当然了,你也可以用鼠标。



  163. ;;原来的 tabbar 强行对你的 buffer 进行分组,但是如果你想在你编辑的buffer间切换而不论它们是什么组,那么似乎没有一个好办法。但是 tabbar 本来提供了一个机制,让你可以自己确定 tab 属于哪组,只要修改 tabbar-buffer-groups-function 就行了。

  164. ;这样,我可以把每个 buffer 同时加入它所在的 major mode 的组和一个叫做 "default" 的组,这样我在 default 组里就可以方便的浏览到所有的 buffer 了。而切换到其它组就可以分组浏览。你还可以自行把某些 buffer 分到一组,比如我可以把 scheme-mode 的 buffer 和 inferer-scheme-mode 的 buffer 分到同一个组。


  165. (setq tabbar-buffer-groups-function 'tabbar-buffer-ignore-groups)

  166. (defun tabbar-buffer-ignore-groups (buffer)
  167.   "Return the list of group names BUFFER belongs to.
  168. Return only one group for each buffer."
  169.   (with-current-buffer (get-buffer buffer)
  170.     (cond
  171.      ((or (get-buffer-process (current-buffer))
  172.           (memq major-mode
  173.                 '(comint-mode compilation-mode)))
  174.       '("Process")
  175.       )
  176.      ((member (buffer-name)
  177.               '("*scratch*" "*Messages*"))
  178.       '("Common")
  179.       )
  180.      ((eq major-mode 'dired-mode)
  181.       '("Dired")
  182.       )
  183.      ((memq major-mode
  184.             '(help-mode apropos-mode Info-mode Man-mode))
  185.       '("Help")
  186.       )
  187.      ((memq major-mode
  188.             '(rmail-mode
  189.               rmail-edit-mode vm-summary-mode vm-mode mail-mode
  190.               mh-letter-mode mh-show-mode mh-folder-mode
  191.               gnus-summary-mode message-mode gnus-group-mode
  192.               gnus-article-mode score-mode gnus-browse-killed-mode))
  193.       '("Mail")
  194.       )
  195.      (t
  196.       (list
  197.        "default"  ;; no-grouping
  198.        (if (and (stringp mode-name) (string-match "[^ ]" mode-name))
  199.            mode-name
  200.          (symbol-name major-mode)))
  201.       )
  202.      
  203.      )))




  204. ;; set fly-on-spell
  205. (autoload 'flyspell-mode "flyspell" "On-the-fly spelling checker." t)
  206. (autoload 'flyspell-delay-command "flyspell" "Delay on command." t)
  207. (autoload 'tex-mode-flyspell-verify "flyspell" "" t)
  208. ;(global-flyspell-mode)




  209. ;;使用c-j来代替goto-line,指定移动到某行
  210. (define-key global-map (kbd "C-j") 'goto-line)




复制代码

a.GIF (62.5 KB, 下载次数: 49)

a.GIF

论坛徽章:
0
679 [报告]
发表于 2008-05-23 17:07 |只看该作者

回复 #678 projoy 的帖子

你是不是用了linum.el?
你把前面的行号去掉看看。我遇到过一次,实际上对齐是正确的,但linum的bug导致显示起来好像没对齐。turn off linum-mode就行了。

论坛徽章:
0
680 [报告]
发表于 2008-05-23 22:54 |只看该作者
linum.el?我也用了显示行号的东西,是display-line-number.el难道是这个的问题?我晕,这就是说显示行号和缩进只能显示一个?呵呵emacs不会这么不讲理吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP