先利其器:Emacs 安装及其黑话
安装、启动、退出
目前(2021-07-29)最新稳定版是 27.2,主线版本 Emacs 28 并且已经合并了 Native Comp,我日常使用的就是编译了 Native Comp 的主线版本。
我们这里选择最新的稳定版本 27.2。
Linux
Linux 平台下对于 CentOS/RHEL/Fedora 和 Debian/Ubuntu 推荐从源码中编译安装:
安装依赖
-
yum(CentOS/RHEL/Fedora)
sudo yum install \
GConf2-devel \
Xaw3d-devel \
dbus-devel \
dbus-glib-devel \
dbus-python \
gcc \
giflib-devel \
gnutls-devel \
gpm-devel \
gtk+-devel \
gtk2-devel \
ImageMagick \
ImageMagick-devel \
jansson-devel \
libX11-devel \
libXft-devel \
libXpm-devel \
libjpeg-devel \
libpng-devel \
libtiff-devel \
libungif-devel \
make \
ncurses-devel \
pkgconfig \
texi2html \
texinfo
-
apt(Debian/Ubuntu)
sudo apt update
sudo apt install -y autoconf automake bsd-mailx dbus-x11 debhelper dpkg-dev \
libacl1-dev libasound2-dev libdbus-1-dev libgif-dev libgnutls28-dev libgpm-dev \
libgtk-3-dev libjansson-dev libjpeg-dev liblcms2-dev liblockfile-dev libm17n-dev \
libncurses5-dev liboss4-salsa2 libotf-dev libpng-dev librsvg2-dev \
libselinux1-dev libsystemd-dev libtiff-dev libxml2-dev libxpm-dev procps quilt \
sharutils texinfo zlib1g-dev gvfs language-pack-en-base libasound2 libaspell15 \
libasyncns0 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 libbrotli1 \
libcairo-gobject2 libcairo2 libcanberra-gtk3-0 libcanberra-gtk3-module \
libcanberra0 libcroco3 libdatrie1 libdb5.3 libdrm2 libegl1 libenchant1c2a \
libepoxy0 libflac8 libfontconfig1 libfreetype6 libgbm1 libgdk-pixbuf2.0-0 \
libgif7 libgl1 libglvnd0 libglx0 libgpm2 libgraphite2-3 libgstreamer-gl1.0-0 \
libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 libgtk-3-0 libgudev-1.0-0 \
libharfbuzz-icu0 libharfbuzz0b libhyphen0 libice6 libicu66 libjansson4 \
libjavascriptcoregtk-4.0-18 libjbig0 libjpeg-turbo8 liblcms2-2 liblockfile1 \
libltdl7 libm17n-0 libnotify4 libnss-mdns libnss-myhostname libnss-systemd \
libogg0 liborc-0.4-0 libotf0 libpango-1.0-0 libpangocairo-1.0-0 \
libpangoft2-1.0-0 libpixman-1-0 libpng16-16 libpulse0 librsvg2-2 libsasl2-2 \
libsecret-1-0 libsm6 libsndfile1 libsoup2.4-1 libssl1.1 libstdc++6 libtdb1 \
libthai0 libtiff5 libvorbis0a libvorbisenc2 libvorbisfile3 libwayland-client0 \
libwayland-cursor0 libwayland-egl1 libwayland-server0 libwebp6 libwebpdemux2 \
libwoff1 libx11-6 libx11-xcb1 libxau6 libxcb-render0 libxcb-shm0 libxcb1 \
libxcomposite1 libxcursor1 libxdamage1 libxdmcp6 libxext6 libxfixes3 libxi6 \
libxinerama1 libxkbcommon0 libxml2 libxpm4 libxrandr2 libxrender1 libxslt1.1 \
libyajl2
源码安装
git clone https://git.savannah.gnu.org/git/emacs.git
cd emacs
git tag -l
git checkout emacs-27.2
./autogen.sh
./configure
make -j4 && sudo make install
对于 Archlinux 推荐参考其官方文档对照安装。
macOS
macOS 默认安装了 Emacs,但是版本比较低,建议大家从社区安装最新版。我之前比较常用的是 emacs-mac 这个版本,可以通过 Homebrew 安装:
$ brew tap railwaycat/emacsmacport
$ brew install emacs-mac
然后在终端里通过以下命令打开 Emacs:
$ open -a /usr/local/opt/emacs-mac/Emacs.app/
Windows
推荐使用 WSL,首先初始化 WSL 虚拟机,然后在 Linux 环境下参考 Linux 的安装,接下来可以参考 WSL 运行 Emacs GUI - 知乎 配置运行图像环境。
当然也可以通过 Powershell 和 Chocolatey 直接安装到 Windows 系统,但是配置 Git 等会稍微复杂:
PS> choco install emacs-full
安装后可以在 Powershell 中启动 Emacs:
退出 Emacs
快捷键按 C-x C-c
(就是按住 Ctrl
不松开继续按 x
,然后再按住 Ctrl
不松开继续按 c
,聪明的你肯定发现只要按住 Ctrl
不松开依次按 x
和 c
键就可以了)。
黑话
Emacs 诞生的时间比较早,有些概念也是很早就确定了,带着时代的气息,可能不是很好理解。所以为了便于大家理解,我们在此提前进行解释,大家遇到不懂的可以随时翻回来查看:
快捷键
黑话 |
解释 |
C-c |
按住 Ctrl 不松开然后按 c |
C-x b |
按住 Ctrl 不松开按 x , 然后松开以上按键后再按 b |
C-x C-c |
组合快捷键,你需要先按出 C-x ,然后继续按出 Ctrl-c ,两段快捷键中间可以间隔任意时间 |
C-g |
假如你快捷键按到一半想要放弃,可以通过这个快捷键放弃。(当然不仅是放弃快捷键,很多操作都可以通过这个快捷键终止) |
M-x |
Meta + c ,Meta 键一般意味着 Alt 或者 ESC |
s-l |
Super + l , Super 键现在比较少见,可以通过 C-x @ s 按出 s- 前缀,所以这个完整的快捷键是 C-x @ s l |
C-x @ 前缀 |
可以用这个前缀快捷键按出一些比较奇怪的「修饰键」,比如上面的 Super ,其他还有 Hyper |
M-x org-id-get-create RET |
M-x 会弹出命令输出框,然后输入 org-id-get-create 按回车( RET 表示回车) |
C-u 前缀 |
可以给 M-x 命令传递数字参数,比如禁用某些 minor mode C-u 0 M-x flycheck-mode RET 就是给 flycheck-mode 这个函数传递参数 0 |
概念
黑话 |
解释 |
frame |
图形界面的窗口:通过 C-x 5 2 创建一个试试,然后 C-x 5 0 关闭 |
window |
分割面板:通过 C-x 2 水平分割, C-x 3 垂直分割, C-x o 切换面板, C-x 0 关闭当前面板 |
face |
文本显示方式,字体等 |
fringe |
分割面板的边缘 |
kill |
剪切, C-k 剪切光标后面到行尾 |
kill-ring |
剪切板,可以保存多个,可以通过 M-y 选择 |
mode-line |
窗口底部的一个显示状态的横条 |
minibuffers |
mode-line 下面的消息回显区,同时某些命令下输入区也会在这 |
buffer
这个可能和大多数编辑器不太一样,Emacs 突出了 buffer 的语义,从而弱化了编辑文件语义,比如在其他编辑器或者 IDE 你可能是想的切换编辑文件,
但是 Emacs 更突出了是切换到对应的 buffer( C-x b
) 编辑,而后通过 C-x C-s
将 buffer 的内容保存到文件中(如果是生成的 buffer 则会提示选择要保存的文件名)。
同时 Emacs 有很多临时的 buffer 来充当日志的角色,比如默认的 *Messages*
(C-x b *Messages* RET
) 就是一个只读 buffer 显示一些日志信息,某些操作失败了之后也会保存一些错误消息到指定的 buffer 中,我们只要切换过去就能看到。