怎么才能固定光标不跟随屏幕移动?

在使用CUA模式+鼠标操作Emcas时发现一个不太人性化的现象

举个例子:

在浏览比较大的文档时,假如把当前光标停留在第1行,然后用鼠标滚轮去操作滚动条以至于能够浏览下面的文档,此时当前光标会跟随屏幕一起移动,而不是停留在第1行。

这一点和其他编辑器有很大不同,有没有办法使emacs能够像其他编辑器一样,让光标不要跟随页面滚动呢?

主要应用场景在于:

(1)点击第1行之后,往下滚,然后到第100行当地方按住shift再点击之后可以把整段文本选中。如果光标跟随屏幕移动,这个需求无法实现 (define-key global-map (kbd “”) 'mouse-save-then-kill)

(2)双击一个单词,该单词会高亮,然后滚到其他地方,如果光标跟随屏幕移动,该单词的高亮会消失,这极不方便。

多谢

emacs好像不支持这样,emacs的光标一定要出现在当前窗口可见区域

真的无法解决了吗?感觉这功能还挺重要的:cold_sweat:

这两个需求都不需要固定光标就能实现。

第一个功能,只要给 Shift 点击绑个键,第一次点击设个标记,第二次点击选中标记到点击位置,完全不需要依赖光标。

第二个功能,做高亮标记,只要选中之后设个 overlay 就行了,和代码高亮一样不受光标位置影响,你还可以同时选中多个区域,给不同区域加不同颜色。

(1)你说的设个标记是指 (global-set-key (kbd “C-.”) 'set-mark-command) 吗? 在第一次点击的位置C-.一下,然后shift选择,但只支持本屏幕或者键盘滚屏,一旦用鼠标滚轮来滚屏的话,就不行了

(2)请问设置overlay是那个命令呢?

因为固定光标会产生其他问题:在翻页的时候,如何让光标停留在翻页时候所在的行?

你认真思考一下。

楼主可能是平时用鼠标比较多,Emacs里选中区域是由point(一端)和mark(另一端)定义的,而不是普通编辑器里的高亮。你用鼠标拖拽选择的时候其实就是在起点设置一个mark,鼠标拖到哪那就是point。高亮只是看着方便,没有实际意义。建议你看一看有关mark和point在Emacs里的作用。Emacs-wiki应该有详细的介绍。

高亮的话我记得Emacs自带高亮的命令,highlight-symbol-at-point还是啥,可以查一查。

lz用的cua模式,这个对他不是问题,cua期待的是跟普通编辑器一样的行为,其实还是挺不一样,需要改一下使用习惯

emacs(好像还有vim)的光标跟普通编辑器不一样,这样才能跟它的主流操作方式匹配,需要适应一下。另外,emacs有命令可以记录当前光标位置,point-to-register,可以记录多个,跟书签差不多,还有对应命令可以返回记录的位置,可以试试

我都是用emacs evil(vim)模式里的C-o C-i

C-i不是会映射到Tab么,你怎么解决的?

spacemacs有个dotspacemacs-ditinguish-XXX的设置,会区分C-i 和tab,我用的是这个设置,你可以看看他的代码,也有其他原生的,你可以找找

1 个赞