Emacs配置

本文详细介绍了如何个性化配置Emacs,包括设置home地址、调整界面风格、优化操作流程等,旨在提升Emacs的使用体验。主要内容涵盖Emacs的初始化设置、变量定制、界面外观调整、快捷键绑定、备份策略优化、文件类型识别、自动保存桌面环境、缓冲区管理、搜索与导航功能的增强等,旨在帮助用户根据个人需求高效定制Emacs,实现更高效的工作与编程环境。

;; 设置home地址

(setenv "HOME" "E:/emacs-24.1")
(setenv "PATH" "E:/emacs-24.1")
;;set the default file path
(setq default-directory "~/")
(add-to-list 'load-path "~/site-lisp")


(custom-set-variables
 '(tool-bar-mode nil)
;;关闭菜单栏.
 '(menu-bar-mode nil)
;;关闭滚动条.
;; '(scroll-bar-mode nil)
 
)
 

(custom-set-faces
 '(default ((t (:family "Consolas" :foundry "outline" :slant normal :weight normal :height 120 :width normal))))

)


;;启动0.5秒后自动最大化 (windows下)  
(run-with-idle-timer 0 nil 'w32-send-sys-command 61488) 


;; 最大化
;; (defun w32-restore-frame () 
;; "Restore a minimized frame" 
;; (interactive) 
;; (w32-send-sys-command 61728)) 


;; (defun w32-maximize-frame () 
;; "Maximize the current frame" 
;; (interactive) 
;; (w32-send-sys-command 61488)) 


;; (w32-maximize-frame) 
 
 ;;关闭烦人的出错时的提示声。
 (setq visible-bell t)
 
 ;;关闭起动时的那个“开机画面”。
 (setq inhibit-startup-message t)
 
;; (setq column-number-mode t) 
(global-linum-mode t)
;;显示列号。


(setq mouse-yank-at-point t)
;;不要在鼠标点击的那个地方插入剪贴板内容。我不喜欢那样,经常把 我的文档搞的一团糟。我觉得先用光标定位,然后鼠标中键点击要好 ;;的多。不管你的光标在文档的那个位置,或是在 minibuffer,鼠标 中键一点击,X selection 的内容就被插入到那个位置。


(setq kill-ring-max 200)
;;用一个很大的 kill ring. 这样防止我不小心删掉重要的东西。我很 努莽的,你知道 :P


(setq default-fill-column 60)
;;把 fill-column 设为 60. 这样的文字更好读。


;; (setq-default indent-tabs-mode nil)
;; (setq default-tab-width 8)
;; (setq tab-stop-list ())
;; (loop for x downfrom 40 to 1 do
;; (setq tab-stop-list (cons (* x 4) tab-stop-list)))
;; 不用 TAB 字符来indent, 这会引起很多奇怪的错误。编辑 Makefile 的时候也不用担心,因为 makefile-mode 会把 TAB 键设置成真正的 TAB ;; 字符,并且加亮显示的。


(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 default-major-mode 'text-mode)
;; 把缺省的 major mode 设置为 text-mode, 而不是几乎什么功能也 没有的 fundamental-mode.


(show-paren-mode t)
(setq show-paren-style 'parentheses)
;; 括号匹配时显示另外一边的括号,而不是烦人的跳到另一个括号。


(mouse-avoidance-mode 'animate)
;; 光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线。


(setq frame-title-format "emacs@%b")
;; 在标题栏显示buffer的名字,而不是 emacs@wangyin.com 这样没用 的提示。


(auto-image-file-mode)
;; 让 Emacs 可以直接打开和显示图片。


(global-font-lock-mode t)
;; 进行语法加亮。


(put 'set-goal-column 'disabled nil)
(put 'narrow-to-region 'disabled nil)
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil)
(put 'LaTeX-hide-environment 'disabled nil)
;; 把这些缺省禁用的功能打开。


;; 关闭自动备份
(setq make-backup-files nil)


;; (setq version-control t)
;; (setq kept-new-versions 3)
;; (setq delete-old-versions t)
;; (setq kept-old-versions 2)
;; (setq dired-kept-versions 1)
;; 设置一下备份时的版本控制,这样更加安全。


(mapcar
 (function (lambda (setting)
    (setq auto-mode-alist
  (cons setting auto-mode-alist))))
 '(("\\.xml$".  sgml-mode)
   ("\\\.bash" . sh-mode)
   ("\\.rdf$".  sgml-mode)
   ("\\.session" . emacs-lisp-mode)
   ("\\.l$" . c-mode)
   ("\\.css$" . css-mode)
   ("\\.cfm$" . html-mode)
   ("gnus" . emacs-lisp-mode)
   ("\\.idl$" . idl-mode)))
;; 一个简单的办法设置 auto-mode-alist, 免得写很多 add-to-list.


;; (setq user-full-name "")
;; (setq user-mail-address "")
;;设置有用的个人信息。这在很多地方有用。


(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)
;; 让 dired 可以递归的拷贝和删除目录。


;; 加载session
(require 'session)
  (add-hook 'after-init-hook 'session-initialize)
  
;; 加载desktop   M-x desktop-save
(load "desktop") 
(desktop-load-default) 
(desktop-read)


;; 自动保存桌面环境
;; (desktop-save-mode 1)


;; 加载ibufer
(require 'ibuffer)
(global-set-key (kbd "C-x C-b") 'ibuffer)


;; 快速切换窗口


;; 加载ido
(require 'ido)
(ido-mode t)


;;{{{ ido: fast switch buffers


(add-hook 'ido-define-mode-map-hook 'ido-my-keys)


(defun ido-my-keys ()
  "Set up the keymap for `ido'."


  ;; common keys
  (define-key ido-mode-map "\C-e" 'ido-edit-input)   
  (define-key ido-mode-map "\t" 'ido-complete) ;; complete partial
  (define-key ido-mode-map "\C-j" 'ido-select-text)
  (define-key ido-mode-map "\C-m" 'ido-exit-minibuffer)
  (define-key ido-mode-map "?" 'ido-completion-help) ;; list completions
  (define-key ido-mode-map [(control ? )] 'ido-restrict-to-matches)
  (define-key ido-mode-map [(control ?@)] 'ido-restrict-to-matches)


  ;; cycle through matches
  (define-key ido-mode-map "\C-r" 'ido-prev-match)
  (define-key ido-mode-map "\C-s" 'ido-next-match)
  (define-key ido-mode-map [right] 'ido-next-match)
  (define-key ido-mode-map [left] 'ido-prev-match)


  ;; toggles
  (define-key ido-mode-map "\C-t" 'ido-toggle-regexp) ;; same as in isearch
  (define-key ido-mode-map "\C-p" 'ido-toggle-prefix)
  (define-key ido-mode-map "\C-c" 'ido-toggle-case)
  (define-key ido-mode-map "\C-a" 'ido-toggle-ignore)


  ;; keys used in file and dir environment
  (when (memq ido-cur-item '(file dir))
    (define-key ido-mode-map "\C-b" 'ido-enter-switch-buffer)
    (define-key ido-mode-map "\C-d" 'ido-enter-dired)
    (define-key ido-mode-map "\C-f" 'ido-fallback-command)


    ;; cycle among directories
    ;; use [left] and [right] for matching files
    (define-key ido-mode-map [down] 'ido-next-match-dir)
    (define-key ido-mode-map [up]   'ido-prev-match-dir)


    ;; backspace functions
    (define-key ido-mode-map [backspace] 'ido-delete-backward-updir)
    (define-key ido-mode-map "\d"        'ido-delete-backward-updir)
    (define-key ido-mode-map [(meta backspace)] 'ido-delete-backward-word-updir)
    (define-key ido-mode-map [(control backspace)] 'ido-up-directory)


    ;; I can't understand this
    (define-key ido-mode-map [(meta ?d)] 'ido-wide-find-dir)
    (define-key ido-mode-map [(meta ?f)] 'ido-wide-find-file)
    (define-key ido-mode-map [(meta ?k)] 'ido-forget-work-directory)
    (define-key ido-mode-map [(meta ?m)] 'ido-make-directory)


    (define-key ido-mode-map [(meta down)] 'ido-next-work-directory)
    (define-key ido-mode-map [(meta up)] 'ido-prev-work-directory)
    (define-key ido-mode-map [(meta left)] 'ido-prev-work-file)
    (define-key ido-mode-map [(meta right)] 'ido-next-work-file)


    ;; search in the directories
    ;; use C-_ to undo this
    (define-key ido-mode-map [(meta ?s)] 'ido-merge-work-directories)
    (define-key ido-mode-map [(control ?\_)] 'ido-undo-merge-work-directory)
    )


  (when (eq ido-cur-item 'file)
    (define-key ido-mode-map "\C-k" 'ido-delete-file-at-head)
    (define-key ido-mode-map "\C-l" 'ido-toggle-literal)
    (define-key ido-mode-map "\C-o" 'ido-copy-current-word)
    (define-key ido-mode-map "\C-v" 'ido-toggle-vc)
    (define-key ido-mode-map "\C-w" 'ido-copy-current-file-name)
    )


  (when (eq ido-cur-item 'buffer)
    (define-key ido-mode-map "\C-b" 'ido-fallback-command)
    (define-key ido-mode-map "\C-f" 'ido-enter-find-file)
    (define-key ido-mode-map "\C-k" 'ido-kill-buffer-at-head)
    ))


(ido-mode t)
;;}}}


;; tab bar  tabbar.el
(require 'tabbar)
(tabbar-mode)
(global-set-key [(meta k)]   'tabbar-backward-group)  
(global-set-key [(meta j)]  'tabbar-forward-group)  
(global-set-key [(meta h)] 'tabbar-backward)  
(global-set-key [(meta l)] 'tabbar-forward)  
;; 把标签栏左边的那些按钮都取消掉
(setq  
 tabbar-scroll-left-help-function nil   ;don't show help information  
 tabbar-scroll-right-help-function nil  
 tabbar-help-on-tab-function nil  
 tabbar-home-help-function nil  
 tabbar-buffer-home-button (quote (("") "")) ;don't show tabbar button  
 tabbar-scroll-left-button (quote (("") ""))  
 tabbar-scroll-right-button (quote (("") "")))  
 
;; 改变tabbar的分组
(defun tabbar-buffer-groups ()  
  "tabbar group"  
  (list  
   (cond  
    ((memq major-mode '(shell-mode dired-mode))  
     "shell"  
     )  
    
((eq major-mode 'dired-mode)
      "Dired"
    )

((memq major-mode
               '(help-mode apropos-mode Info-mode Man-mode))
      "Help"
    )

    ((string-equal "*" (substring (buffer-name) 0 1))  
     "Buffer"  
     )  
    (t  
     "Main"  
     )  
    )))  
(setq tabbar-buffer-groups-function 'tabbar-buffer-groups)  


 ;; 使用 backward-kill-word (向后删一词)
(global-set-key "\C-w" 'backward-kill-word)
(global-set-key "\C-x\C-k" 'kill-region)
(global-set-key "\C-c\C-k" 'kill-region)
内容概要:文章以“智能网页数据标注工具”为例,深入探讨了谷歌浏览器扩展在毕业设计中的实战应用。通过开发具备实体识别、情感分类等功能的浏览器扩展,学生能够融合前端开发、自然语言处理(NLP)、本地存储与模型推理等技术,实现高效的网页数据标注系统。文中详细解析了扩展的技术架构,涵盖Manifest V3配置、内容脚本与Service Worker协作、TensorFlow.js模型在浏览器端的轻量化部署与推理流程,并提供了核心代码实现,包括文本选择、标注工具栏动态生成、高亮显示及模型预测功能。同时展望了多模态标注、主动学习与边缘计算协同等未来发展方向。; 适合人群:具备前端开发基础、熟悉JavaScript和浏览器机制,有一定AI模型应用经验的计算机相关专业本科生或研究生,尤其适合将浏览器扩展与人工智能结合进行毕业设计的学生。; 使用场景及目标:①掌握浏览器扩展开发全流程,理解内容脚本、Service Worker与弹出页的通信机制;②实现在浏览器端运行轻量级AI模型(如NER、情感分析)的技术方案;③构建可用于真实场景的数据标注工具,提升标注效率并探索主动学习、协同标注等智能化功能。; 阅读建议:建议结合代码实例搭建开发环境,逐步实现标注功能并集成本地模型推理。重点关注模型轻量化、内存管理与DOM操作的稳定性,在实践中理解浏览器扩展的安全机制与性能优化策略。
基于Gin+GORM+Casbin+Vue.js的权限管理系统是一个采用前后端分离架构的企业级权限管理解决方案,专为软件工程和计算机科学专业的毕业设计项目开发。该系统基于Go语言构建后端服务,结合Vue.js前端框架,实现了完整的权限控制和管理功能,适用于各类需要精细化权限管理的应用场景。 系统后端采用Gin作为Web框架,提供高性能的HTTP服务;使用GORM作为ORM框架,简化数据库操作;集成Casbin实现灵活的权限控制模型。前端基于vue-element-admin模板开发,提供现代化的用户界面和交互体验。系统采用分层架构和模块化设计,确保代码的可维护性和可扩展性。 主要功能包括用户管理、角色管理、权限管理、菜单管理、操作日志等核心模块。用户管理模块支持用户信息的增删改查和状态管理;角色管理模块允许定义不同角色并分配相应权限;权限管理模块基于Casbin实现细粒度的访问控制;菜单管理模块动态生成前端导航菜单;操作日志模块记录系统关键操作,便于审计和追踪。 技术栈方面,后端使用Go语言开发,结合Gin、GORM、Casbin等成熟框架;前端使用Vue.js、Element UI等现代前端技术;数据库支持MySQL、PostgreSQL等主流关系型数据库;采用RESTful API设计规范,确保前后端通信的标准化。系统还应用了单例模式、工厂模式、依赖注入等设计模式,提升代码质量和可测试性。 该权限管理系统适用于企业管理系统、内部办公平台、多租户SaaS应用等需要复杂权限控制的场景。作为毕业设计项目,它提供了完整的源码和论文文档,帮助学生深入理解前后端分离架构、权限控制原理、现代Web开发技术等关键知识点。系统设计规范,代码结构清晰,注释完整,非常适合作为计算机相关专业的毕业设计参考或实际项目开发的基础框架。 资源包含完整的系统源码、数据库设计文档、部署说明和毕
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值