emacs-init.el配置

;+=======================================================================+
;|                               单行代码                                 |
;+=======================================================================+
(menu-bar-mode -1)                                               ;; 隐藏菜单栏
(blink-cursor-mode 1)                                            ;; 开启光标闪烁
(tool-bar-mode -1)                                               ;; 隐藏工具栏
(scroll-bar-mode -1)                                             ;; 滚动栏隐藏
(global-linum-mode -1)                                           ;; 关闭行号
(show-paren-mode t)                                              ;; 括号配对
(electric-pair-mode t)                                           ;; 自动补全括号
(global-hl-line-mode 1)                                          ;; 高亮当前行
(global-auto-revert-mode 1)                                      ;; 自动加载外部修改过的文件
(delete-selection-mode 1)                                        ;; 当你选中一段文字 之后输入一个字符会替换掉你选中部分的文字。
(fset 'yes-or-no-p 'y-or-n-p)                                    ;; 简化yes no
;(setq user-mail-address "1434513612@qq.com")                    ;; 设置用户邮箱
(setq-default cursor-type 'bar)                                  ;; 设置光标为线状
(setq user-full-name "xiebiao"                                   ;; 设置用户名
      frame-title-mode t                                         ;; 在窗口的标题栏上显示文件名称
      frame-title-format "emacs@%b"                              ;; 设置标题栏
      inhibit-splash-screen t                                    ;; 关闭启动画面
      gnus-inhibit-startup-message t                             ;; 关闭引导界面
      make-backup-files nil                                      ;; 关闭自动备份文件~
      backup-inhibited t                                         ;; 不产生备份
      auto-save-mode nil                                         ;; 自动保存模式
      truncate-lines nil                                         ;; 自动换行
      transient-mark-mode t                                      ;; 高亮显示选择区域
      blink-cursor-blinks 2                                      ;; 光标闪烁3次
      global-font-lock-mode t                                    ;; 进行语法加亮
      show-paren-style 'parenthesis                              ;; 只高亮括号
      require-final-newline t                                    ;; 自动的在文件末增加一新行
      track-eol t                                                ;; 当光标在行尾上下移动的时候,始终保持在行尾。
      c-default-style "awk"                                      ;; 设置c++编译颜色风格
      visible-bell t                                             ;; 关闭提示音
      ring-bell-function 'ignore                                 ;; 没有提示音,也不闪屏
      initial-frame-alist (quote ((fullscreen . maximized)))     ;; 默认全屏
)


;+=======================================================================+
;|                               子龙山人                                 |
;+=======================================================================+
(require 'package)
(package-initialize)
(setq package-archives '(
    ("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/") 
    ("gnu" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
    ("org" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/org/")))

 (require 'cl)

;; Add Packages
 (defvar my/packages '(
        yasnippet           ;; 自定义补全
                monokai-theme       ;; material-theme
        org-bullets         ;; org-mode列表字符
        ;htmlize            ;; 导出html
        ;ox-reveal          ;; 幻灯片
        ;ycmd
        ;company-ycmd
        ;flycheck-ycmd
                company             ;; 补全
        cdlatex             ;; latex
                auctex              ;; latex
        which-key           ;; 关键词提示
        undo-tree           ;; 撤销树
        ;linum              ;; 行号控制
        neotree             ;; 文件树
                flycheck            ;; 语言检查
                better-defaults
        ggtags              ;; 代码跳转
        ivy
        counsel
        swiper              ;; 搜索
        avy                 ;; 快速定位跳转
        iedit               ;; 批量换名
        window-numbering    ;; buffer编号
        expand-region       ;; 快速选择区域
        projectile          ;; 项目文件管理
        multiple-cursors    ;; 多光标
                ) "Default packages")

 (setq package-selected-packages my/packages)

 (defun my/packages-installed-p ()
     (loop for pkg in my/packages
           when (not (package-installed-p pkg)) do (return nil)
           finally (return t)))

 (unless (my/packages-installed-p)
     (message "%s" "Refreshing package database...")
     (package-refresh-contents)
     (dolist (pkg my/packages)
       (when (not (package-installed-p pkg))
         (package-install pkg))))

(add-to-list 'my/packages 'monokai-theme);; 安装主题
(load-theme ' monokai t)  ;; monokai, material, atom-one-dark, dracula



;+=======================================================================+
;|                               字体代码                                 |
;+=======================================================================+
(set-frame-font "Source Code Pro 11")
;(set-default-font "Courier New 11")
(set-fontset-font "fontset-default" 'unicode "仿宋 11") ;; for windows

;;org-table字体
(custom-set-faces
 '(org-table ((t (:foreground "#6c71c4" :family "Ubuntu Mono")))))




;+=======================================================================+
;|                               orgmode                                 |
;+=======================================================================+
;; GTD : 收集-处理-管理-执行-回顾-反省
(require 'org)

;; 设置todo关键词
(setq org-todo-keywords '((sequence "TODO(t!)" "DOING(i!)" "NEXT(n!)" "|"
                    "DONE(d@/!)" "ABORT(a@/!)")))

;; 设置todo颜色
(setq org-todo-keyword-faces
  '(("TODO" .       (:foreground "red"     :weight bold))
    ("DOING" .      (:foreground "yellow"  :weight bold))
    ("NEXT" .       (:foreground "orange"  :weight bold))
    ("DONE" .       (:foreground "green"   :weight bold)) ;;完成
    ("ABORT" .      (:foreground "ForestGreen"));;异常终止
));red ForestGreen Goldenrod OrangeRed Brown green orange magenta
;yellow gray white DarkOrange DodgerBlue SkyBlue

;; 优先级范围和默认任务的优先级
(setq org-highest-priority ?A)
(setq org-lowest-priority  ?E)
(setq org-default-priority ?B)

;; 优先级醒目外观
(setq org-priority-faces
  '((?A . (:foreground "DarkOrange" :weight bold))
    (?B . (:foreground "yellow"     :weight bold))
    (?C . (:foreground "DarkGreen"  :weight bold))
    (?D . (:foreground "SkyBlue"    :weight bold))
    (?E . (:foreground "black"      :weight bold))
));;(?B . (:background "DarkOrange" :foreground "white" :weight bold))

;; 设置标签
(setq org-tag-alist '(("read"    . ?r)
              ("work"    . ?w)
                      ("study"   . ?s)
                      ("program" . ?p)
              ("cpp"     . ?c)
              ("mind"    . ?m)
              ("idea"    . ?i)
              ("leetcode". ?l)))


(setq org-src-fontify-natively t);; 添加 Org-mode 文本内语法高亮
;(setq default-major-mode 'org-mode)

;;设置初始目录为project项目目录
(setq default-directory "~/.emacs.d/document/Orgmode")

;; 设置 org-agenda 打开快捷
(global-set-key (kbd "C-c a") 'org-agenda)

;; 设置默认的笔记
;(setq org-default-notes-file "~/.emacs.d/document/Inboxs/Inbox.org")

;; orgmode子弹符号
(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)));;需要安装org-bullets包


;; 设置默认 Org Agenda 文件目 方法二
(setq org-agenda-files '("~/.emacs.d/document/GTD/Task.org"
             "~/.emacs.d/document/GTD/Plan.org"
             "~/.emacs.d/document/GTD/Todo.org"))



;+=======================================================================+
;|                               org中插入截图                            |
;+=======================================================================+
;; 让图片不要真实大小显示
(setq org-image-actual-width nil)

;; 截图函数
(defun my-org-screenshot ()
  "Take a screenshot into a time stamped unique-named file in the
same directory as the org-buffer and insert a link to this file."
  (interactive)
  (setq filename
        (concat
         (make-temp-name
          (concat (buffer-file-name)
                  "_"
                  (format-time-string "%Y%m%d_%H%M%S_")) ) ".png"))
  (shell-command "snippingtool /clip")
  (shell-command (concat "powershell -command "
Add-Type -AssemblyName System.Windows.Forms;
if ($([System.Windows.Forms.Clipboard]::ContainsImage()))
{$image = [System.Windows.Forms.Clipboard]::GetImage();
[System.Drawing.Bitmap]$image.Save('" filename "',
[System.Drawing.Imaging.ImageFormat]::Png);
Write-Output 'clipboard content saved as file'}
else {
Write-Output 'clipboard does not contain image data'}""))
  (insert (concat "[[file:" filename "]]"))
  (org-display-inline-images))

;; 绑定快捷键C-x C-a
(define-key org-mode-map (kbd "C-x C-a") 'my-org-screenshot)




;+=======================================================================+
;|                               capture                                 |
;+=======================================================================+

(global-set-key (kbd "C-c c") 'org-capture);;打开capture的快捷键

;; 设置capture模板
(setq org-capture-templates
'(
  ;; agenda
  ;("a" "Agenda" table-line
  ; (file "~/.emacs.d/document/Orgmode/Agenda.org")
  ; "| %^{项目} | %^{姓名} | %^{手机号}| %U |"))

  ;; 插入链接
  ("l" "Links " entry
   (file+headline "~/.emacs.d/document/Inboxs/Link.org" "Links")
   "* %^L" :prepend t)

  ;; todo 项目
  ("t" "ToDo" entry
   (file+datetree "~/.emacs.d/document/GTD/Todo.org")
   "* TODO %? 
  时间:%T" :prepend t)

  ;; inbox 快速记录未归类的文本
  ("i" "Inbox" entry
    (file+headline "~/.emacs.d/document/Inboxs/Inbox.org" "Inbox")
    "* %U - %^{heading} %^g 
 %i 
")

  ;; 日志记录
  ("j" "Journal" entry
   (file+datetree "~/.emacs.d/document/Inboxs/Journal.org")
   "* %U - %^{heading} 
 %^g 
 %? 
 %i 
")

  ;; 笔记
  ("n" "Note" entry
   (file+headline "~/.emacs.d/document/Notes/Note1.org" "Notes")
   "* %^{heading} 
 %^g 
 %? 
 %i 
 时间:%U")

  ;; 博客
  ("b" "Blog" entry
   (file+headline "~/.emacs.d/document/Inboxs/Blog.org" "Blog Topics")
   "*  %^{博客名} 
 %^g 
 %? 
 时间:%U" :prepend t :clock-in t :clock-resume  t)

  ;; 读书记录
  ("r" "Book" entry
   (file+headline "~/.emacs.d/document/Inboxs/Book.org" "Book")
   "* %^{书名} 
 时间:%U 
 %? 
 %i 
":clock-in t :clock-resume  t)

  ;; 工作情况
  ("w" "Work" entry
   (file+headline "~/.emacs.d/document/Inboxs/Work.org" "Work")
   "* TODO [#B] %^{任务名} 
 时间:%U 
":clock-in t :clock-resume t)
))




;+=======================================================================+
;|                               C++配置                                 |
;+=======================================================================+
(global-set-key [f11] 'gdb)
(global-set-key [f10] 'gud-gdb)
(global-set-key [f9] 'compile-file-gcc)
(global-set-key [f12] 'compile-file-g++)

(defun compile-file-gcc ()
  (interactive)
;   (compile (format "g++ -o %s %s -lm -Wall -g -std=c++11 -Ofast"
  (compile (format "gcc -o %s %s -lm -Wall -g && c.exe"
           (file-name-sans-extension (buffer-name))(buffer-name)
           (file-name-sans-extension (buffer-name))))
  )

(defun compile-file-g++ ()
  (interactive)
  (compile (format "g++ -o %s %s -lm -Wall -g -std=c++11 -O2 && t.exe"
           (file-name-sans-extension (buffer-name))(buffer-name)
           (file-name-sans-extension (buffer-name)))))





;+=======================================================================+
;|                               company                                 |
;+=======================================================================+
(require 'company)
(add-hook 'after-init-hook 'global-company-mode)
;; 全局开启
(global-company-mode t)

(setq company-idle-delay 0.1 ;菜单延迟
      company-minimum-prefix-length 2 ;开始补全字数
      company-require-match nil
      company-dabbrev-ignore-case nil
      company-dabbrev-downcase nil
      company-show-numbers t ;显示序号
      company-transformers '(company-sort-by-backend-importance)
      company-continue-commands '(not helm-dabbrev))


;; 补全快捷键
(global-set-key (kbd "<C-tab>") 'company-complete)
(global-set-key (kbd "RET") 'newline-and-indent)

;; 补全菜单选项快捷键
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)

;; Company 有时候补全功能并不是非常理想,这时就可以使用 Hippie Expand 来完成补全
(setq hippie-expand-try-function-list '(try-expand-debbrev
                                        try-expand-debbrev-all-buffers
                                        try-expand-debbrev-from-kill
                                        try-complete-file-name-partially
                                        try-complete-file-name
                                        try-expand-all-abbrevs
                                        try-expand-list
                                        try-expand-line
                                        try-complete-lisp-symbol-partially
                                        try-complete-lisp-symbol))


;+=======================================================================+
;|                               Latex                                   |
;+=======================================================================+
;; cdlatex 模块
(require 'cdlatex)
(add-hook 'LaTeX-mode-hook 'turn-on-cdlatex)
(add-hook 'LaTex-mode-hook 'turn-on-reftex)


;; outline 设置
(outline-minor-mode t)
(setq outline-minor-mode-prefix [(control o)])
(add-hook 'LaTex-mode-hook 'outline-minor-mode)
(add-hook 'LaTex-mode-hook 'outline-hide-body)
;;outline 好像没有效果

;; 默认编辑器设置
;(setq TeX-command-default "XeLaTeX")
;(setq TeX-save-query  nil )
;(setq TeX-show-compilation t);;可用代码

;;----------- 新加的代码,如果有影响可以删除---;
(load "auctex.el" nil t t)

(setq TeX-output-view-style (quote (("^pdf$" "." "evince %o %(outpage)"))))
;(add-hook 'LaTeX-mode-hook
; (lambda()
; (add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex%(mode)%' %t" TeX-run-TeX nil t))
; (setq TeX-command-default "XeLaTeX")))

(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq-default TeX-master nil)
(setq preview-scale-function 1.3)
(setq LaTeX-math-menu-unicode t)
(setq TeX-insert-braces nil)
(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)

;;Auctex for Latex
(add-hook 'LaTeX-mode-hook 'LaTeX-install-toolbar)
(add-hook 'LaTeX-mode-hook 'turn-on-auto-fill)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)

(add-hook 'LaTeX-mode-hook (lambda()
;;调用latex命令
(add-to-list 'TeX-command-list (list "LaTeX" "latex %s.tex" 'TeX-run-command nil t))
;;调用dvipdfmx命令
(add-to-list 'TeX-command-list (list "dvi2pdf" "dvipdfmx %s.dvi" 'TeX-run-command nil t))
;;调用pdflatex命令;;调用pdflatex命令;;调用pdflatex命令
(add-to-list 'TeX-command-list (list "pdf Latex" "pdflatex %s.tex" 'TeX-run-command nil t))
; View PDF
(add-to-list 'TeX-command-list (list "View pdf" "start .\"%s.pdf""'TeX-run-command nil t))
;;设置环境为xelatex
(add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex%(mode)%' %t" TeX-run-TeX nil t))
;;(setq TeX-command-default "XeLaTeX")
;;(setq TeX-save-query nil )
;;(setq TeX-show-compilation t)
))

;;======================== latex-math-mode =================
;; latex-math-mode (add math symbols to menu and shortcuts)
;; So that you can use, e.g., `a, to input alpha. You may also define
;; your own customized shortcuts by setting the variable
;; LaTeX-math-list before loading LaTeX-math-mode.
;; to enable maths support

(setq LaTeX-math-mode t)
(setq TeX-electric-escape t) ;; you may like it or dislike it.
;; I found it useful when inputting repeated commands -- you just
;; need to type  and ENTER to repeat the last latex command. 

(add-hook 'LaTeX-mode-hook 'latex-math-mode)   ; with AUCTeX LaTeX mode
(add-hook 'latex-mode-hook 'latex-math-mode)   ; with Emacs latex mode
(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)

;; ===================在.org文档中使用latex===========
(require 'ox-latex)
(setq org-latex-create-formula-image-program 'dvipng)

(org-babel-do-load-languages
 'org-babel-load-languages
 '(
   (R . t)
   (dot . t)
   (haskell . t)
   (python . t)
   (C . t)
   (emacs-lisp . nil)
   (latex . t)
   ))




;+=======================================================================+
;|                               自动保存                                 |
;+=======================================================================+

(defgroup auto-save nil
  "Auto save file when emacs idle."
  :group 'auto-save)

(defcustom auto-save-idle 0.1;;!!!!!!!!!!!!
  "The idle seconds to auto save file."
  :type 'integer
  :group 'auto-save)

(defcustom auto-save-slient nil
  "Nothing to dirty minibuffer if this option is non-nil."
  :type 'boolean
  :group 'auto-save)

(setq auto-save-default nil)

;; 前方高能核心代码, 请集中注意力
(defun auto-save-buffers ()
  (interactive)
  (let ((autosave-buffer-list))
    (save-excursion
      (dolist (buf (buffer-list))
        (set-buffer buf)
        (if (and (buffer-file-name) (buffer-modified-p))
            (progn              
              (push (buffer-name) autosave-buffer-list)
              (if auto-save-slient                  
                  (with-temp-message ""
                    (basic-save-buffer))
                (basic-save-buffer))
              )))
      (unless auto-save-slient
        (cond
         ((= (length autosave-buffer-list) 1)
          (message "# Saved %s" (car autosave-buffer-list)))
         ((> (length autosave-buffer-list) 1)
          (message "# Saved %d files: %s"
                   (length autosave-buffer-list)
                   (mapconcat 'identity autosave-buffer-list ", "))))))))

(defun auto-save-enable ()
  (interactive)
  (run-with-idle-timer auto-save-idle t #'auto-save-buffers))
(auto-save-enable);; 开启自动保存功能
(setq auto-save-slient t);; 自动保存的时候静悄悄的, 不要打扰我




;+=======================================================================+
;|                              杂碎的代码                                 |
;+=======================================================================+
;; 记住光标上次打开文件时的位置
(require 'saveplace)
(save-place-mode 1)   

;; 时间,窗口
;(display-time-mode 1)  ;; 常显 
;(setq display-time-24hr-format t)  ;;格式 
;(setq display-time-day-and-date t)  ;;显示时间、星期、日期
;;(set-frame-parameter (selected-frame) 'alpha (list 85 50));; 设置屏幕透明
;;(set-frame-width (selected-frame) 77);;设置初始窗口宽度
;;(set-frame-height (selected-frame) 34);;设置初始窗口高度


;; 防止页面滚动时跳动scroll-margin 3可以在靠近屏幕边沿3行时就开始滚动,可以很好的看到上下文。
(setq scroll-step 1
      scroll-margin 3;;可以在靠近屏幕边沿3行时就开始滚动
      scroll-conservatively 10000);;设置为每次翻滚一行,可以使页面更连续


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


;;设置最近访问文件可见
(require 'recentf)
(recentf-mode t)
(setq recentf-max-saved-items 200
      recentf-max-menu-items 15);; 设置最近访问文件数量为10
;; 打开最近文件快捷键,这个快捷键绑定可以用之后的插件 counsel 代替
(global-set-key (kbd "C-x C-r") 'recentf-open-files)

;; 设定删除保存记录为200,可以方便以后无限恢复
(setq kill-ring-max 200)



;; 窗口管理:将当前窗口分割为上下两个,并切换到另外一个 buffer
(defun split-window-new-buffer ()
(interactive)
(split-window-below)
(call-interactively 'switch-to-buffer))

;; 代码缩进,一次重新缩进全部缓冲区的代码
(defun indent-buffer()
  (interactive)
  (indent-region (point-min) (point-max)))

(defun indent-region-or-buffer()
  (interactive)
  (save-excursion
    (if (region-active-p)
        (progn
          (indent-region (region-beginning) (region-end))
          (message "Indent selected region."))
      (progn
        (indent-buffer)
        (message "Indent buffer.")))))

(global-set-key (kbd "C-M-\") 'indent-region-or-buffer)


;; 窗口光标后退,C-x o的相反操作
(defun prev-window ()
  (interactive)
  (other-window -1))
(global-set-key (kbd "C-x p") 'prev-window)

;; 加载延迟模块start
(require 'dired-x)  ;; 使得 C-x C-j 就可以进入当前文件夹的所在路径

;; 让 Emacs 重用唯一的一个缓冲区作为 Dired Mode 显示专用缓冲区
(put 'dired-find-alternate-file 'disabled nil)
;; 主动加载 Dired Mode
;; (require 'dired)
;; (defined-key dired-mode-map (kbd "RET") 'dired-find-alternate-file)
;; 延迟加载
(with-eval-after-load 'dired
    (define-key dired-mode-map (kbd "RET") 'dired-find-alternate-file))


;; 递归删除和复制目录
(setq dired-recursive-deletes 'always)
(setq dired-recursive-copies 'always)


(setq gc-cons-threshold most-positive-fixnum);设置垃圾回收阈值,加速启动速度。

(auto-image-file-mode t);; 打开图片显示功能


;; 快速打开link.org
(defun open-key-info-file1 ()  
(interactive)  
(split-window-horizontally)  
(find-file-other-window "~/.emacs.d/document/Inboxs/Link.org")
;;(outline-mode)  
(hide-body))    
(global-set-key (kbd "C-x C-1") 'open-key-info-file1)


;; 快速打开emacskey.org
(defun open-key-info-file2 ()  
(interactive)  
(split-window-horizontally)  
(find-file-other-window "~/.emacs.d/document/Orgmode/emacsKeys.org")
;;(outline-mode)  
(hide-body))    
(global-set-key (kbd "C-x C-2") 'open-key-info-file2)


; 设置打开init.el文件的快捷键
(defun open-my-init-file()
  (interactive)
  (find-file "~/.emacs.d/init.el"))
(global-set-key (kbd "<f7>") 'open-my-init-file); 设置init.el文件的快捷键


;; 剪切,复制,粘贴,全选
;(cua-mode t) ;; window的剪切粘贴
(global-set-key (kbd "C-z") 'undo);; 撤消
(global-set-key (kbd "C-q") 'mark-whole-buffer);; 全选ctrl+a


;; 自定义缩写补全表
(setq-default abbrev-mode t)
(define-abbrev-table 'global-abbrev-table '
  (
   ("8zl" "zilongshanren")
   ("yasn" "yas-new-snippet")
   ))


;; 初始显示界面
(setq initial-scratch-message nil)
(setq initial-major-mode 'text-mode)
;(setq initial-scratch-message "hello")
;; 启动后直接显示工作目录
(setq initial-buffer-choice "c:/User/Project/EmacsProject/t.cpp")


;; 启动优化
;;增加启动期间垃圾回收的阈值,启动结束后还原。
;;设置启动时file-name-handler-alist为nil
(defvar  mage--file-name-handler-alist file-name-handler-alist)
(defun mage|pre-init()
  (setq gc-cons-threshold 402653184
    gc-cons-percentage 1.0
    file-name-handler-alist nil))

(defun mage|post-init ()
  (setq gc-cons-threshold 16777216
        gc-cons-percentage 0.15
        file-name-handler-alist mage--file-name-handler-alist))
(add-hook 'before-init-hook #'mage|pre-init)
(add-hook 'emacs-startup-hook #'mage|post-init)

;自定义缩进长度
(setq standard-indent 4)

;; 设置默认tab宽度
(setq tab-width 4
      indent-tabs-mode t
      c-basic-offset 4)
(setq default-tab-width 4)


;; 设置 sentence-end 可以识别中文标点
(setq sentence-end
      "\([。!?]\|……\|[.?!][]"')}]*\($\|[ 	]\)\)[ 	
]*")
(setq sentence-end-double-space nil)


;; 语法高亮
(setq font-lock-maximum-decoration t)
(setq font-lock-global-modes '(not shell-mode text-mode));;除 shell-mode 和 text-mode 之外的模式中使用语法高亮。
(setq font-lock-verbose t)
(global-font-lock-mode 1)


;; ;; 设置另外一些颜色:语法高亮显示的背景和主题,区域选择的背景和主题,二次选择的背景和选择
(set-face-foreground 'highlight "white")
(set-face-background 'highlight "DarkOrange");;#3e9d6a
(set-face-foreground 'region "cyan")
(set-face-background 'region "gray10")
(set-face-foreground 'secondary-selection "skyblue");;skyblue
(set-face-background 'secondary-selection "darkblue");;darkblue




;+=======================================================================+
;|                         ivy counsel swiper                            |
;+=======================================================================+
;; ivy counsel swiper
(require 'ivy)
(ivy-mode 1)
(setq ivy-use-virtual-buffers t)
(setq enable-recursive-minibuffers t)
;; enable this if you want swiper to use it
;; (setq search-default-mode #'char-fold-to-regexp)

(global-set-key (kbd "<f6>") 'ivy-resume)
(define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history)

;; Ivy-based interface to standard commands
;;(global-set-key "C-s" 'swiper-isearch)
(global-set-key (kbd "C-s") 'swiper)
(global-set-key (kbd "M-x") 'counsel-M-x)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
(global-set-key (kbd "M-y") 'counsel-yank-pop)
(global-set-key (kbd "<f2> f") 'counsel-describe-function)
(global-set-key (kbd "<f2> v") 'counsel-describe-variable)
(global-set-key (kbd "<f2> l") 'counsel-find-library)
(global-set-key (kbd "<f1> i") 'counsel-info-lookup-symbol)
(global-set-key (kbd "<f1> u") 'counsel-unicode-char)
(global-set-key (kbd "<f1> j") 'counsel-set-variable)
(global-set-key (kbd "C-x b") 'ivy-switch-buffer)
(global-set-key (kbd "C-c v") 'ivy-push-view)
(global-set-key (kbd "C-c V") 'ivy-pop-view)

;; Ivy-based interface to shell and system tools
(global-set-key (kbd "C-x l") 'counsel-locate)
(global-set-key (kbd "C-c J") 'counsel-file-jump)


;; Ivy-resume and other commands
(global-set-key (kbd "C-c C-r") 'ivy-resume)
(global-set-key (kbd "C-c b") 'counsel-bookmark)
(global-set-key (kbd "C-c d") 'counsel-descbinds)
;(global-set-key (kbd "C-c g") 'counsel-git)
(global-set-key (kbd "C-c o") 'counsel-outline)
(global-set-key (kbd "C-c t") 'counsel-load-theme)
(global-set-key (kbd "C-c F") 'counsel-org-file)

(setq ivy-use-virtual-buffers t 
      ivy-initial-inputs-alist nil 
      ivy-count-format "%d/%d " 
      enable-recursive-minibuffers t 
      ivy-re-builders-alist '((t . ivy--regex-ignore-order))) 

 (setq swiper-action-recenter t 
                swiper-include-line-number-in-search t)


;; counsel-gtags 设置
(add-hook 'c-mode-hook 'counsel-gtags-mode)
(add-hook 'c++-mode-hook 'counsel-gtags-mode)

(with-eval-after-load 'counsel-gtags
  (define-key counsel-gtags-mode-map (kbd "M-t") 'counsel-gtags-find-definition)
  (define-key counsel-gtags-mode-map (kbd "M-r") 'counsel-gtags-find-reference)
  (define-key counsel-gtags-mode-map (kbd "M-s") 'counsel-gtags-find-symbol)
  (define-key counsel-gtags-mode-map (kbd "M-,") 'counsel-gtags-go-backward))





;+=======================================================================+
;|                              其他小模块                                 |
;+=======================================================================+
;; 调整背景色
;(set-background-color "grey15");; 背景颜色
;(set-foreground-color "grey");;颜色


;; 单词补全
;(add-to-list 'load-path "~/.emacs.d/elpa/company-english-helper")
;(require 'company-english-helper);可以用
;M-x toggle-company-english-helper 激活


;; 幻灯片模块oxreveal
;(require 'ox-reveal)


;; linum
;(global-linum-mode t)
;(setq linum-format "%4d  ");;行号控制4位数


;; yasnippet自定义补全
(require 'yasnippet)
(yas-global-mode 1)


;;  flycheck
(require 'flycheck)
(add-hook 'elpy-mode-hook 'flycheck-mode)
(global-flycheck-mode t)


;设置系统的编码,避免各处的乱码。
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8) 
(set-terminal-coding-system 'utf-8) 
(set-keyboard-coding-system 'utf-8) 
(setq default-buffer-file-coding-system 'utf-8)


;; which-key
(require 'which-key)
(which-key-mode t)
(which-key-setup-side-window-bottom)


;; undo-tree
(require 'undo-tree)
(global-undo-tree-mode)
(defadvice undo-tree-visualizer-mode (after undo-tree-face activate)
(buffer-face-mode))


;; 快速选择区域
(require 'expand-region)
(global-set-key (kbd "C-=")'er/expand-region)


;;开启buffer编号
;(require 'window-numbering)
(window-numbering-mode 1)
(setq window-numbering-assign-func
      (lambda () (when (equal (buffer-name) "*Calculator*") 9)))


;; iedit
(require 'iedit)
(define-key global-map (kbd "C-c ;") 'iedit-mode)


;; neotree
(require 'neotree)
(setq neo-smart-open t)
(setq neo-window-fixed-size nil)
(setq-default neo-show-hidden-files nil)
(global-set-key [f4] 'neotree-delete-node)
(global-set-key [f8] 'neotree-toggle)


;; avy
(global-set-key (kbd "C-:") 'avy-goto-char)      ;; 跳转一个字符
(global-set-key (kbd "C-'") 'avy-goto-char-2)    ;; 跳转两个字符
(global-set-key (kbd "M-g f") 'avy-goto-line)    ;; 跳转行
(global-set-key (kbd "M-g w") 'avy-goto-word-1)  ;; 跳转词,一个输入
(global-set-key (kbd "M-g e") 'avy-goto-word-0)  ;; 跳转词,不需输入
(avy-setup-default)
(global-set-key (kbd "C-c C-j") 'avy-resume)


;; projectile
(projectile-mode 1)
(define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)


;;multiple-cursor
(require 'multiple-cursors)
(global-set-key (kbd "C-c m c") 'mc/edit-lines)
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
(global-set-key (kbd "C-M->") 'mc/skip-to-next-like-this)
(global-set-key (kbd "C-M-<") 'mc/skip-to-previous-like-this)
(global-unset-key (kbd "M-<down-mouse-1>"))
(global-set-key (kbd "M-<mouse-1>") 'mc/add-cursor-on-click)



;; gtags
(setenv "PATH" (concat "C:/Program Files/Emacs26.3/.emacs.d/elpa/global-6.6.3/bin;" (getenv "PATH")))
(setq exec-path (append exec-path '("C:/Program Files/Emacs26.3/.emacs.d/elpa/global-6.6.3/bin")))

(add-to-list 'load-path "~/.emacs.d/elpa/gtags/")
(require 'gtags)

(global-set-key (kbd "C-c f") 'ggtags-find-file)
(global-set-key (kbd "M-.") 'ggtags-find-tag-dwim)


;;---------------
(autoload 'gtags-mode "gtags" "" t)
(add-hook 'gtags-mode-hook
  '(lambda ()
        ; Local customization (overwrite key mapping)
        (define-key gtags-mode-map "C-f" 'scroll-up)
        (define-key gtags-mode-map "C-b" 'scroll-down)
    ))

(add-hook 'gtags-select-mode-hook
  '(lambda ()
        (setq hl-line-face 'underline)
        (hl-line-mode 1)
))
(add-hook 'c-mode-common-hook 'gtags-mode)
(add-hook 'c++-mode-common-hook 'gtags-mode)
;(add-hook 'java-mode-common-hook 'gtags-mode)

; Customization
(setq gtags-suggested-key-mapping t);; 以建议的使用键绑定
(setq gtags-auto-update t)
;(setq ggtags-global-ignore-case t)
(setq ggtags-sort-by-nearness t)




;;------------------------------代码测试部分-------------------------------
原文地址:https://www.cnblogs.com/niubidexiebiao/p/12636205.html