怎么才能实现选中一行,但是光标不变

各位大佬,我想实现一个函数,能够快速的选中一行,但是光标不变。效果和 expand-region.el 一样。 下面是我的函数,选中一后光标都到末尾了:

(defun da/select-line () (interactive) (push-mark (point-at-bol))
       (end-of-line)
       (setq mark-active t))

光标必然改变,你只能选择光标在头还是在尾。

你选中一行后要做什么,中间可以不用停下来吧,比如我写了一个 exec sql的按钮 往下选中了一段sql,直接把它执行了,没必要分成二步。 选中后把要做的事情做了,光标就自由了,想放那里放那里

可以看一下 evil-mode 的实现。

可以换个思路,选中再操作后光标回到原来位置。

1 个赞

选中一行这个操作太简单了, 感觉是个伪需求, 之后要进行啥操作? C-M-@可以选择一块, 光标不变.

只是想先选中这一行,后续要执行什么操作,等我想好了在操作。

easy-kill 就是这个效果

1 个赞

最简单的方式是使用iedit

(defun da/select-line ()
  (interactive)
  (iedit-make-occurrence-overlay (line-beginning-position) (line-end-position)))
1 个赞

感谢大佬,我找了好久都没找到

还有一个方案是用emacs的第二选区功能,可以用secondary-selection-from-region或者按住Alt再用鼠标选择,第二选区全局只有一个,可以用secondary-selection-to-region把第二选区转化成普通region。