十个高效的spacemacs配置

使用emacs一段时间了,总结出自己实践的一些快捷配置,我用的版本是自己编译的24.5。

快速切换至上个buffer

切换缓冲区C-x b RET还是有点繁琐,当我在两个缓冲区间快速编辑的时候,我希望一个动作就能完成切换,所以我设置Shift+TAB切换至上个buffer

(global-set-key (kbd "<backtab>") #‘(lambda ()
                                      (interactive)
                                      (switch-to-buffer (other-buffer (current-buffer) 1))))

键盘宏的录制和回放

默认F3是录制宏,F4是停止录制,C-x x回放宏

(global-set-key (kbd "C-x x") ‘call-last-kbd-macro)

逗号后自动加空格

(global-set-key (kbd ",")
                #‘(lambda ()
                    (interactive)
                    (insert ", ")))

使用yasnippet复制当前行的编辑模式

在多数编程语言中,相邻行的代码的冗余度是非常高的,下面的C-c TAB将当前行转化为临时的snippet模板,非常好用(依赖:yasnippet)

你可以尝试一下,编辑go代码是,在fmt.Prinln("hello world")上按C-c TAB是什么效果

(defun spacemacs/wsk-yasnippet-current-line ();; C-c TAB
  (interactive)
  (let ((current-line (string-trim-right (thing-at-point ‘line t))))
    (end-of-line)
    (newline-and-indent)
    (yas-expand-snippet (spacemacs//wsk-yasnippet-string-to-template (string-trim current-line)))))

(defun spacemacs//wsk-yasnippet-string-to-template (string)
  (let ((count 1))
    (labels ((rep (text)
                  (let ((replace (format "${%d:%s}" count text)))
                    (incf count)
                    replace)))
      (replace-regexp-in-string "[a-zA-Z0-9]+" #‘rep string))))
      
(global-set-key (kbd "C-c TAB") ‘spacemacs/wsk-yasnippet-current-line)

显示行号,括号匹配,高亮括号配对

;; 显示行号
(global-linum-mode)
(setq column-number-mode t)

;; 高亮括号配对
(electric-pair-mode)

;; 高亮括号配对
(show-paren-mode t)
(setq show-paren-style ‘parenthesis)

undo-tree默认撤消一次

undo-tree非常棒,但是大多数时候我们只需要撤消一次,你需要按C-x u p RET,下面的绑定使得undo-tree默认处于撤消一次的状态上C-x u RET,少按一次p。我感觉对于撤消一次的情形应该单独设置一个快捷键,但好在我用撤消的次数并不多。

(require ‘undo-tree)
(define-key undo-tree-map (kbd "C-x u") #‘(lambda ()
                                            (interactive)
                                            (undo-tree-visualize)
                                            (undo-tree-visualize-undo)))

speedbar

老实说,spacemacs内置了helm后,我不怎么用speedbar了。speedbar的问题是他创建了一个缓冲区,而这个缓冲区对于C-x b是可见的,我从来都不想切换至speedbar缓冲区,所以我写了下面的代码,按F2切换speedbar的开启状态,并且自动刷新,当你不希望显示speedbar的时候,干脆把buffer给kill掉。

注:我用了sr-speedbar

(require ‘sr-speedbar)
(global-set-key (kbd "<f2>") (lambda()
                               (interactive)
                               (sr-speedbar-refresh)
                               (sr-speedbar-toggle)
                               (unless (sr-speedbar-exist-p)
                                 (kill-buffer "*SPEEDBAR*"))))

s键在speedbar中搜索

(require ‘speedbar)
(define-key speedbar-mode-map (kbd "s")
  #‘(lambda ()
      (interactive)
      (beginning-of-buffer)
      (isearch-forward)))
(define-key speedbar-mode-map (kbd "u")
  #‘(lambda ()
      (interactive)
      (speedbar-up-directory)))

dot-spacemacs

配置elpa

把下面的代码放进spacemacs/init中

  (setq package-archives ‘(("gnu" . "http://elpa.gnu.org/packages/")
                           ("marmalade" . "https://marmalade-repo.org/packages/")
                           ("melpa" . "http://melpa.org/packages/")))

jazz颜色主题

jazz是一个暗色的主题,leuven则是亮版的代表,对Org Mode支持出奇的好,可惜在spacemacs下表现不佳。这些代码放在set-default里面

   dotspacemacs-themes ‘(jazz
                         solarized-dark
                         leuven
                         solarized-light)

字体

我这里字体设置的有点大了,没办法,打游戏眼有点花,字体需要在spacemacs项目上找下载地址自行安装,话说我也喜欢exvim,但自从有了spacemacs,你懂的。

   dotspacemacs-default-font ‘("Source Code Pro"
                               :size 24
                               :weight normal
                               :width normal
                               :powerline-scale 1.1)

将private-layer挪出来

默认在~/.emacs.d/private目录下,那太傻,我根本不动spacemacs的源码,都是自己创建init-package-layer

configuration-layer-private-directory "~/dot-spacemacs/"

设置专属yasnippet模板

默认spacemacs带了一堆snippet模板,老实说我都不敢按TAB,谁知道会冒出些什么,于是我干脆自定义了snippet模板路径,所有的模板都改为大写,比如在golang里面fmt.Println,模板缩写是PLN。全部改为大写后,误操作少了很多。

      (require ‘yasnippet)
      (setq yas-snippet-dirs "~/dot-spacemacs/snippets")
      (yas-global-mode 1)
      (yas-reload-all)

Org Mode

老实说外行用emacs第一动力应该是org mode,但org mode范围很广,强烈推荐看官方manual,下面是官方推荐的设置,我觉得太赞了。

(global-set-key "\C-cl" ‘org-store-link)
(global-set-key "\C-cc" ‘org-capture)
(global-set-key "\C-ca" ‘org-agenda)
(global-set-key "\C-cb" ‘org-iswitchb)
时间: 2024-10-07 15:42:26

十个高效的spacemacs配置的相关文章

grunt配置太复杂?发布一个前端构建工具,简单高效,自动跳过未更新的文件

做前端项目,如果没有一个自动化构建工具,手动处理那简直就是坑爹O(∩_∩)O.于是上网了解了下,grunt用的人不少,功能也挺强大.看了一下grunt的配置(包括gulp),感觉稍显复杂.当时项目结构非常简单,就是单文件夹下的html文件,再加上js.css.图片.需要的功能也就js的合并和压缩,html和css的简单格式化,功能简单,So easy……开搞,搞定第一版,一直用到今年.最近整理项目,感觉只支持单一文件夹,功能全内置,实在不够灵活,于是重写了第二版.功能实现没什么难的,麻烦的是打造

Ubuntu 14.04 安装配置备忘录

完全在 Linux 下工作,大概有3年时间了. 之前都是用 Windows, 而把 Linux 装在虚拟机里,现在反过来,把 Windows 装在了虚拟机里,只是因为偶尔还要用网银的缘故. 以我这几年的使用经验, 一句话: Linux 用过之后就回不去了. 以下记录我的 Ubuntu 14.04 Linux 安装配置, 算是备忘录. 需要说明的一点是: 我从来不觉得使用 Debian, CentOS, 或者 Arch, Gentoo 的人很牛, 只能说明你们不珍惜时间,就爱瞎折腾, 当然如果你是

轻量级的.NET对象查找服务和AOP开发框架Netop.Core源码解说(2)--配置

先把Netop.Core的最核心部分"对象查找服务"放一放,先说说应用系统的配置. 一个应用系统的配置是少不了的,除非你是一个纯硬代码族顽固者. 也见过有的应用系统通过系统提供的健值(key-value)方法在appSettings节点下设了几十个甚至上百个,不堪入目,更别说条理性了. 开发一个应用框架,配置一般是少不了,如log4net就有自己的配置,不会让你在appSettings设几十个条目. 开发配置是很简单的,下面慢慢说来. 在NET应用中,配置信息以XML文档储存.WEB应

docker:virtualbox 安装CoreOS系统,配置registry-mirror

"CoreOS是一款面向新智云(www.enncloud.cn)的轻量级OS.它以Linux系统为基础,因建设数据中心的需要从Linux底层进行了内核裁减.一系列的机制和工具保证了CoreOS组建的云环境的安全,可靠和最新.CoreOS设计之初就定位于可以提供一种动态缩放和管理集群的能力,可以方便管理类似google 这种庞大数据中心的集群." |今日嘉宾:freewebsys| 1.关于CoreOS Docker非常的火,但是要跑系统还是安装一个CoreOS的比较好. 毕竟是专业做虚

golang module 在 spacemcs 中的配置

概述 golang 官方的包管理从 1.11 版本就开始支持了, 之前尝试了几次, 效果都不理想, 就一直用 dep 来管理 package. 最近 1.13 版本发布了, 使用 go module 的官方管理方式越来越多, dep 也早就不在继续开发了. 鉴于此, 是时候把 golang 的包管理方式迁移到 go module 上来了. 我一直是用 spacemacs 来开发各种应用, 所以本文也是介绍如何在 spacemacs 中配置 golang module 的开发环境. 配置方法 go

转 apollo客户端实现不重启项目动态获取配置

一.准备工作 1.1 环境要求 Java: 1.7+ Guava: 15.0+ Apollo客户端默认会引用Guava 19,如果你的项目引用了其它版本,请确保版本号大于等于15.0 注:对于Apollo客户端,如果有需要的话,可以做少量代码修改来降级到Java 1.6,详细信息可以参考Issue 483 1.2 必选设置 Apollo客户端依赖于AppId,Apollo Meta Server等环境信息来工作,所以请确保阅读下面的说明并且做正确的配置: 1.2.1 AppId AppId是应用

应用开发解决方案

一.需求分析 企业整体管理是一个完整的体系,如果 把这个体系比做一个拼图,企业信息化通过各个业务系统覆盖了一部分业务 企业通过采购实施通用软件的方式,覆盖了企业的核心业务和专业化业务然而系统只满足了部分需求,还有很多零碎空白区域.这些区域通常不能通过产品化的软件满足,要么软件产品过于复杂,要么业务不匹配:而且这些区域一般不是企业的核心业务,不会通过大规模的开发来实现,如何解决? 二.方案实现对于企业的这类非专业应用,业务复杂度通常都不高,基本都是 表单+流程+报表类应用,H3 BPM包含有应用引

openstack-mikata之网络服务(controller安装部署)

1.以root用户登陆数据库,创建neutron,并设置权限 2.创建neutron服务证书 1)创建neutron用户 2)将neutron添加到admin角色 3)创建neutron服务实体 3.创建网络服务API终端 4.配置网络1模型类型 1)安装相关软件包 2)编辑/etc/neutron/neutron.conf a.[database]配置数据库连接 b.[DEFAULT]配置启用ML2插件并禁用其他插件.配置 "RabbitMQ" 消息队列的连接.配置认证服务访问.,配

思科CCNA第四学期第二章答案

1 LCP 可协商哪两个选项? (选择两项.) 链路质量 身份验证 动态流量控制 压缩以及 IP 的网络层地址 使用面向连接的通信方法还是无连接通信方法 2 下列哪三种说法正确描述了 PPP 身份验证? (选择三项.) PAP 以明文发送. PAP 通过三次握手建立链路. PAP 可防护反复试验性攻击. CHAP 通过双向握手建立链路. CHAP 使用基于 MD5 哈希算法的询问/响应方法. CHAP 通过重复询问进行检验. 3 请参见图示.根据执行 show interface Serial0