Multiple-cursors 真的好爽!

所标即所见,所见即所得

我也觉得multiple cursors真是好用到爆炸

对于绝大数编码的场景,multiple cursors已经足够用了,更重要的还非常容易上手。

vim那些复杂的操作,虽然可以应对更多更复杂的场景,但是太难上手了,这些场景也不多见。

multiple cursors的发明,大大增强vscode这类编辑器的文本操作能力。

我觉得vim和emcas也应把multiple cursors整合到核心代码中去,用c来实现,开箱即用,也可以做好跟各种第三方库的支持。

目前这种第三方差插件支持的multiple cursor,跟很多package的兼容都有问题,很难受。

不知道大佬们是怎么想的

问下跟哪些包兼容性有问题?

evil-mc与company似乎就不太兼容,也可能是我的配置有问题?

和 emacs 29 的像素级滚动 pixel-scroll-precision-mode 有冲突。

多光标支持确实应该 Emacs 内置,我用过 Emeditor 的多光标,很好用。

1 个赞

最好用的还是sublime的multi cursor,其他都是模仿的,包括vscode。要不要内置需要取舍,这个要问下maintainer看看。

pixel-scroll-precision-mode 跟很多包都有冲突,我在macOS上卡的不行。

我没有用evil,所以不清楚是不是配置问题,日常使用没有碰到问题。

推荐试试 markmacromarcrusors ,这两个插件是受 meow 中的 beacon 启发的。

基本原理是: 只在一处编辑然后用 kmacro 把编辑应用到所有 mark 文本上,速度比 mc 快多了。

mc 的一个问题就是光标一多就太卡了。

5 个赞

我用的包不多,在 macOS 用着还不错。另外,pixel-scroll-precision-mode 还和 beacon 有冲突,beacon-blink-when-window-scrolls 要设置为 nil 才行。

1 个赞

推荐用我写的 markmacro, 门槛很低, 而且灵活性要比 multiple-cursors 好, 性能也要好很多。

如果 evil 用户直接用狗哥的 meow, 应该比 markmacro 还要强大。

1 个赞

其实很多场景可以用rect来解决,写个hydra来操作。其他复杂的场景再采用multiple-cursors。

用 Hydra 写的 multiple-cursors,

(use-package multiple-cursors
  :ensure t
  :after hydra
  :bind
  (("C-x C-h m" . hydra-multiple-cursors/body)
   ("C-S-<mouse-1>" . mc/toggle-cursor-on-click))
  :hydra (hydra-multiple-cursors
		  (:hint nil)
		  "
Up^^             Down^^           Miscellaneous           % 2(mc/num-cursors) cursor%s(if (> (mc/num-cursors) 1) \"s\" \"\")
------------------------------------------------------------------
 [_p_]   Prev     [_n_]   Next     [_l_] Edit lines  [_0_] Insert numbers
 [_P_]   Skip     [_N_]   Skip     [_a_] Mark all    [_A_] Insert letters
 [_M-p_] Unmark   [_M-n_] Unmark   [_s_] Search      [_q_] Quit
 [_|_] Align with input CHAR       [Click] Cursor at point"
		  ("l" mc/edit-lines :exit t)
		  ("a" mc/mark-all-like-this :exit t)
		  ("n" mc/mark-next-like-this)
		  ("N" mc/skip-to-next-like-this)
		  ("M-n" mc/unmark-next-like-this)
		  ("p" mc/mark-previous-like-this)
		  ("P" mc/skip-to-previous-like-this)
		  ("M-p" mc/unmark-previous-like-this)
		  ("|" mc/vertical-align)
		  ("s" mc/mark-all-in-region-regexp :exit t)
		  ("0" mc/insert-numbers :exit t)
		  ("A" mc/insert-letters :exit t)
		  ("<mouse-1>" mc/add-cursor-on-click)
		  ;; Help with click recognition in this hydra
		  ("<down-mouse-1>" ignore)
		  ("<drag-mouse-1>" ignore)
		  ("q" nil)))

来自 Pavinberg 的 ” 专业 Emacs 入门(六):插件篇——功能增强类“

2 个赞