;;; init-kbd.el ;;; -*- lexical-binding: t -*- ;; 修改mac键位 (when *is-mac* (setq mac-command-modifier 'meta) (setq mac-option-modifier 'none)) ;; 使用F2打开init.el (defun open-init-file() "Open user's init.el file in ~/.emacs.d 这是一段文档" (interactive) (find-file "~/.emacs.d/init.el")) (global-set-key (kbd "") 'open-init-file) ;; 快速打开函数与变量的定义 (global-set-key (kbd "C-h C-f") 'find-function) (global-set-key (kbd "C-h C-v") 'find-variable) ;; 根据平台使用不同的重启方式 (if *is-windows* (progn (defun restart-emacs () "Restart emacs (for Windows)" (interactive) (save-some-buffers) (w32-shell-execute "open" "runemacs.exe") (kill-emacs)) (global-set-key (kbd "C-c r") 'restart-emacs)) (global-set-key (kbd "C-c r") 'restart-emacs)) ;; multiple cursors (global-set-key (kbd "C-c c c") 'mc/edit-lines) (global-set-key (kbd "C-c c a") 'mc/mark-all-in-region) (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (global-set-key (kbd "C->") 'mc/mark-next-like-this) ;; 快速复制当前行 (defun duplicate-and-move-to-next-line() (interactive) (progn (duplicate-line) (next-line))) (global-set-key (kbd "C-,") 'duplicate-and-move-to-next-line) ;; 切换buffer (defun my-tab-line-buffers () "Get list of buffers shown in tab-line." (mapcar (lambda (tab) (if (consp tab) (cdr tab) tab)) (funcall tab-line-tabs-function))) (defun previous-buffer-with-tab-line () "Switch to previous buffer in tab-line order" (interactive) (let ((already-enabled global-tab-line-mode)) (unless already-enabled (global-tab-line-mode 1)) (let* ((buffers (my-tab-line-buffers)) (current (current-buffer)) (pos (cl-position current buffers))) (when pos (switch-to-buffer (nth (mod (1- pos) (length buffers)) buffers)))) (unless already-enabled (run-with-idle-timer 0.5 nil (lambda () (global-tab-line-mode -1)))))) (defun next-buffer-with-tab-line () "Switch to next buffer in tab-line order" (interactive) (let ((already-enabled global-tab-line-mode)) (unless already-enabled (global-tab-line-mode 1)) (let* ((buffers (my-tab-line-buffers)) (current (current-buffer)) (pos (cl-position current buffers))) (when pos (switch-to-buffer (nth (mod (1+ pos) (length buffers)) buffers)))) (unless already-enabled (run-with-idle-timer 0.5 nil (lambda () (global-tab-line-mode -1)))))) (global-set-key (kbd "") 'previous-buffer-with-tab-line) (global-set-key (kbd "") 'previous-buffer) (global-set-key (kbd "M-[") 'previous-buffer) (global-set-key (kbd "") 'next-buffer-with-tab-line) (global-set-key (kbd "") 'next-buffer) (global-set-key (kbd "M-]") 'next-buffer) ;; 段落导航 (global-set-key (kbd "M-p") 'backward-paragraph) (global-set-key (kbd "M-n") 'forward-paragraph) ;; 打开tab-line-mode (global-set-key (kbd "C-c u t") 'global-tab-line-mode) (global-set-key (kbd "") 'global-tab-line-mode) ;; 中键使用embark打开定义 (global-set-key (kbd "") 'xref-find-definitions) ;; 使用C-c 切换到scrath buffer (global-set-key (kbd "C-c ") 'scratch-buffer) ;; 使用M-<方向键>调整window (global-set-key (kbd "M-") 'shrink-window-horizontally) (global-set-key (kbd "M-") 'enlarge-window-horizontally) (global-set-key (kbd "M-") 'enlarge-window) (global-set-key (kbd "M-") 'shrink-window) ;; crux相关 (global-set-key (kbd "C-") 'crux-kill-line-backwards) ;; C-DEL kill line backwards (global-set-key (kbd "C-c k") 'comment-line) ;; 快速注释 (global-set-key (kbd "C-k") 'crux-smart-kill-line) ;; smart kill line (global-set-key (kbd "C-a") 'crux-move-beginning-of-line) ;; 移动到第一个缩进而非行首 (global-set-key (kbd "C-x K") 'crux-kill-other-buffers) ;; 删除除当前buffer之外的buffer ;; consult (global-set-key (kbd "C-x b") 'consult-buffer) ;; buffer菜单 (global-set-key (kbd "C-s") 'consult-line) ;; 搜索 (global-set-key (kbd "C-c i") 'consult-imenu) ;; imenu (global-set-key (kbd "C-c f r") 'consult-recent-file) ;; 最近打开 (global-set-key (kbd "C-c f f") 'consult-fd) ;; 调用fd进行目录内搜索 (global-set-key (kbd "C-c f l") 'consult-locate) ;; consult-locate (global-set-key (kbd "C-c f g") 'consult-ripgrep) ;; consult-ripgrep (global-set-key (kbd "C-c y") 'consult-yank-from-kill-ring) ;; 从kill ring中粘贴 (global-set-key (kbd "C-x r b") 'consult-bookmark) ;; 书签菜单,embark中有更多操作 ;; hungry-delete (global-set-key (kbd "C-c DEL") 'hungry-delete-backward) ;; 向后删除到第一个非空字符 (global-set-key (kbd "C-c d") 'hungry-delete-forward) ;; 向前删除到第一个非空字符 ;; drag-stuff (global-set-key (kbd "M-P") 'drag-stuff-up) (global-set-key (kbd "M-N") 'drag-stuff-down) ;; ace-windows (global-set-key (kbd "M-o") 'ace-window) ;; embark,修饰键之后加C-h可以查看所有指令 (global-set-key (kbd "C-;") 'embark-act) ;; 打开目录 (defun consult-directory-externally (file) "Open FILE externally using the default application of the system." (interactive "fOpen externally: ") (if (and (eq system-type 'windows-nt) (fboundp 'w32-shell-execute)) (shell-command-to-string (encode-coding-string (replace-regexp-in-string "/" "\\\\" (format "explorer.exe %s" (file-name-directory (expand-file-name file)))) 'gbk)) (call-process (pcase system-type ('darwin "open") ('cygwin "cygstart") (_ "xdg-open")) nil 0 nil (file-name-directory (expand-file-name file))))) (with-eval-after-load 'embark (define-key embark-file-map (kbd "d") 'consult-directory-externally)) ;;打开当前文件的目录 (defun my-open-current-directory () (interactive) (consult-directory-externally default-directory)) (global-set-key (kbd "C-c f d") 'my-open-current-directory) ;; org-mode (defun org-cycle-current-subtree() "Cycle current org-mode subtree." (interactive) (org-back-to-heading) (org-cycle)) (global-set-key (kbd "C-") 'org-cycle-current-subtree) (provide 'init-kbd)