天天看点

emacs backup

;------------个人信息与使用说明-------------

;;请在~/下创建.saves和.semanticdb文件夹

;--------------基本设置----------------

;关闭启动画面

(custom-set-variables '(inhibit-startup-screen t))

;;设置背景色和字体色

;;(set-foreground-color "Navy")

;;(set-background-color "Grey")

;关闭烦人的出错时的提示声

(setq visible-bell t)

;光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线

(mouse-avoidance-mode 'animate)

;滚动页面时比较舒服,不要整页的滚动

(setq     scroll-step 1

    scroll-margin 3

    scroll-conservatively 10000)

;光标不闪

(blink-cursor-mode nil)

;;光标显示为一竖线

(setq-default cursor-type 'bar)

;; 不显示工具栏

(tool-bar-mode -1)

;; 总是不显示菜单,按ctrl+鼠标右键还是能调出菜单

;(menu-bar-mode -1)

;; 支持emacs和外部程序的粘贴

(setq x-select-enable-clipboard t)

;设置kill-ring-max为200

(setq kill-ring-max 200)

;在模式栏中显示行号列号

(column-number-mode t)

(line-number-mode t)

(setq linum-format "%4d ")

;;在buffer左侧显示行号

(dolist (hook (list

               'c-mode-hook

               'c++-mode-hook

               'emacs-lisp-mode-hook

               'lisp-interaction-mode-hook

               'lisp-mode-hook

               'emms-playlist-mode-hook

               'java-mode-hook

               'asm-mode-hook

               'haskell-mode-hook

               'rcirc-mode-hook

               'emms-lyrics-mode-hook

               'erc-mode-hook

               'sh-mode-hook

               'makefile-gmake-mode-hook

               ))

(add-hook hook (lambda () (linum-mode 1))))

;显示匹配括号

(show-paren-mode t)

(setq show-paren-style 'parentheses)

;以 y/n代表 yes/no

(fset 'yes-or-no-p 'y-or-n-p)

;滚动条在右侧

(set-scroll-bar-mode 'right)

;最大化

(defun my-maximized ()

(interactive)

(x-send-client-message

   nil 0 nil "_NET_WM_STATE" 32

   '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))

(x-send-client-message

   nil 0 nil "_NET_WM_STATE" 32

   '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))

)

;启动时最大化

(my-maximized)

;在标题栏显示buffer的名字

(setq frame-title-format "%[email protected]")

;;设置备份策略

(setq make-backup-files t);;启用备份功能

(setq vc-make-backup-files t);;使用版本控制系统的时候也启用备份功能

(setq version-control t);;启用版本控制,即可以备份多次

(setq kept-old-versions 2);;备份最原始的版本两次,即第一次编辑前的文档,和第二次编辑前的文档

(setq kept-new-versions 6);;备份最新的版本6次,理解同上

(setq delete-old-versions t);;删掉不属于以上3中版本的版本

(setq backup-directory-alist '(("." . "~/.saves")));;设置备份文件的路径到~/.saves中

(setq backup-by-copying t);;备份设置方法,直接拷贝

(setq backup-enable-predicate 'ecm-backup-enable-predicate);;设置备份条件

;;关闭匹配下列目录或文件的备份功能

(defun ecm-backup-enable-predicate (filename)

(and (not (string= "/tmp/" (substring filename 0 5)))

(not (string-match "semanticdb" filename))

))

;关闭自动保存模式

(setq auto-save-mode nil)

;不生成 #filename# 临时文件

(setq auto-save-default nil)

;;可以递归的使用 minibuffer

(setq enable-recursive-minibuffers t)

;; 在行首 C-k 时,同时删除该行

(setq-default kill-whole-line t)

;; 自动的在文件末增加一新行

(setq require-final-newline t)

;; 当光标在行尾上下移动的时候,始终保持在行尾。

(setq track-eol t)

;; 当浏览 man page 时,直接跳转到 man buffer。

(setq Man-notify-method 'pushy)

;; 当使用 M-x COMMAND 后,过 1 秒钟显示该 COMMAND 绑定的键

(setq suggest-key-bindings 1)

;-------------全局快捷键----------------

;;;F1:列举我的书签

(global-set-key (kbd "<f1>") 'list-bookmarks)

;;;Ctrl+F1:设置我的书签

(global-set-key [C-f1] 'bookmark-set)

;; F2:保存buffer

(global-set-key (kbd "<f2>") 'save-buffer )

;;F3:跳转到寄存器保存的位子

(global-set-key (kbd "<f3>") 'jump-to-register)

;;Ctrl+F3:记录当前光标位子到寄存器

(global-set-key [C-f3] 'point-to-register)

;;F4:保存当前桌面

(global-set-key (kbd "<f4>") 'desktop-save)

;; F5:最大化当前buffer:

(global-set-key [(f5)] 'delete-other-windows)

;; F6:关闭buffer

(global-set-key [(f6)] 'kill-buffer-and-window)

;编译和调试

(global-set-key [f7] 'compile)

(global-set-key [C-f7] 'gdb)

(setq-default compile-command "make")

(global-set-key [C-f8] 'previous-error)

(global-set-key [f8] 'next-error)

; F9:格式化代码

(global-set-key [f9] 'c-indent-line-or-region)

; F10:注释 / 取消注释

(global-set-key [f10] 'comment-or-uncomment-region)

; F11:激活speedbar

(global-set-key [(f11)] 'speedbar-get-focus)

;;定义F12键为激活ecb

(global-set-key [f12] 'ecb-activate)

;;定义Ctrl+F12为停止ecb

(global-set-key [C-f12] 'ecb-deactivate)

(global-set-key [(control tab)] 'other-window);切换窗口

(global-set-key (kbd "C-z") 'undo);撤消

(global-set-key (kbd "C-a") 'mark-whole-buffer);全选

(global-set-key [(meta g)] 'goto-line);跳到某行

(global-set-key (kbd "C-x b") 'ibuffer);打开ibuffer

(global-set-key (kbd "C-x v") 'browse-kill-ring);打开browse-kill-ring

;;;C-x c 复制整行, 而"C-u 5 C-x c"复制 5 行

(global-set-key (kbd "C-x c") 'copy-lines);;;复制一行或者多行

(global-set-key (kbd "C-x d") 'zl-delete-line);;删除一行

(global-set-key (kbd "C-x %") 'kill-match-paren);;删除匹配括号间内容

(global-set-key [(meta left)] 'tabbar-backward);;切换前一个tab

(global-set-key [(meta right)]       'tabbar-forward);;切换下一个tab

(global-set-key [(tab)] 'my-indent-or-complete);Tab补全或缩进

;--------------编程相关----------------

;;;;打开代码折叠功能

(add-hook 'c-mode-hook 'hs-minor-mode)

(add-hook 'c++-mode-hook 'hs-minor-mode)

;;;CC-mode配置 http://cc-mode.sourceforge.net/

(require 'cc-mode)

(c-set-offset 'inline-open 0)

(c-set-offset 'friend '-)

(c-set-offset 'substatement-open 0)

;;;;定义C/C++风格

(add-hook 'c-mode-hook 'my-c-cpp-mode)

(add-hook 'c++-mode-hook 'my-c-cpp-mode)

(defun my-c-cpp-mode()

;; 将回车代替C-j的功能,换行的同时对齐

(define-key c-mode-map [return] 'newline-and-indent)

(interactive)

(define-key c++-mode-map [return] 'newline-and-indent)

(interactive)

;; 设置程序的对齐风格

(c-set-style "K&R")

;;在模式栏中显示当前光标所在函数

(which-function-mode)

;; 自动模式,在此种模式下当你键入{时,会自动根据你设置的对齐风格对齐

(c-toggle-auto-state)

;; 此模式下,当按Backspace时会删除最多的空格

(c-toggle-hungry-state)

;; 自动缩进的宽度设置为4

(setq c-basic-offset 4)

;;用空格代替tab

(setq-default indent-tabs-mode nil)

;Alt+Return 智能补全

(define-key c-mode-base-map [M-return] 'semantic-ia-complete-symbol-menu)

)

;;删除匹配括号间内容

(defun kill-match-paren (arg)

(interactive "p")

(cond ((looking-at "[([{]") (kill-sexp 1) (backward-char))

((looking-at "[])}]") (forward-char) (backward-kill-sexp 1))

(t (self-insert-command (or arg 1)))))

;;;删除一行

(defun zl-delete-line nil

"delete the whole line"

(interactive)

(beginning-of-line);光标移动到行首

(push-mark);做个标记

(beginning-of-line 2);移动到下一行行首

(kill-region (point) (mark)));光标和标记之间的删掉

;;;复制一行或者多行

;;;C-c C-w 复制整行, 而"C-u 5 C-c w"复制 5 行

(defun copy-lines(&optional arg)

(interactive "p")

(save-excursion

    (beginning-of-line)

    (set-mark (point))

    (next-line arg)

    (kill-ring-save (mark) (point))

    )

)

;--------------自动补全----------------

;;;自定义hippie-expand补全或缩进函数

(defun my-indent-or-complete ()

(interactive)

(if (looking-at "//>")

    (hippie-expand nil)

    (indent-for-tab-command)

)

)

;; hippie-expand 自动补全策略

(setq hippie-expand-try-functions-list

      '(

        senator-try-expand-semantic        ;优先调用senator的分析结果

        try-expand-dabbrev-visible         ;dabbrev策略, 可见窗口优先

        try-expand-dabbrev                 ;dabbrev策略

        try-expand-dabbrev-all-buffers     ;dabbrev策略, 包括所有窗口(除了当前窗口)

        try-expand-dabbrev-from-kill       ;dabbrev策略, 从所有删除记录里搜索

        try-complete-file-name             ;补全文件名

        try-complete-file-name-partially   ;补全文件名, 匹配优先

        try-expand-list                    ;补全list

        try-expand-list-all-buffers        ;补全list, 包括所有窗口(除了当前窗口)

        try-expand-line                    ;整行补全

        try-expand-line-all-buffers        ;整行补全, 包括所有窗口(除了当前窗口)

        try-complete-lisp-symbol           ;补全符号, 符号太多了, 设置低优先级利于高效补全

        try-complete-lisp-symbol-partially ;补全符号, 包括所有窗口(除了当前窗口)

        try-expand-whole-kill              ;kill-ring里面补全

        ))

;;; 配置semantic,代码分析,智能补全

(setq semanticdb-project-roots (list (expand-file-name "/"))) ;配置Semantic的检索范围

(setq semanticdb-default-save-directory (expand-file-name "~/.semanticdb")) ;设置semantic.cache路径

(autoload 'senator-try-expand-semantic "senator") ;优先调用了senator的分析结果

;(add-hook 'semantic-init-hooks 'semantic-idle-completions-mode) ;空闲时进行补全分析

;(setq-default semantic-idle-scheduler-idle-time 432000) ;避免semantic占用CPU过多

;;; 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")))))

(add-hook 'c++-mode-common-hook

          (lambda ()

            (setq semanticdb-project-system-databases

                  (list (semanticdb-create-database

                           semanticdb-new-database-class

                           "/usr/include")))))

;--------------外部扩展----------------

;;配置semantic

(semantic-load-enable-code-helpers)

;;配置speedbar

(autoload 'speedbar-frame-mode "speedbar" "Popup a speedbar frame" t)

(autoload 'speedbar-get-focus "speedbar" "Jump to speedbar frame" t)

(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)

;;配置ecb

(setq ecb-tip-of-the-day nil)

(setq ecb-tree-indent 4)

(setq ecb-windows-height 0.5)

(setq ecb-windows-width 0.20)

(setq ecb-auto-compatibility-check nil)

(setq ecb-version-check nil)

;;配置cscope

(require 'xcscope)

;不自动更新cscope.out

(setq cscope-do-not-update-database t)

;;配置session和Desktop

(require 'session)

(add-hook 'after-init-hook 'session-initialize)

;;使用M-x desktop-save保存回话,使用M-x desktop-clear清除上次保存的回话

(load "desktop")

(desktop-load-default)

(desktop-read)

;;配置tabbar

(require 'tabbar)

(tabbar-mode t)

;;配置browse-kill-ring

(require 'browse-kill-ring)

(browse-kill-ring-default-keybindings)

;;END

继续阅读