Git Product home page Git Product logo

.emacs.d-1's Introduction

A fast and incredible Emacs config

Build Status License Supports Emacs 26-28.x

个人Emacs配置

仿 Centaur Emacs 的个人配置.

git clone --depth 1 https://github.com/condy0919/.emacs.d ~/.emacs.d

仅包含C/C++/Rust/OCaml/Haskell相关配置,且全线使用lsp。当前由于 ocaml-lsp十分难用,haskell-ide-engine水土不服,故这2个语言没有采用lsp

保持着尽量使用Emacs自带功能的原则,能用自带的就用自带的。

需要的依赖

  • hunspell 拼写检查,目前仅在git-commit-mode下启用
  • languagetool 更好的拼写检查、语法纠错工具
  • rg 更快的grep
  • cmake 编译vterm的模块、c++项目的构建工具
  • git 这个就不用说了吧?
  • gcc 这个就不用说了吧?

基础配置

最基础的配置包含了那些在所有mode下都不会变更的配置,包含了:

包名 功能
align align-regexp可以自动对齐选择的符号
autorevert 当文本被其他编辑器修改后,可自动更新
delsel 选中文本可以直接覆盖着写,一般编辑器都默认开这个功能
hl-line 高亮当前行
paren 高亮匹配的括号
saveplace 自动记录上次打开文件的位置
simple modeline里显示行号、列号以及当前文本的大小
so-long 打开长行的文件不再痛苦 (Emacs 27+ 自带)

而这几个包也是Emacs自带的。

为了保持界面的整洁,禁用了菜单栏、工具栏和滚动条。

在跳转之后会闪烁一下当前行,这样就比较容易知道当前光标在哪里了。这个功能也是基于 自带的pulse

插件配置、升级

选用use-package来管理插件。对于elpa, melpa里没有的包,使用straight.el辅 助下载。straight.el在自举过程中会连接githubusercontent.com这个域名,此域名在 国内访问几乎不可达,建议bypass之。

而自动升级选择了auto-package-update

界面

使用了doom-themesdoom-modeline,简直惊艳!doom-one的界面非常好看!

趁手的工具

which-key, rg是比较常用的工具。更有projectile管理项目,让项目编译、测试、 运行变得更加方便。而且还有counsel-projectile的加成,在原有projectile的基础上 又添加了许多ivy action,更一步提升了便捷性。

avy用来代替vim-easymotion。而且avy还提供了goto-line的功能,这下都不用开 relative line number8k 9j这样跳了。

自然ivy,counsel是要上的,补全功能太好用了。没有counsel加持的M-x根本无法 让人按下去。这里没有使用swiper是因为它下方占用空间过大(继承于ivy的设置),搜 索时肯定是比较在意上下文,而一个swiper就占用了ivy-height行就显得有点奢侈。而 自带的isearch在稍加设置之后,效果也还可以接受。当evil-search-module设置成 isearch后,也可以使用相同的快捷键来触发ivy-occur。再加上ivy-occur可以与 wgrep配合,将原来的「搜索、打开对应文件、修改」变成了「搜索、修改」。

vterm作为一个与原生终端更加接近的终端模拟器,单就外观来看已经比Emacs自带的 eshell好看。再加上shell-pop的辅助,美观又实用的terminal模拟器就出现了。

Emacs下的markdown-mode让人惊艳,突然觉得写文档也会这么快乐。与之相辅相成的还 有separedit,让人在代码里写documentation comments不再烦恼。

neovim迁移过来的我,自然是常开evil-mode,相关的evil套件有:

  • evil-leader
  • evil-nerd-commenter
  • evil-surround
  • evil-magit

按键绑定

evil-mode

normal状态下增加了如下键绑定:

key function
gs evil-avy-goto-char-timer 来跳转到目标字符
go evil-avy-goto-word-or-subword-1 来跳转至目标单词处
gl evil-avy-goto-line 来跳转到对应行

avy真乃神器也!

Emacs

key function
M-; evilnc-comment-or-uncomment-lines 注释与反注释
C-c ' 通过separedit在注释中快乐地写代码
C-c x 调用quickrun来运行当前buffer内的代码。eval快人一步!
M-= 在下方弹出一个vterm终端
C-c p projectile调用前缀,方便地在项目内跳转、编译等其他功能
C-c t o hl-todo-occur查找当前buffer内的TODO/FIXME等关键字
C-c t p 上一个高亮的关键字
C-c t n 下一个高亮的关键字
C-x g 呼出 magit
C-M-; git-commit时会有flyspell检查单词是否错误,通过此按键自动修正
M-o 原生C-x o来切换window有点反人类,绑定在单键上就可以快速的切换至其他窗口了
C-c [ 调用align-regexp提供以一个对齐符号的功能
C-c i l 方便地插入SPDX形式的license头部

更详细的按键绑定请直接看代码. :-)

通用开发设置

  • 显示行末空白字符
  • 高亮TODO FIXME等关键字
  • dumb-jump作为lsp-find-defition失败后的备份手段
  • magit作为git客户端
  • hideshow来显示/隐藏结构化的代码块,如 "{ }" 函数体等
  • rmsbolt作为一个本地的 Compiler Explorer 相比于godbolt友好一点
  • quickrun作为一个能够执行部分区域内的代码块,方便快速验证函数功能

prog-mode

cc-mode

  • clangd lsp-mode
  • 禁用了flycheck,因为gcc/clang/cppcheckchecker无法正确包含头文件的路径

rust-mode

  • rls lsp-mode 默认

ocaml-mode

  • 启用 merlin 作为补全后端

haskell-mode

  • 使用 dante

个性化

  • 自己博客文章的查找、新建
  • 插入SPDX形式的license头功能已独立license.el
  • 将常用的功能键绑定在leader键上

.emacs.d-1's People

Contributors

condy0919 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.