神之编辑器 Emacs

# 安装命令
brew install emacs
brew install sbcl # 顺便把 common lisp 也装上

其实 Mac 是有自带 Emacs 的,位置是/usr/bin/emacs,只是版本非常旧,通过brew安装的位置在/usr/local/bin/emacs,可以通过下面的命令删除 Mac 自带的 Emacs:

sudo rm /usr/bin/emacs
sudo rm -rf /usr/share/emacs

为了能在 git 中默认使用 Emacs,需要做以下配置:

# ~/.bashrc
export EDITOR="emacsclient -t -a=\"\""
export ALTERNATE_EDITOR=""

# ~/.gitconfig
[core]
    editor = emacsclient -t -a=\\\"\\\"

上面的配置会调用 emacsclient 去连接 emacs daemon服务,如果服务没启,就先启动服务再去连接。

常用命令

emacs --daemon=<session-name>
emacsclient -t -s <session-name>

alias e='emacsclient -t -a ""'

键位映射

为了保证在远端服务器与本地开发的一致行,我希望在终端里面运行 emacs,而非 GUI 版本,但是这样也带来一个严重的问题,终端不支持一些特殊的键位组合,对于 Emacs 来说主要是一些 escape code,需要手动进行映射,解决方法可以参考 Stackoverflow 上的这个问题How do I bind C-= in emacs

iTerm2 键位映射
iTerm2 键位映射

还有一点需要注意,Mac 自身有一些快捷键可能与 Emacs 冲突,主要是 Mission Control,我直接取消掉了。

关闭 Mission Control
关闭 Mission Control

如果上述方案无法解决你的问题,Google emacs + input-decode-map 关键字即可。Emacs China 也是一个好地方, 由于 Emacs 的使用门槛,决定了其社区的高质量,我的提问很快就得到了准确的解答。

或许我的配置文件也能给你一些启发:

(defun my/global-map-and-set-key (key command &optional prefix suffix)
   "`my/map-key' KEY then `global-set-key' KEY with COMMAND.
 PREFIX or SUFFIX can wrap the key when passing to `global-set-key'."
   (my/map-key key)
   (global-set-key (kbd (concat prefix key suffix)) command))

 (defun my/map-key (key)
   "Map KEY from escape sequence \"\e[emacs-KEY\."
   (define-key function-key-map (concat "\e[emacs-" key) (kbd key)))

(global-set-key (kbd "C-c l") 'mc/edit-lines)
;; 需要配合 iTerm2 进行 key mapping
;; https://stackoverflow.com/a/40222318/2163429
(my/global-map-and-set-key "C-=" 'er/expand-region)
(my/global-map-and-set-key "C--" 'er/contract-region)
(my/global-map-and-set-key "C->" 'mc/mark-next-like-this)
(my/global-map-and-set-key "C-<" 'mc/mark-previous-like-this)
(my/global-map-and-set-key "C-c C->" 'mc/mark-all-like-this)

这里有一些参考文章:

最后, Emacs 配置文件推荐用 git 进行版本管理,方便迁移与交流。这是我的 .emacs.d

results matching ""

    No results matching ""