;;修改mac的comm按键为super按键
(setq mac-command-modifier 'super)
;;绑定alt为emta按键
(setq mac-option-modifier 'meta)
;;;绑定control为c按键
(setq mac-control-modifier 'control)
;; C-g quit
;; C-h f function -> key
;; C-h k key -> function
(bind-key "s-o" 'find-file global-map)
(bind-key "s-s" 'save-buffer global-map)
(bind-key "s-c" 'kill-ring-save global-map)
(bind-key "s-v" 'yank global-map)
(bind-key "s-x" 'kill-region global-map)
(bind-key "s-e" 'switch-to-buffer global-map)
(bind-key "s-w" 'kill-buffer global-map)
(bind-key "s-z" 'undo global-map)
(bind-key "<escape>" 'keyboard-escape-quit global-map)
;;绑定删除快捷键
(global-set-key (kbd "C-c D") 'delete-file-and-buffer)
;;默认文件编码
(prefer-coding-system 'utf-8)
;;设置各种文件编码
(setq buffer-file-coding-system 'utf-8-unix
default-file-name-coding-system 'utf-8-unix
default-keyboard-coding-system 'utf-8-unix
default-process-coding-system '(utf-8-unix . utf-8-unix)
default-sendmail-coding-system 'utf-8-unix
default-terminal-coding-system 'utf-8-unix)
;;递归删除和递归拷贝
(setq dired-recursive-deletes 'always
dired-recursive-copies 'always)
;;设置鼠标滚动
(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))
mouse-wheel-progressive-speed nil
mouse-wheel-follow-mouse 't)
;;替换yes/no为y/n
(fset 'yes-or-no-p 'y-or-n-p)
(setq-default indent-tabs-mode nil)
;;设置行高
(setq line-spacing 3)
;;编辑下选择替换
(delete-selection-mode 1)
;;高亮当前行
(global-hl-line-mode 1)
;;状态栏
(setq ns-use-srgb-colorspace nil)
;;设置备份文件
(setq backup-directory-alist `(("." . "~/.backup")))
(setq backup-by-copying t)
(setq delete-old-versions t
kept-new-versions 6
kept-old-versions 2
version-control t)
;;去除烦人的备份
(setq backup-directory-alist
`((".*" . ,temporary-file-directory)))
(setq auto-save-file-name-transforms
`((".*" ,temporary-file-directory t)))
(put 'dired-find-alternate-file 'disabled nil)
;;项目管理
(use-package projectile
:ensure t
:init
(projectile-mode)
:bind
(("C-c p p" . projectile-switch-project)
("C-c p f" . projectile-find-file)
:map projectile-mode-map
("C-c p s s" . counsel-projectile-ag)))
(use-package counsel
:ensure t
:bind
(("C-c g" . counsel-git)
("C-c G" . counsel-git-grep)
("C-s" . swiper)
("C-c m" . counsel-imenu)
("C-x b" . counsel-ibuffer)
("C-c A" . counsel-ag)
:map ivy-minibuffer-map
("<tab>" . ivy-alt-done)
("<escape>" . minibuffer-keyboard-quit)
("C-r" . counsel-expression-history)))
(use-package ivy
:ensure t
:init
(ivy-mode 1))
(use-package counsel-projectile
:ensure t
:init
(setq projectile-completion-system 'ivy))
;; (counsel-projectile-on))
;; (use-package neotree
;; :ensure t
;; :bind
;; (("s-\\" . neotree-toggle)))
(use-package powerline
:ensure t
:init
(powerline-center-theme))
(use-package exec-path-from-shell
:ensure t
:init
(exec-path-from-shell-initialize))
(use-package ace-window
:ensure t
:bind
(("C-x C-x" . ace-window))
:init
(setq aw-keys '(?a ?o ?e ?u ?i ?d ?h ?t ?n)))
;;cewindowd窗口提示大小
(custom-set-faces
'(aw-leading-char-face ((t (:foreground "green" :weight normal :height 4.5))))
'(mode-line ((t (:foreground "#030303" :background "#bdbdbd" :box nil))))
'(mode-line-inactive ((t (:foreground "#f9f9f9" :background "#666666" :box nil)))))
(use-package rainbow-delimiters
:ensure t
:init
(add-hook 'clojure-mode-hook 'rainbow-delimiters-mode))
;;org-mode加强
(use-package org
:ensure t
:init
(setq org-src-fontify-natively t)
(setq org-hide-leading-stars t)
(setq org-log-into-drawer t)
(setq org-todo-keywords '((sequence "TODO(t)" "WAIT(w@/!)" "|" "DONE(d!)" "CANCELED(c@)")))
(add-hook 'org-mode-hook
(lambda ()
(setq org-src-ask-before-returning-to-edit-buffer nil)
(org-indent-mode 1))))
(setq org-ellipsis "⤵")
(use-package org-bullets
:ensure t
:init
(add-hook 'org-mode-hook 'org-bullets-mode))
(eval-after-load "org"
'(require 'ox-md nil t))
(use-package ag
:ensure t)
(use-package yasnippet
:ensure t
:init
(setq yas-snippet-dirs '("~/.emacs.d/snippets"))
:config
(unbind-key "<tab>" yas-minor-mode-map)
(unbind-key "TAB" yas-minor-mode-map))
(use-package whitespace
:ensure t
:init
(dolist (hook '(prog-mode-hook text-mode-hook))
(add-hook hook #'whitespace-mode))
(add-hook 'before-save-hook #'whitespace-cleanup)
:config
(setq whitespace-line-column 800)
(setq whitespace-style '(face tabs empty trailing lines-tail)))
(use-package highlight-parentheses
:ensure t
:init
(setq hl-paren-delay 0)
(setq hl-paren-colors '("#3988FB"))
(setq hl-paren-background-colors '("#484848"))
(add-hook 'clojure-mode-hook #'highlight-parentheses-mode)
(add-hook 'emacs-lisp-mode-hook #'highlight-parentheses-mode))
(with-eval-after-load "treemacs"
(setq treemacs-icon-root (propertize "* " 'face 'treemacs-root-face)))
(defun user/toggle-treemacs ()
(interactive)
(if (fboundp 'treemacs-current-visibility)
(pcase (treemacs-current-visibility)
('visible (treemacs-select-window))
('exists (treemacs-select-window))
('none (treemacs)))
(treemacs)))
(use-package treemacs
:ensure t
:bind
(("C-\\" . user/toggle-treemacs))
:init
(setq treemacs-no-png-images t)
:config
(treemacs-follow-mode 1))
(use-package winner
:ensure t
:bind
(("C-h u" . winner-undo))
:init
(winner-mode))
(use-package avy
:ensure t
:bind
(("C-x j" . avy-goto-line)))
(use-package clojure-mode
:ensure t)
(use-package expand-region
:bind
(("C-c C-v" . er/expand-region)))
按键 | 功能 |
---|---|
M-w d | 复制顶级表达式 |
M-w l | 复制当前表达式 |
M-w w | 复制当前词 |
M-w s | 复制当前符号 |
(use-package easy-kill
:ensure t
:init
(global-set-key [remap kill-ring-save] 'easy-kill))
(use-package cider
:ensure t
:bind
(:map cider-mode-map
("C-c <tab>" . cider-inspect-last-result)
("<s-return>" . cider-eval-last-sexp)
("<C-return>" . cider-eval-defun-at-point))
:init
(setq cider-prompt-for-symbol nil)
(setq cider-lein-command "/usr/local/bin/lein"))
(use-package paredit
:ensure t
:init
(add-hook 'clojure-mode-hook 'paredit-mode)
(add-hook 'cider-repl-mode-hook 'paredit-mode)
(add-hook 'emacs-lisp-mode-hook 'paredit-mode))
(use-package aggressive-indent
:ensure t
:init
(add-hook 'clojure-mode-hook 'aggressive-indent-mode)
(add-hook 'clojure-repl-mode-hook 'aggressive-indent-mode)
(add-hook 'emacs-lisp-mode-hook 'aggressive-indent-mode))
(use-package monroe
:ensure t)
(use-package clj-refactor
:ensure t
:init
(cljr-add-keybindings-with-prefix "C-,")
(add-hook 'clojure-mode-hook #'clj-refactor-mode)
(add-hook 'clojure-mode-hook #'yas-minor-mode))
(use-package company
:ensure t
:bind
(:map company-active-map
("<escape>" . company-abort)
("C-n" . company-select-next)
("C-p" . company-select-previous))
:init
(add-hook 'emacs-lisp-mode-hook #'user/company-elisp-init)
(add-hook 'clojure-mode-hook #'user/company-clojure-init)
(add-hook 'eshell-mode-hook #'user/company-eshell-init)
(add-hook 'cider-repl-mode-hook #'user/company-cider-repl-init)
(add-hook 'cider-repl-mode-hook #'cider-company-enable-fuzzy-completion)
(add-hook 'cider-mode-hook #'cider-company-enable-fuzzy-completion)
(add-hook 'cider-repl-mode-hook #'company-mode)
(add-hook 'cider-mode-hook #'company-mode)
(setq company-idle-delay nil)
(global-company-mode 1))
;; (add-to-list 'load-path
;; (expand-file-name "~/.emacs.d/misc"))
;; (require 'parinfer)
;; (bind-key "C-)" 'paredit-forward-slurp-sexp parinfer-mode-map)
;; (bind-key "C-}" 'paredit-forward-barf-sexp parinfer-mode-map)
;; (bind-key "M-r" 'paredit-raise-sexp parinfer-mode-map)
;; (add-hook 'clojure-mode-hook #'parinfer-mode)
(use-package elpy
:ensure t)
(setq elpy-rpc-backend "jedi")
(define-key yas-minor-mode-map (kbd "C-c k") 'yas-expand)
(elpy-enable)
~* Git相关
(use-package magit
:ensure t
:bind
(("C-x M-g" . magit-dispatch-popup))
:init
(setq magit-completing-read-function 'ivy-completing-read)
(global-magit-file-mode t))
;;git修改该提示
;; (use-package git-gutter
;; :ensure t
;; :init
;; (global-git-gutter-mode))
(use-package diff-hl
:ensure t
:init
(global-diff-hl-mode t)
(diff-hl-dired-mode t))
(setq custom-file "~/.emacs.d/custom.el")
(use-package diminish
:init
(diminish 'highlight-parentheses-mode)
(diminish 'highlight-symbol-mode)
(diminish 'paredit-mode)
(diminish 'ivy-mode)
(diminish 'company-mode)
(diminish 'yas-minor-mode)
(diminish 'git-gutter-mode)
(diminish 'eldoc-mode)
(diminish 'auto-revert-mode)
(diminish 'subword-mode)
(diminish 'hs-minor-mode)
(diminish 'hideshowvis-minor-mode)
(diminish 'clj-refactor-mode)
(diminish 'anzu-mode)
(diminish 'undo-tree-mode))
;;去掉边框
(set-face-attribute 'fringe nil
:foreground nil
:background nil)
(set-frame-parameter nil 'internal-border-width 0)
(set-window-buffer nil (current-buffer))
;;自定义界面
(global-auto-revert-mode 1)
(scroll-bar-mode -1)
(tool-bar-mode -1)
(global-linum-mode -1)
(set-default-font "IBM 3270 Narrow-18")
;; (set-default-font "MonoxExtraLight-21")
;; (set-default-font "Comic Sans MS-18")
(use-package atom-one-dark-theme
:ensure)
(use-package challenger-deep-theme
:ensure)
(use-package zenburn-theme
:ensure t
:init
(load-theme 'zenburn t))
(defun user/insert-emacs-lisp-src-block ()
(interactive)
(insert "#+BEGIN_SRC emacs-lisp\n\n#+END_SRC\n"))
(bind-key "C-x C-'" #'user/insert-emacs-lisp-src-block)
(defun delete-file-and-buffer ()
"Kill the current buffer and deletes the file it is visiting."
(interactive)
(let ((filename (buffer-file-name)))
(when filename
(if (vc-backend filename)
(vc-delete-file filename)
(progn
(delete-file filename)
(message "Deleted file %s" filename)
(kill-buffer))))))
(defun graphic-powerline-config ()
"powerline setting for graphic"
(interactive)
(progn
(setq powerline-arrow-shape 'arrow)
(custom-set-faces
'(mode-line ((t (:foreground "white" :background "#0044cc" :box nil))))
'(mode-line-inactive ((t (:foreground "white" :background "#262626" :box nil)))))
(setq powerline-color1 "#0088cc")
(setq powerline-color2 "white")))
;;状态栏配色
(defun terminal-powerline-config()
" powerline setting for terminal"
(interactive)
(setq powerline-arrow-shape 'arrow)
(setq powerline-color1 "grey22")
(setq powerline-color2 "grey22")
(custom-set-faces
'(mode-line ((t (:foreground "grey44" :background "grey22" :box nil))))
'(mode-line-inactive ((t (:foreground "grey22" :background "grey44" :box nil))))))
(graphic-powerline-config)
(defun user/company-clojure-init ()
(bind-key "TAB" 'company-indent-or-complete-common clojure-mode-map)
(bind-key "<tab>" 'company-indent-or-complete-common clojure-mode-map))
(defun user/company-cider-repl-init ()
(bind-key "<tab>" 'company-complete-common cider-repl-mode-map))
(defun user/company-eshell-init ()
(bind-key "<tab>" 'company-complete-common eshell-mode-map))
(defun user/company-elisp-init ()
(bind-key "TAB" 'company-indent-or-complete-common emacs-lisp-mode-map)
(bind-key "<tab>" 'company-indent-or-complete-common emacs-lisp-mode-map))
(defun loop-alpha ()
(interactive)
(let ((h (car alpha-list))) ;; head value will set to
((lambda (a ab)
(set-frame-parameter (selected-frame) 'alpha (list a ab))
(add-to-list 'default-frame-alist (cons 'alpha (list a ab)))
) (car h) (car (cdr h)))
(setq alpha-list (cdr (append alpha-list (list h))))))
;;透明度
(global-set-key (kbd "<f10>") 'loop-alpha)
(setq alpha-list '((100 100) (95 65) (85 55) (75 45) (65 35)))
(global-set-key (kbd "C-=") 'text-scale-increase)
(global-set-key (kbd "C--") 'text-scale-decrease)
(custom-set-variables
'(eww-search-prefix "https://www.baidu.com/s?wd="))
;; =============================================================================
;; SQL
;; =============================================================================
(defun user/uppercase-sql-keyword ()
(let ((init-pos (point)))
(when (member (char-before)
'(41 40 44 59 32 10))
(save-mark-and-excursion
(backward-word)
(if (and (not (nth 3 (syntax-ppss)))
(not (nth 4 (syntax-ppss)))
(not (let ((face-or-faces (get-text-property (point) 'face)))
(if (listp face-or-faces)
(or (member 'font-lock-constant-face face-or-faces)
(member 'font-lock-variable-name-face face-or-faces))
(or (eq 'font-lock-constant-face face-or-faces)
(eq 'font-lock-variable-name-face face-or-faces))))))
(when (<= (save-mark-and-excursion
(forward-word 1)
(point))
init-pos)
(upcase-word 1)))))))
(defun user/enable-sql-auto-uppercase-keyword ()
(interactive)
(add-hook 'post-self-insert-hook #'user/uppercase-sql-keyword t t)
(modify-syntax-entry ?_ "w" (syntax-table))
(modify-syntax-entry ?- "w" (syntax-table)))
(add-hook 'sql-mode-hook #'user/enable-sql-auto-uppercase-keyword)
;;; Add keywords for sql fontlock
(font-lock-add-keywords
'sql-mode
'(;; For Postgres
("\"[-a-zA-Z0-9]+\"" . font-lock-constant-face)
;; For MySQL
("`[-a-zA-z0-9]+`" . font-lock-constant-face)
;; For placeholder
(":[-a-zA-Z0-9]+" . font-lock-variable-name-face)))