Emacs是否可以支持多行编辑?就像sublime那样,在多行设置光标,在多行进行操作?
连按键都能完美模拟。
有一个包 叫 multi-curse 好像就只干这个的
multi-cursor⋯⋯
现在在 Emacs 上的多光标操作插件有三个(就我所知的):
multi-cursor 使用最广的
evil-mc evil 适配版的
evil-multiedit 受不了 evil-适配版,自己造轮子适配evil
By the way, 同学提问之前应该先搜索一下
「多个光标」是不支持的,但有插件可以做到。「多行编辑」看你指什么了,不见得就需要「多个光标」才能实现,比如
- 格式化一个 Markdown 代码块可以用
C-x r t
(string-rectangle
) - 对齐一个 Alist 可以用
M-x align
我没用过 Sublime 或者 Emacs 的 「多个光标」的插件,我可能不大需这个功能,纵然它看起来很酷。
虽然我的配置当中有 multiple-cursors, 但现在很少用了。
multiple-cursors 之类的操作问题在于,操作过程中一旦出错,你再想把光标在回归到正确的位置就很困难了,只好二二三四再来选择一遍。
Ctrl-D (类似 Sublime Text )选中第2个、第3个。。。编辑位置,中间跳过某些,或者再调转光方向选择第-1 、第-2个。。。等等,操作起来很麻烦。中间掉链子就哭了,特别是当选择的跨度超过一屏。但是不否认这个操作看起来很酷炫。
我的替代方案是,先把需要批量编辑的内容圈出来:
- 只编辑一次,就简单选中需要编辑的段落,然后正则替换
:'<,'>s/foo/bar/g
- 需要多次编辑的,就 narrow 这段文本,然后正则替换。屏蔽了其他不想干的内容,也省去了多次选择。
- 更复杂的情况,用 helm-swoop 把需要编辑的行找出来,集中到一个临时 buffer 编辑。
这样做的好处:
- 很方便观察到修改前/后的差别,确认有无疏漏
- 筛选出来(等修改的)位置可以比较长时间的保持
@twlz0ne 多光标编辑有个问题:有时候手抖多选/少选一处 occur,就得打断重新来过。
后来看到一篇文章:
https://macplay.github.io/posts/vim-bu-xu-yao-duo-guang-biao-bian-ji-gong-neng/
文章中提到的 cgn
方法我觉得挺好,evil 应该也支持。
好处是支持正则,可以按 .
重复,或者 n
跳过,或者 u
撤销。
灵活性高了很多,可以作为参考。
cgn
然后.
几次我今天才知道,我是cw
然后n.
几次这样。在以前evil-multi-edit在spacemacs下有秘制bug的时候。现在基本再也不用啦。
evil-multiedit可以花式toggle occur,我都是mark-next
哒哒哒按几下,看标记到我想要的最后一个了,再next-occur + toggle-ocurr。
(下面几句评论到博客了,这里也贴一下)
Drew Neil的书我也看了一点,最大的两个收获是:
-
g/re/normal A;
g/re/normal @t
这个normal
这个ex command - 可以不离开insert-mode的编辑,就不离开,然后用
.
重复,比@@
要快。比如a+b
变成a + b
,然后再应用到c/d
和e*f
上。我自己把这种技巧叫做"micro macro"。
可以 toggle occur 的话还好,Vim 的对应插件就没这个功能,导致我每次选 occur 的时候得小心翼翼。另外,自动补全不工作也是个槽点。
global
命令确实是神兵利器,我经常用。
宏我倒是用的少,原因是重放的时候经常发现录制的有问题。。。倒不如拆分成小段操作,用 .
号重复来的快。
忽略操作难易程度只谈能否实现,都是耍流氓的行为。正常用户不会说,放下手头的工作,跑去研究下 lisp 语法,再写个 简单几行代码 来完成某件事情。
话说回来,Vim 的宏也能直接用 vim script 写啊,应该还可以用 python 写,用 lua 写,用 ruby … 等写。然而有什么卵用呢?录制完再去编辑宏的人寥寥无几。真正玩的溜的人都跑去写插件了。
So who wants Lua Python Ruby, they don’t give me anything.
很佩服使用宏的人。要 ng 多少次,才能成功录制一段宏?我觉得还是写代码简单点。
Edit macro 也可以用来写代码,某种程度上能弥补 Elisp 缺乏 reader macro 的这一抽象层的劣势。
gn
对象配合 .
操作符确实能部分代替多光标编辑。但是如果改动超过一组操作——比如插入做括号,然后向后移动两个词,再插入又括号——是不是就只能靠宏解决了?
我已经不记得上次使用多点编辑是什么时候了,这东西就是看着酷炫,实际用起来体验很糟糕。