前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Emacs 折腾记

Emacs 折腾记

作者头像
零式的天空
发布2022-03-28 13:00:35
发布2022-03-28 13:00:35
1.3K00
代码可运行
举报
文章被收录于专栏:零域Blog零域Blog
运行总次数:0
代码可运行

作为一名在 Windows 下使用了多年 gVim 的少年,已然把它在我需要的地方都收拾得服服贴贴,可以说 Vim 经过配置配置,上得厅堂下得厨房,基本能满足我的所有幻想。

直到那天突然产生了新的需求——Lisp。我工作中倒并没有用得到 Lisp 的地方,但是最近眼前晃过的一些书,比如《计算机程序的构造和解释》、《码农》杂志第 13 期,都对这门古老的语言推崇备至,历数现代 Lisp 方言的先进性,再者我也一直有学习一门函数式编程语言的想法,看起来,Lisp 是不二之选。但是在用 Vim 配置 Lisp 开发环境时遇到些问题,虽然有 Slimv,可用起来还是感觉各种不便。

在搜索网友们对此的经验之谈的时候,自然而然地,目光逐渐聚集到 Emacs 这个使用 Emacs Lisp 作为扩展语言的神的编辑器上。作为一名 Vimer,对 Emacs 不是没动过心,也曾尝试着使用过两回,最大的印象就是快捷键相比 Vim 实在是太难按了。没有需求就没有驱动力,这回貌似有了,Let’s 折腾起。

目录

  • TOC {:toc}

文本编辑环境——Evil

从 Vim 转到 Emacs 最大的不适应就是以前那些用得飞起的编辑模式和简洁熟悉的快捷键不好使了,需要切换到频繁的 Ctrl+ Alt+ 各种组合键去,以前就听说过有 Evil 这么个东西,试了一下发现这货还真是强大,常用的编辑模式、快捷键、命令,甚至宏和正则表达式等等操作都模拟得很好,跟在 gVim 里感觉一模一样,平移编辑习惯的坡度一下没了。

安装 Evil。

找到 Evil 并安装。

在 ~/.emacs 文件里加上:

这样就能在大部分地方(除了 eshell 等外)默认进入 Evil 模式使用 Vim 的编辑习惯了。

Common Lisp 开发环境

学习 Common Lisp 是使用 Emacs 最主要的任务,配好了文本编辑,当然得先把 Common Lisp 开发环境配置好了。

本来什么也不用配置的情况下 M-x ielm 就能进入一个 Emacs Lisp 的 REPL,但是它与 Common Lisp 毕竟还是有区别,所以还是另配置一个。

我使用网友们力荐的 Emacs + slime + sbcl 的组合,配置步骤如下:

http://www.sbcl.org/ 下载安装 sbcl 的最新版。

Update:

代码语言:javascript
代码运行次数:0
运行
复制
can't find core file at C:Program Files (x86)/sbcl/lib/sbcl//sbcl.core
代码语言:javascript
代码运行次数:0
运行
复制
apply: Searching for program: no such file or directory, sbcl

安装 slime 和 slime-company 插件。

找到 slime 和 slime-company 并安装。

在 ~/.emacs 文件里加上:

M-x slime 就可以进入到 REPL 进行 Common Lisp 的学习了。

Python 开发环境

虽然是一名很业余的 Python 选手,但是既然切了编辑器,自然也得在里面配好 Python 的开发环境。在网上找到一段简洁有效的配置步骤:

安装 virtualenv 和 jedi 插件。

在 ~/.emacs 文件里添加:

这样自动补全之类的就没有问题了。

然后在如何运行当前 py 文件这件事上遇到些问题。在 Vim 中我一直是用 :!python % 来运行的,但是在 Emacs 里,包括 Evil、eshell、shell 里,如果有等待用户输入的语句如 inputraw_input 等,因为 Emacs 只重定向了输出,无法重定向输入,会提示如下错误:

代码语言:javascript
代码运行次数:0
运行
复制
EOFError: EOF when reading a line

在网上寻觅良久未果后找到两种方法(其实都是利用 start 命令):

  1. 在 Evil 里 :!start python %
  2. 使用 Emacs 的运行外部命令的方法 M-! start python test.py

文件名、Buffer 和命令的渐进提示

编程环境下需要自动补全,在非编程环境下,比如切换 Buffer,打开文件,输入函数命令等,同样需要。

使用 ido-mode 和 projectile 自动定位/提示/补全文件名、Buffer 名。

代码语言:javascript
代码运行次数:0
运行
复制
(ido-mode t)
(require 'projectile)
(projectile-global-mode)
(setq projectile-require-project-root nil)
  • 自动显示匹配的文件名。
  • 不用输入全路径,输入文件名能自动定位到文件。
  • 切换 Buffer 终于可视化了。
  • ……

使用 smex 自动提示 M-x 后的内容。

代码语言:javascript
代码运行次数:0
运行
复制
(global-set-key [(meta x)] (lambda ()
                            (interactive)
                            (or (boundp 'smex-cache)
                                (smex-initialize))
                            (global-set-key [(meta x)] 'smex)
                            (smex)))

(global-set-key [(shift meta x)] (lambda ()
                                (interactive)
                                (or (boundp 'smex-cache)
                                    (smex-initialize))
                                (global-set-key [(shift meta x)] 'smex-major-mode-commands)
                                (smex-major-mode-commands)))

Markdown 编辑环境

使用 Github Pages 来搭建博客,自然离不开 Markdown。

配置这个倒是简单,安装 Markdown-mode 插件,然后在 ~/.emacs 中添加:

代码语言:javascript
代码运行次数:0
运行
复制
(autoload 'markdown-mode "markdown-mode"
  "Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
(add-hook 'markdown-mode-hook '(lambda ()
                                 (local-set-key (kbd "RET") 'comment-indent-new-line)))

打开 .md 后缀名的文件时将自动使用 markdown-mode,在 markdown-mode 下回车时执行 comment-indent-new-line,采用与当前行相同注释标记和缩进的换行,主要为了插入代码时方便。

C/S 模式快速启动 Emacs

Emacs 的启动速度是相比 Vim 来说被诟病吐槽得很多的一个点,我们在 Windows 下可以利用 C/S 模式来实现 Emacs 快速打开文件。

在 ~/.emacs 里添加

这样 Emacs 将在打开时启动一个 Server。Server 启动后会读取和加载配置文件,使用 emacsclientw.exe 打开文件时就不用再读取加载配置文件了,而是直接作为 Client 连接到 Server,这样基本能实现文件秒开。

添加 Edit with Emacs 到系统右键菜单。

代码语言:javascript
代码运行次数:0
运行
复制
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Edit with Emacs]

[HKEY_CLASSES_ROOT\*\shell\Edit with Emacs\command]
@="\"D:\\emacs\\bin\\emacsclientw.exe\" -a \"D:\\emacs\\bin\\runemacs.exe\" \"%1\""
代码语言:javascript
代码运行次数:0
运行
复制
emacsclientw.exe: No socket or alternate editor. Please use:
    --server-file (or environment varible EMACS_SERVER_FILE)
    --alternate-editor (or environment varible ALTERNATE_EDITOR)

平滑滚动

Emacs 默认的滚动方式和 Vim 不一样,是光标移到屏幕上或者下边缘时突然跳动半屏,比较不符合我目光跟着光标走的习惯,这个可以使用一个插件来解决。

安装 smooth-scrolling 插件。

在 ~/.emacs 文件中添加

这个 3 表示在距离屏幕上下边缘还有 3 行的时候再移动光标即自动滚屏,方便随时能看到当前编辑行的上下文,可以根据自己的使用习惯调整。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文本编辑环境——Evil
  • Common Lisp 开发环境
  • Python 开发环境
  • 文件名、Buffer 和命令的渐进提示
  • Markdown 编辑环境
  • C/S 模式快速启动 Emacs
  • 平滑滚动
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档