Dell D630 Ubuntu 8.04之路(六) emacs基本配置(转)

原文地址:http://www.cppblog.com/hyjune/archive/2008/05/21/50653.html

emcas难学易用,可扩展性强。有人把她当作信仰,有人认为他是魔鬼!学习首先记住基本的键盘快捷键,学会常用插件,深入学习还需学习lisp语言。本节紧对emacs作为开发环境做一个基本的介绍。

基本安装设置请参考:Ubuntu Ubuntu 8.04 LTS 配置笔记
emacs的基本安装设置完成后,使emacs成为C开发环境还需做如下设置,新建$HOME/.emacs文件
vim $HOME/.emacs本文把emacs插件放在 $HOME/.emacs.d/site-lisp/ 目录下,如果在$HOME下没有找到.emacs.d目录,请手动建立
在.emacs文件添加
;;LOAD_PATH
(add-to-list 'load-path' "~/.emacs.d/site-lisp")
Color theme
在.emacs文件添加
下载Color theme解压后放到$HOME/.emacs.d/site-lisp/ 目录下 ;;COLOR_THEME
(require 'color-theme)
(color-theme-classic)显示行号
从http://ann77.stu.cdut.edu.cn/EmacsDisplayLineNumber.html下载,把里面的 display-line-number.el放到加载路径~/.emacs.d/site-lisp/目录下。
在.emacs文件添加
(require 'display-line-number)
(setq display-line-number-format "%3d ")
(add-hook 'c-mode-hook 'display-line-number-mode)
(add-hook 'c++-mode-hook 'display-line-number-mode)参考:http://ann77.stu.cdut.edu.cn/EmacsDisplayLineNumber.html
感觉ann77的这个的确比setnu.el好用
[color=red]session
从http://emacs-session.sourceforge.net/ 下载,把里面的 session.el 解压出来放到加载路径~/.emacs.d/site-lisp/目录下。
在.emacs文件添加
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
(load "desktop")
(desktop-save-mode) [/color]


阅读代码
在emacs下读代码通常有一下几种工具,etags,ECB(emacs code browser),cscope,Xref。这几种工具也可以相互配合使用。其中:etags是emcas自带的标准插件,注意不是ctags。Xref是的Xrefactory的免费版本,非GNU,支持C和java的跳转,自动补全插等功能,比cedet+ECB组合速度要快,用起来也很简单,回答几个问题新建一个project,然后几个快捷键就可以满足需要了,美中不足的是对C++支持是收费,且狂贵,这个小东西要400刀,也没找到破解的版本,写C++代码的时候还得用CEDET+ECB。

安装 cscope
sudo apt-get install cscope找到xcscope.el文件 cp到 ~/.emacs.d/site-lisp/
在.emacs文件添加
(require 'xcscope)cscope的主要功能和对应的快捷键:
;; C-c s a 设定初始化的目录,一般是你代码的根目录
;; C-s s I 对目录中的相关文件建立列表并进行索引
;; C-c s s 序找符号
;; C-c s g 寻找全局的定义
;; C-c s c 看看指定函数被哪些函数所调用
;; C-c s C 看看指定函数调用了哪些函数
;; C-c s e 寻找正则表达式
;; C-c s f 寻找文件
;; C-c s i 看看指定的文件被哪些文件include)

安装CEDET
从http://cedet.sourceforge.net/下载cedet,解压到~/.emacs.d/site-lisp/在cedet目录下运行make。以下载到的cedet-1.0pre4.tar.gz为例
cp cedet-1.0pre4.tar.gz ~/.emacs.d/site-lisp/
cd ~/.emacs.d/site-lisp/
tar xvzf cedet-1.0pre4.tar.gz
cd cedet-1.0pre4
make详情请参考INSTALL文档
在.emacs文件添加
(add-hook 'texinfo-mode-hook (lambda () (require 'sb-texinfo)))
(load-file "~/.emacs.d/site-lisp/cedet-1.0pre4/common/cedet.el")
(semantic-load-enable-code-helpers)
(autoload 'speedbar-frame-mode "speedbar" "Popup a speedbar frame" t)
(autoload 'speedbar-get-focus "speedbar" "Jump to speedbar frame" t)
(define-key-after (lookup-key global-map [menu-bar tools])
[speedbar]
'("Speedbar" .
speedbar-frame-mode)
[calendar])安装ECB
从http://ecb.sourceforge.net/ 下载ECB,解压到~/.emacs.d/site-lisp/ 即可
在.emacs文件添加
(add-to-list 'load-path "~/.emacs.d/site-lisp/ecb-2.32")
(load-file "~/.emacs.d/site-lisp/ecb-2.32/ecb.el")
(require 'ecb)
(setq ecb-auto-activate t
ecb-tip-of-the-day nil
ecb-tree-indent 4
ecb-windows-height 0.5
ecb-windows-width 0.20)
ecb-auto-compatibility-check nil
ecb-version-check nil
inhibit-startup-message t重启Emacs
在emacs执行M-x ecb-byte-complie编译,可以加快ECB运行速度
M-x ecb-show-help看在线帮助
M-x customize-option RET ecb-source-path RET设置源码目录

ECB默认是不支持鼠标响应的,需作如下设置:
打开emacs中的菜单 ECB->Preferences->Most important...,
找到Ecb Primary Secondary Mouse Buttons:并点击Show Value,
选择第三个选项:Primary:mouse-1,secondary:mouse-2
保存选项为以后所用

设置自动补全
在.emacs文件添加
;;;;C/C++语言启动时自动加载semantic对/usr/include的索引数据库
(setq semanticdb-search-system-databases t)
(add-hook 'c-mode-common-hook
(lambda ()
(setq semanticdb-project-system-databases
(list (semanticdb-create-database
semanticdb-new-database-class
"/usr/include")))))

;; project root path
(setq semanticdb-project-roots
(list
(expand-file-name "/")))
;; 避免semantic占用CPU过多
(setq-default semantic-idle-scheduler-idle-time 432000)

(defun my-indent-or-complete ()
(interactive)
(if (looking-at "\\>")
(hippie-expand nil)
(indent-for-tab-command)))
(autoload 'senator-try-expand-semantic "senator")

(setq hippie-expand-try-functions-list
'(
senator-try-expand-semantic
try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-expand-list
try-expand-list-all-buffers
try-expand-line
try-expand-line-all-buffers
try-complete-file-name-partially
try-complete-file-name
try-expand-whole-kill
)
);;快捷键
在.emacs文件添加
(global-set-key [M-/] 'hippie-expand)
;;右Ctrl+\ 自动补全menu
(global-set-key "\C-\\" 'semantic-ia-complete-symbol-menu)
;; 跳转到全局定义
(global-set-key "\C-xg" 'cscope-find-global-definition-no-prompting)安装Xref
从 http://xref-tech.com/xrefactory/downloads/下载1.X.X linux版本(1.X.X为免费版,2.X.X为收费版)。解压后放到~/.emacs.d/site-lisp/目录下。以下载的xref-1.6.10-i86pcLinux.tar.gz为例
cp xref-1.6.10-i86pcLinux.tar.gz ~/.emacs.d/site-lisp/
tar -zxvf xref-1.6.10-i86pcLinux.tar.gz
cd ~/.emacs.d/site-lisp/xref
sh ./xrefsetup.........
请参考INSTALL文档
安装程序在.emacs文件上追加了
;; Xrefactory configuration part ;;
;; some Xrefactory defaults can be set here
(defvar xref-current-project nil) ;; can be also "my_project_name"
(defvar xref-key-binding 'global) ;; can be also 'local or 'none
(setq load-path (cons "/home/uiu/.emacs.d/site-lisp/xref/emacs" load-path))
(setq exec-path (cons "/home/uiu/.emacs.d/site-lisp/xref" exec-path))
(load "xrefactory")
;; end of Xrefactory configuration part ;;
(message "xrefactory loaded")为使上次建立的project仍有效,需将
(defvar xref-current-project nil) ;; can be also "my_project_name"改为
(defvar xref-current-project t) ;; can be also "my_project_name";; c-mode设置
在.emacs文件添加
;; c-mode公共设置
(defun my-c-mode-common-hook ()
(setq default-tab-width 4)
(setq tab-width 4)
(setq c-basic-offset 4)
(hs-minor-mode t))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

;; C语言设置
(defun my-c-mode-hook ()
(c-set-style "cc-mode"))
(add-hook 'c-mode-hook 'my-c-mode-hook)

;; C++设置
(defun my-c++-mode-hook ()
(c-set-style "stroustrup"))
(add-hook 'c++-mode-hook 'my-c++-mode-hook)输入左边的括号,就会自动补全右边的部分.包括(), "", [] , {} , 等
在.emacs文件添加
(defun my-c-mode-auto-pair ()
(interactive)
(make-local-variable 'skeleton-pair-alist)
(setq skeleton-pair-alist '(
(?` ?` _ "''")
(?\( ? _ " )")
(?\[ ? _ " ]")
(?{ \n > _ \n ?} >)))
(setq skeleton-pair t)
(local-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "{") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "`") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "[") 'skeleton-pair-insert-maybe))
(add-hook 'c-mode-hook 'my-c-mode-auto-pair)
(add-hook 'c++-mode-hook 'my-c-mode-auto-pair)
我的.emacs相关的配置,仅供参考
;;LOAD_PATH
(add-to-list 'load-path' "~/.emacs.d/site-lisp")
;=========================================END==============================================;


;;COLOR_THEME
(require 'color-theme)
(color-theme-classic)
;=========================================END==============================================;


;;LANG
(set-language-environment 'Chinese-GB)
(set-keyboard-coding-system 'utf-8)
(set-clipboard-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-selection-coding-system 'utf-8)
(modify-coding-system-alist 'process "*" 'utf-8)
(setq default-process-coding-system '(utf-8 . utf-8))
(setq-default pathname-coding-system 'utf-8)
(set-file-name-coding-system 'utf-8)
(setq ansi-color-for-comint-mode t) ;;处理shell-mode乱码,好像没作用
;=========================================END==============================================;

;;MY CUSTOMIZE
(auto-image-file-mode t);打开图片显示功能
(display-time-mode 1);显示时间,格式如下
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(transient-mark-mode t);允许临时设置标记
(setq frame-title-format '("" buffer-file-name "@emacs" ));在标题栏显示buffer名称
(setq default-fill-column 80);默认显示 80列就换行
(set-scroll-bar-mode nil) ; 取消滚动栏
;;(tool-bar-mode nil) ; 取消工具栏
(setq default-directory "~/") ; 设置打开文件的缺省路径
(ido-mode t) ; 打开ido,使打开文件时后面有提示,在emacs23带有ido
(setq visible-bell t) ; 关闭烦人的出错时的提示声
(setq inhibit-startup-message t) ; 关闭emacs启动时的画面
(setq gnus-inhibit-startup-message t) ; 关闭gnus启动时的画面
(fset 'yes-or-no-p 'y-or-n-p) ; 按 y 或空格键表示 yes,n 表示 no
(setq mouse-yank-at-point t) ; 不在鼠标点击的那个地方插入剪贴板内容
(setq kill-ring-max 200) ; 设置粘贴缓冲条目数量
(setq auto-save-mode nil) ; 自动保存模式
(setq x-select-enable-clipboard t) ; 允许emacs和外部其他程序的粘贴
(setq user-full-name "XXXXXX")
(setq user-mail-address "XXXXXX@gmail.com") ; 设置有用的个人信息,这在很多地方有用。
(setq global-font-lock-mode t) ; 进行语法加亮。
(setq-default kill-whole-line t) ; 在行首 C-k 时,同时删除该行
(setq show-paren-mode t) ;打开括号匹配显示模式
(setq show-paren-style 'parenthesis) ;括号匹配时可以高亮显示另外一边的括号,但光标不会烦人的跳到另一个括号处。
(setq mouse-avoidance-mode 'animate) ;光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线。
(setq auto-image-file-mode t) ;让 Emacs 可以直接打开和显示图片
(setq default-major-mode 'text-mode)
; (add-hook 'text-mode-hook 'turn-on-auto-fill) ; 设置缺省主模式是text,,并进入auto-fill次模式.而不是基本模式fundamental-mode
(setq-default auto-fill-function 'do-auto-fill) ; Autofill in all modes;;

;(setq-default indent-tabs-mode nil)
;(setq default-tab-width 8)
;(setq tab-stop-list ())
;;不用 TAB 字符来indent, 这会引起很多奇怪的错误。编辑 Makefile 的时候也不用担心,因为 makefile-mode 会把 TAB 键设置成真正的 TAB 字符,并且加亮显示的。注:还没搞清楚
(setq column-number-mode t)
(setq line-number-mode t) ; 显示行号
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(display-time) ; 显示时间
(setq sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
(setq sentence-end-double-space nil) ; 设置 sentence-end 可以识别中文标点。不用在 fill 时在句号后插入两个空格。
(setq enable-recursive-minibuffers t) ; 可以递归的使用 minibuffer
(setq scroll-margin 3 scroll-conservatively 10000)
;;防止页面滚动时跳动, scroll-margin 3 可以在靠近屏幕边沿3行时就开始滚动,可以很好的看到上下文。
(setq track-eol t) ; 当光标在行尾上下移动的时候,始终保持在行尾。
(setq Man-notify-method 'pushy) ; 当浏览 man page 时,直接跳转到 man buffer。
(setq next-line-add-newlines nil) ; Emacs 21 中已经是缺省设置。按 C-n 或向下键时不添加新行。
(setq speedbar-show-unknown-files t);;可以显示所有目录以及文件
(setq dframe-update-speed nil);;不自动刷新,手动 g 刷新
(setq speedbar-update-flag nil)
(setq speedbar-use-images nil);;不使用 image 的方式
(setq speedbar-verbosity-level 0)
(setq time-stamp-active t)
(setq time-stamp-warn-inactive t)
(setq time-stamp-format "%:y-%02m-%02d %3a %02H:%02M:%02S chunyu") ; 设置时间戳,标识出最后一次保存文件的时间。
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top) ;让 dired 可以递归的拷贝和删除目录。
;=========================================END==============================================;


;;xcscope
(require 'xcscope)
;; C-c s a 设定初始化的目录,一般是你代码的根目录
;; C-s s I 对目录中的相关文件建立列表并进行索引
;; C-c s s 序找符号
;; C-c s g 寻找全局的定义
;; C-c s c 看看指定函数被哪些函数所调用
;; C-c s C 看看指定函数调用了哪些函数
;; C-c s e 寻找正则表达式
;; C-c s f 寻找文件
;; C-c s i 看看指定的文件被哪些文件include
;=========================================END==============================================;

;;文件头header设置
(require 'header2)
;;(require 'header)
(setq make-header-hooks '(header-mode-line
header-blank
header-file-name
header-blank
header-copyright
header-blank
header-author
header-creation-date
header-modification-author
header-modification-date
header-update-count
header-blank
header-history
header-blank
))
(setq header-copyright-notice " XXXXXXX" )
(make-local-variable 'user-full-name)
(make-local-variable 'user-mail-address)
;=========================================END==============================================;


;;setnu
;(add-hook 'c-mode-common-hook '(lambda() (require 'setnu+) ) ) ;;设置C/C++mode显示行号
;(add-hook 'c++-mode-common-hook '(lambda() (require 'setnu+) ) )

;; 加载显示行号模块
(require 'display-line-number)
;;(add-hook 'c-mode-common-hook '(lambda() (require 'display-line-number) ) )
;; 如果想所有打开的文件都显示行的话就打开下面的注释
;;(global-display-line-number-mode 1)
;; 设置显示格式
(setq display-line-number-format "%3d ")
;; 在 tool bar 上增加一个图标,
;; 注意: 一定要在 load-path 中 可以找到 display-line-nuber.xpm 文件才行。
;;
;;(tool-bar-add-item "display-line-number"
;; 'display-line-number-mode
;; 'display-line-number-mode
;; :help "display line number!"
;; :button (cons :toggle '(and (boundp
;; display-line-number-mode)
;; display-line-number-mode)))
;;
;; 使用方法
;; M-x display-line-number-mode
;; 用来 toggle 显示行号的模式
;; M-x display-line-number-mode-on
;; 启动显示行号的模式
;; M-x display-line-number-mode-off
;; 关闭显示行号的模式
;; 仅对某种 mode 启动显示行号的模式
;; (add-hook 'c-mode-hook 'display-line-number-mode)
(add-hook 'c-mode-hook 'display-line-number-mode)
(add-hook 'c++-mode-hook 'display-line-number-mode)
;=========================================END==============================================;

;;tabbar
(require 'tabbar)
(tabbar-mode)
;=========================================END==============================================;

;加入会话功能
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
(load "desktop")
(desktop-save-mode)
;=========================================END==============================================;

;; 启用redo
(require 'redo)
;=========================================END==============================================;

;;cedet ecb安装
(add-hook 'texinfo-mode-hook (lambda () (require 'sb-texinfo)))
(load-file "~/.emacs.d/site-lisp/cedet-1.0pre4/common/cedet.el")
(semantic-load-enable-code-helpers)
(autoload 'speedbar-frame-mode "speedbar" "Popup a speedbar frame" t)
(autoload 'speedbar-get-focus "speedbar" "Jump to speedbar frame" t)
(define-key-after (lookup-key global-map [menu-bar tools])
[speedbar]
'("Speedbar" .
speedbar-frame-mode)
[calendar])

;; 指定semantic临时文件的路径,避免到处都是临时文件
(setq semanticdb-default-save-directory "~/backups/emacs/semantic")

;;;;C/C++语言启动时自动加载semantic对/usr/include的索引数据库
(setq semanticdb-search-system-databases t)
(add-hook 'c-mode-common-hook
(lambda ()
(setq semanticdb-project-system-databases
(list (semanticdb-create-database
semanticdb-new-database-class
"/usr/include")))))

;; project root path
(setq semanticdb-project-roots
(list
(expand-file-name "/")))
;; 避免semantic占用CPU过多
(setq-default semantic-idle-scheduler-idle-time 432000)

;;ecb
(add-to-list 'load-path "~/.emacs.d/site-lisp/ecb-2.32")
(load-file "~/.emacs.d/site-lisp/ecb-2.32/ecb.el")
(require 'ecb)
(setq ecb-auto-activate nil
ecb-tip-of-the-day nil
ecb-tree-indent 4
ecb-windows-height 0.5
ecb-windows-width 0.13)
ecb-auto-compatibility-check nil
ecb-version-check nil
inhibit-startup-message t
;;重启Emacs
;;运行M-x ecb-byte-complie编译,可以加快运行速度
;;M-x ecb-show-help看在线帮助
;;M-x customize-option RET ecb-source-path RET设置源码目录

;;设置自动补全
(defun my-indent-or-complete ()
(interactive)
(if (looking-at "\\>")
(hippie-expand nil)
(indent-for-tab-command)))
(autoload 'senator-try-expand-semantic "senator")

(setq hippie-expand-try-functions-list
'(
senator-try-expand-semantic
try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-expand-list
try-expand-list-all-buffers
try-expand-line
try-expand-line-all-buffers
try-complete-file-name-partially
try-complete-file-name
try-expand-whole-kill
)
)
;=========================================END==============================================;


;; c-mode设置
;; c-mode公共设置
(defun my-c-mode-common-hook ()
(setq default-tab-width 4)
(setq tab-width 4)
(setq c-basic-offset 4)
(hs-minor-mode t))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

(load-library "hideshow")
(add-hook 'c-mode-hook 'hs-minor-mode)
(add-hook 'c++-mode-hook 'hs-minor-mode)
(add-hook 'java-mode-hook 'hs-minor-mode)
(add-hook 'perl-mode-hook 'hs-minor-mode)
(add-hook 'php-mode-hook 'hs-minor-mode)
(add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)
;;能把一个代码块缩起来,需要的时候再展开
;; M-x hs-minor-mode
;; C-c @ ESC C-s show all
;; C-c @ ESC C-h hide all
;; C-c @ C-s show block
;; C-c @ C-h hide block
;; C-c @ C-c toggle hide/show

;; C语言设置
(defun my-c-mode-hook ()
(c-set-style "cc-mode"))
(add-hook 'c-mode-hook 'my-c-mode-hook)

;; C++设置
(defun my-c++-mode-hook ()
(c-set-style "stroustrup"))
(add-hook 'c++-mode-hook 'my-c++-mode-hook)

;=========================================END==============================================;

(defun my-c-mode-auto-pair ()
(interactive)
(make-local-variable 'skeleton-pair-alist)
(setq skeleton-pair-alist '(
(?` ?` _ "''")
(?\( ? _ " )")
(?\[ ? _ " ]")
(?{ \n > _ \n ?} >)))
(setq skeleton-pair t)
(local-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "{") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "`") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "[") 'skeleton-pair-insert-maybe))
(add-hook 'c-mode-hook 'my-c-mode-auto-pair)
(add-hook 'c++-mode-hook 'my-c-mode-auto-pair)
;;输入左边的括号,就会自动补全右边的部分.包括(), "", [] , {} , 等等。
;=========================================END==============================================;


;;bakup
(setq auto-save-default nil) ;不生成 #filename# 文件
(setq make-backup-files t) ;设定不产生备份文件
(setq auto-save-mode nil) ;自动保存模式
;;(setq-default make-backup-files t) ; 不生成临时文件
(setq delete-old-versions t)
(setq version-control 'never) ; 启用版本控制,即可以备份多次
(setq kept-old-versions 2) ; 备份最原始的版本两次,及第一次编辑前的文档,和第二次编辑前的文档
(setq kept-new-versions 1) ; 备份最新的版本1次,理解同上
(setq delete-old-versions t) ;删掉不属于以上3中版本的版本
(setq backup-directory-alist '((" " . "~/backups/emacs/"))) ; 设置备份文件的路径
(setq backup-by-copying t) ;备份设置方法,直接拷贝

;; Emacs 中,改变文件时,默认都会产生备份文件(以 ~ 结尾的文件)。可以完全去掉
;; (并不可取),也可以制定备份的方式。这里采用的是,把所有的文件备份都放在一
;; 个固定的地方("~/backups")。对于每个备份文件,保留最原始的两个版本和最新的
;; 1个版本。并且备份的时候,备份文件是复本,而不是原件。
;=========================================END==============================================;


;;HOT KEY
;;保留F3、F4、F5、F6、F7、F8 for Xrefactory
(global-set-key [f1] 'shell) ; 进入shell
(global-set-key [C-f9] 'gdb) ; 调试
(setq compile-command "make -f Makefile") ; 编译
(global-set-key [f9] 'do-compile)
(global-set-key [f10] 'speedbar) ; 启动/关闭speedbar

(global-set-key (kbd "M-\[") 'hs-hide-block) ; 隐藏块
(global-set-key (kbd "M-\]") 'hs-show-block) ; 显示块
(global-set-key [C-f12] 'comment-or-uncomment-region) ; 注释 / 取消注释
(global-set-key [f12] 'c-indent-line-or-region) ; 格式化代码

(global-set-key (kbd "C-`") 'ecb-goto-window-sources) ; 切换到ecb sources窗口
(global-set-key [C-tab] 'other-window) ; 切换窗口
(global-set-key [M-return] 'delete-other-windows) ; 关闭其他窗口
(global-set-key "\C-xk" 'kill-this-buffer) ; 关闭当前buffer
(global-set-key (kbd "s-SPC") 'set-mark-command) ; 改变set mark键

;; 显示buffer列表
(global-set-key (kbd "C-x C-b") 'ibuffer)

;; 跳转到当前目录的Dired
(global-set-key "\C-x\C-j" 'dired-jump)

;; 跳转到寄存器指定的位置
(global-set-key "\C-xj" 'jump-to-register)

;; 跳转到全局定义
(global-set-key "\C-xg" 'cscope-find-global-definition-no-prompting)

(global-set-key (kbd "S-<SPC>") 'set-mark-command) ;用shift+space 来 setmark 了, C-@ 很不好按。

(global-set-key [C-=] 'my-indent-or-complete) ;自动补全或缩进
(global-set-key [\C-f12] 'ecb-activate) ;启用ECB
(global-set-key [\C-S-f12] 'ecb-deactivate) ;退出ECB
;; 补全命令 右Ctrl+\ 自动补全menu
(global-set-key [M-/] 'hippie-expand)
;;(global-set-key [(control return)] 'senator-complete-symbol);
;;(global-set-key [(control return)] ' senator-completion-menu-popup)
(global-set-key "\C-\\" 'semantic-ia-complete-symbol-menu)
;;tabbar
(global-set-key (kbd "S-<up>") 'tabbar-backward-group)
(global-set-key (kbd "S-<down>") 'tabbar-forward-group)
(global-set-key (kbd "S-<left>") 'tabbar-backward)
(global-set-key (kbd "S-<right>") 'tabbar-forward)
(global-set-key ( kbd "C-.") 'redo)
;=========================================END==============================================;


(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(ecb-options-version "2.32")
'(ecb-primary-secondary-mouse-buttons (quote mouse-1--mouse-2)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
;=========================================END==============================================;


;; Xrefactory configuration part ;;
;; some Xrefactory defaults can be set here
(defvar xref-current-project t) ;; can be also "my_project_name"
;;注:这里的nil改为了t
(defvar xref-key-binding 'global) ;; can be also 'local or 'none
(setq load-path (cons "/home/uiu/.emacs.d/site-lisp/xref/emacs" load-path))
(setq exec-path (cons "/home/uiu/.emacs.d/site-lisp/xref" exec-path))
(load "xrefactory")
;; end of Xrefactory configuration part ;;
(message "xrefactory loaded")
;=========================================END==============================================;
Emacs配置及使用方法 - 优雅而经典的Lisp Emacs是一款功能强大的文本编辑器,它提供了丰富的功能和灵活的配置选项,使得用户可以根据自己的需求进行个性化定制。其中,Lisp语言是Emacs的配置语言,通过编写Lisp代码,可以实现对Emacs的定制化设置和功能扩展。本文将介绍Emacs的配置方法,并提供一些常用的Lisp代码示例。Emacs具有强大的可定制性,通过Lisp语言编写配置代码,你可以根据自己的需求对Emacs进行个性化定制,添加插件、设置主题、绑定快捷键等。Emacs的灵活性使得用户可以根据自己的需求添加各种定制化功能。 阅读详情

相关推荐

我的Emacs个性化配置指南

本文还有配套的精品资源,点击获取 简介:Emacs是一个高度可定制的文本编辑器,尤其在自由软件社区中受到赞誉。通过编写Emacs Lisp(Elisp)脚本,用户可以扩展Emacs的功能以满足个人需求。本文介绍了Emacs配置文件的基本结构、语言环境设置、界面调整、外部包管理、快捷键定制、工作空间管理以及如何有效地组织配置文件。此外,还提供了Emacs配置文件 em...

weixin_28809949的博客 1495

Emacs 配置

首先呢,我不是Emacs大师,也是新手,所以这里记述的也是初级配置。 首先介绍一个网页:http://tuhdo.github.io/c-ide.html 我是按照这个网页的配置做的。中间遇到一些问题,所以记述一下。 第一,按照链接网页《quick setup》走一边。我采用了《ggtags》而非《helm-gtags》是以需要修改init.el 第二,如链接网页所述,必须要学会用pack......

taoxianchong的专栏 1582

我的个性化Emacs配置:emacs.d个人识字指南

本文还有配套的精品资源,点击获取 简介:Emacs.d 是 Emacs 编辑器的个性化配置目录,包含多个 .lisp 文件,用于扩展和定制编辑器功能。用户可以通过修改这些文件实现快捷键自定义、插件管理、高级文本处理、代码编辑和工作区管理等。本文分享了一个个人的 Emacs 配置集,提供学习 Emacs Lisp 和优化工作流程的宝贵资源。 1. Emacs.d 目...

weixin_35045970的博客 1492

为什么 emacs 在 windows 下总是查找不到引用

最近迷上了的,因为它比使用阅读源代码来得更快,可能还更准确。但是现实情况是上用起来很好,上只能用来查找定义,想要查找引用却始终失败。更完整的的错误显示: 生成的方法是:在编译完成后,顺便运行一下即可。 我用到的的一些快捷键:-设置,-取消,-单步步过,-设置断点,-步入,-步出。 查找引用()。 里没有我所相像的,在查找到的结果窗口内按或者可以直接跳转而不会失去焦点。 在中想要查看某变量的值,将光标移到它的结尾,按。 当上执行出现时,不要按,这会导致整个退出,而要按让它继续。 当上执行出现省略号时,如下,

ftuc5dn的博客 774

ksz9031 mmd读取不了_ZYNQ. LwIP.PHY.KSZ9031RNX

新一块板子米尔科技的z-turn 使用的PHY芯片是Micrel的 KSZ9031RNX 而不是zedboard上的Marvell的。直接使用lwip的echo server demo时会报错 , 无法启动。在网上找了很久终于找到几篇关于这个问题的文章。修改PHY的驱动xemacpsif_physpeed.c文件该芯片的PHY Identifier 是 0x0022bsp设置中修改参数以提速MEM...

weixin_39626298的博客 924

从Excel到Power Pivot:构建你的第一个商业智能分析模型

本文详细介绍了如何从Excel升级到Power Pivot,构建你的第一个商业智能分析模型。通过激活Power Pivot功能、导入数据、建立表关系、创建智能度量值以及打造交互式仪表盘,帮助用户高效处理百万行级别的数据,实现数据自动关联和动态分析,大幅提升商业决策效率。

weixin_30629653的博客 256

我的emacs配置

本emacs配置参考了很多人的配置,本人只是做了一下组合而已 我的emacs的整体配置在http://code.google.com/p/my-research-back/ 有, 大家如果感兴趣可以去看下 ;;设置用户名和邮件地址 (setq user-full-name    "XXX") (setq user-mail-address "XXX") (defconst my-

一直在路上 7025

MoveIt2 Servo实战:解锁UR机械臂在ROS2中的实时遥操作与动态响应

本文深入探讨了MoveIt2 Servo在UR机械臂实时遥操作中的应用,展示了如何通过ROS2实现毫秒级动态响应。文章详细解析了Servo的核心价值、环境配置、控制器适配及高级调优技巧,特别适用于需要高精度控制的工业场景,如VR手术训练和汽车装配线。

weixin_29044157的博客 247

Emacs 系列——emacs 基础配置

Emacs配置应以实用为主,避免过度优化。基础配置包括快捷键、习惯设置和功能包启用,建议通过init.el文件进行模块化管理,将不同配置分文件存放。Windows系统需额外配置字体以解决中文显示问题,而编码设置应统一为UTF-8以保证多语言兼容性。核心原则是保持配置文件简洁,重点在于提升编辑效率而非无休止地调整配置。

subdudu的专栏 1021

基于ESP32的AI 古琴:基于音频指纹的民族乐器智能校准系统设计与实现

硬件选型兼顾实用性与低成本,接线简单易实现;基于 MFCC 的音频指纹算法,能有效识别古琴弦的音高特征;人机交互友好,新手可快速上手。

weixin_42300449的博客 308

如何在 SAP BTP 上使用 Integration Suite 消费 S/4HANA Cloud API

SAP Integration Suite是一个集成平台即服务(iPaaS),允许开发人员顺利地将内部部署和基于云的应用程序和流程与SAP管理的工具和预构建内容进行集成。登录 SAP Business Technology Platform Cockpit,进入 integration suite:再点击 API management 进入 API Portal:或者直接从收藏夹里打开链接:https://304a49cetrial.integrationsuitetrial-apiportal.cfapp

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1699

emacs配置

emacs compilation mode

one___thousand的专栏 882

【OpenClaw企业级智能体实战】第09篇:OpenClaw金融投研实战:17个场景+完整代码,打造专属数字研究员

金融投研面临信息过载、流程重复、数据安全合规三大核心痛点,OpenClaw作为本地部署的新一代AI智能体,凭借“长期记忆+主动执行+数据不出域”的优势,成为券商分析师集体追捧的效率工具。本文基于8家头部券商公开研报,拆解OpenClaw在金融投研的17个核心应用场景(信息处理、研报撰写、量化策略、流程自动化),详解原理、技术选型、实操流程,并提供可直接运行的完整代码与执行结果。文章兼顾新手入门与进阶提升,强调安全隔离部署与幻觉防范,读者可按步骤搭建专属投研智能体,将信息处理、数据整理等重复工作效率提升80%

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 676

emacs参考资料整理

spacemacs dired模式用法: https://blog.slegetank.com/blog/20170106-dired.html

liweigao01的专栏 425

Vue+OpenLayers7入门到实战目录,OpenLayers7中文文档,OpenLayers7中文手册,OpenLayers7中文教程,OpenLayers7文档pdf

本篇作为《Vue+OpenLayers7入门到实战》所有文章的二合一汇总目录,方便查找。本专栏源码是由OpenLayers7.x版本结合Vue框架编写。本专栏从Vue搭建脚手架到如何引入OpenLayers7依赖的每一步详细新手教程,再到通过各种入门案例和综合性的实战案例,带领大家快速上手Vue+OpenLayers7开发。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 3973

【网络安全】Python代码审计高危函数与安全审计建议

Python 灵活且动态的特性使得开发便捷,但同时也带来了严重安全隐患。如果开发者缺乏安全意识,极易引入命令执行、反序列化漏洞及模板注入漏洞。本文总结了 Python 中常见的高危函数、模块和第三方库,并给出对应的审计建议及其原理解析,供安全研究人员和开发者参考。

等风来 416

Emacs梦之配置——Likhon的GNU Emacs配置指南

Emacs梦之配置——Likhon的GNU Emacs配置指南 1. 项目介绍 本项目是Likhon个人使用的GNU Emacs配置,旨在提供一种高度自定义的Emacs体验。配置基于init.el、my-lisp目录和一些额外的包,以增强Emacs的默认功能。适用于GNU/Linux、macOS和Windows平台,且仅兼容GNU Emacs 27.1及以上版本。本项目提供了易于使用的配置,适合E...

gitblog_00754的博客 372

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

我的.emacs配置(原生Emacs,不依赖任何插件)

我的.emacs配置 (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right.

博客标题 952

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LiliumToonGraph动漫头发着色器教程:3步实现Kajiya-Kay各向异性头发高光

**LiliumToonGraph** 是一款基于 Unity URP(通用渲染管线)ShaderGraph 构建的开源卡通着色器(Toon Shader)包。本教程面向新手,带你用它的头发着色器图,**3 步实现 Kajiya-Kay 各向异性头发高光**,无需手写 Shader 代码。无论你正在做动漫风 3D 角色、2.5D 游戏,还是虚拟形象渲染,这份 Unity 动漫头发着色器教程都能让你

gitblog_00002的博客 946

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

在Emacs中使用etags来浏览代码

    1).安装etags,一般来讲,这是emacs的内建程式;    2).在当前目录建立etag -R --languages=c++,生成TAGS文件。     3).将创建好的tag表通知emacs:    M-x visit-tags-table,选择TAGS文件,读取文件    4).使用:    A.M-. :跳至相应的函数定义处;输入查找的标记名    B.M

ptn3900的专栏 1271

GNU Emacs效率提升:节省时间的30个高级技巧

想要成为GNU Emacs高效用户?这份终极指南将为你揭示30个专业技巧,帮助你大幅提升工作流程效率。无论你是初学者还是资深用户,这些技巧都能让你在使用Emacs时节省宝贵时间。 ## 🚀 基础配置优化技巧 ### 1. 快速启动配置 使用`use-package`声明式配置管理,让你的Emacs配置文件更加清晰和高效。这个强大的包管理工具能自动处理依赖关系和延迟加载。 ### 2. 智能

gitblog_01193的博客 1004

Emacs Verilog mode 简单使用指南

Emacs Verilog mode以其强大的功能集和高度的可定制性,成为了许多硬件工程师的首选开发环境。从基本的语法高亮到高级的代码导航,再到与其他开发工具的无缝集成,它全方位支持Verilog开发的每一个环节。通过掌握上述指南内容,结合不断的实践与探索,你将能充分挖掘Emacs Verilog mode的潜力,让硬件设计工作变得更加高效和愉悦。记住,Emacs的学习曲线虽陡峭,但一旦掌握了它的精髓,所带来的生产力提升是无可比拟的。

zevjay的博客 2908

如何使用React Rainbow Components构建企业级管理后台

React Rainbow Components是一套功能强大的UI组件库,专为快速构建企业级管理后台而设计。它提供了丰富的预构建组件,让开发者能够轻松创建美观、一致且功能完善的Web应用界面,大大缩短开发周期。 ## 为什么选择React Rainbow Components? React Rainbow Components拥有众多优势,使其成为构建企业级管理后台的理想选择: - **丰

gitblog_00698的博客 759

武装了下emacs

1.Tabbar(标签式的浏览):http://sourceforge.net/project/showfiles.php?group_id=79309&package_id=81110下载后的el文件放在emacs的库的加载路径下,我放在emacs的安装目录的site-lisp下,因为那里文件较少。然后在配置文件(_emacs.el或.emacs.d/init.el中添加);; ta

天涯之外 1136

Emacs 配置项目教程

Emacs 配置项目教程 1. 项目目录结构及介绍 本项目是基于 GNU Emacs 的配置项目,目录结构如下: .emacs.d/ ├── .gitattributes ├── .gitignore ├── .hunspell_personal ├── early-init.el # 初始化设置文件,用于设置一些基础的 GUI 配置 ├── init.el #...

gitblog_01129的博客 529

emacs 基本配置

索引    * 基础知识          o 缓冲区          o 信息栏          o 按键描述          o 回显区          o 内部命令          o Emacs命令行          o Emacs终端          o

hnhbdss的专栏 1809
上一篇: Dell D630 Ubuntu 8.04之路(五) 基本使用篇(转)
下一篇: Dell D630 Ubuntu 8.04之路(七) automake使用(转)
ShawnXing
博客等级 码龄20年 5粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值