重新发现普通Emacs的文本编辑能力
作为一名全职Emacs用户,我已经习惯了使用社区提供的众多包,它们极大地增强了Emacs的文本编辑功能。 有一个说法是Emacs所缺的是一个好的编辑器,然而真的是这样吗? 下面是我最近使用内置功能替代的包。
expand-region.el - 默认标记快捷键
Expand region是Magnar Sveen创造的一个很棒的包。他因为dash.el, s.el和multiple-cursor.el而出名。 这个包确实非常有用,因为它通过扩展区域的语义来创建区域。所以在实践中,它可以标记一个单词,一个句子,一个段落,等等。
问题是,我需要不断地扩展这个地区,直到它得到我想要的东西,这让我觉得麻烦。所以我决定花时间学习默认的Emacs的标记系统,它似乎更适合我:
- M-@标记一个单词
- M-h标记一个段落
- C-M-@标记一个balanced表达式或s-表达式
- C-M-h标记一个函数(顶级定义的)
- C-x h标记整个buffer
Since these semantics are enough for my needs, and the keybindings are somewhat consistent with the M- works on word level, C-M- on sexps and defuns paradigm of moving keybindings I am quite happy with them. 因为这些语义已经足够满足我的需要,而且这些快捷键与我已经熟悉的移动命令的快捷键有一致性,M- 是操作单词级别,C-M-是操作在表达式和函数上
yasnippet - Abbrev
All in all since my use of snippets is not that extensive, Abbrev mode seems to cover my needs almost fully.
Yasnippet 已经大名鼎鼎了,它可以用来创建几乎任何东西的模板。原生Emacs对该问题的解决方案是Abbrev。
虽然不像Yasnippet 那样强大(Yasnippet的主要优势是你可以在扩展后控制光标的位置,这一点Abbrev做不到) 然而,Abbrev提出了一个非常适合我自己的工作流程。
如果你发现某些内容一直在重复,你可以立即通过 C-x a g
将其保存为一个全局缩写或 C-x a l
将之保存为一个局部缩写(由buffer所在的major-mode决定)。
总而言之,由于我不常用代码片段,Abbrev模式似乎完全满足了我的需求。
所有折叠模式 -- Hideshow
我还没有真正尝试过Emacs的任何一种折叠模式,主要是我想尝试某些模式时发现了与Emacs捆绑在一起的hs模式。
hideshow 可以折叠大多数编程语言中的块,只要这些语言的开始/结束块的结构合理。
它工作得很好,可以通过 M-x hs-mino-mode
启用它,然而它的快捷键非常的糟糕。即使按照Emacs的标准,它们也很糟糕:
- C-c @ C-c 切换显示块。
- C-c @ C-a 现实所有.
- C-c @ C-t 隐藏所有.
如果你碰巧在尝试hs模式,帮你自己一个忙,把这些快捷键改掉!还可以通过S-mouse-2(通常是指中键单击)切换块。
有趣的发现
我最近发现了一些有用的功能:
- C-x C-o 删除多余的连续空白行,只保留一个空行,整齐!
- M-s M-w 在Web中搜索标记区域的内容。
- M-$ checks the word's under point spelling, or checks a region if there is one.
- C-x C-t 互换两个balanced expressions。
- 你可以用C-x C-l或C-x C-u来改变一个区域的大小写。
- M-% (query-replace) also works in a region there is one, else works on the whole buffer.
- M-% (query-replace) 当标记了一个区域时作用于这个区域,否则适用于整个缓冲区。
- 通过运行M-x studlify-buffer,你总是可以成为一个14岁的前卫少年。