yank 之后居然有个 mark 暗坑!

一开始以为是我扩展的功能,注释了几个还存在,脱掉配置才发现是原生功能。

yank 之后光标走过的地方会被隐性 mark,误按 C-w 就直接被 kill save。

这个功能是什么想法?没啥鸟用啊!还挺烦人的。

我重新绑定了 C-w, M-w 只有当某块区域选中的时候才会执行默认的一些操作(没有选中就执行我设置给它的一些操作)

我自己的配置

(global-set-key (kbd "C-w") '(lambda () (interactive)
                               (if (use-region-p)
                                   (kill-region (region-beginning) (region-end))
                                 (ove-ckm "c"))))
(global-set-key (kbd "M-w") '(lambda () (interactive)
                               (if (use-region-p)
                                   (kill-ring-save (region-beginning) (region-end))
                                 (ove-ckm "m"))))

你可以这样子试试

(global-set-key (kbd "C-w") '(lambda () (interactive)
                               (and (use-region-p)
                                      (kill-region (region-beginning) (region-end)))))
(global-set-key (kbd "M-w") '(lambda () (interactive)
                               (and (use-region-p)
                                      (kill-ring-save (region-beginning) (region-end)))))

有用啊,正好可以调用indent-region,经常用,当然,可以设置yank后自动indent,不过我习惯了这样手动

Elisp里我用aggressive-indent,其他语言靠保存时自动排版

我已经遇到N次cc-mode出现indent错乱的情况了,就在编辑过程中突然出现,只能重新打开文件才好。所以不太相信emacs的自动缩进,担心它不知不觉把你看不到的地方都缩进错了,半天才发现,所以不得不保守一点。

Emacs不应该在看不见的地方缩进啊,你开启了什么功能?我一般就开一个基本的electric-indent-mode

不确定你的困惑是什么。

Emacs 的 Region 指 Point 和 Mark 间的区域,不全等同于其它程序「选中」的概念。不少命令会设置 Mark,比如 M-> (end-of-buffer),这么做是为了让用户能返回上次光标所在的位置(C-u C-SPC),不过由于 Mark 不可见,用户(至少我是这样的)常常不清楚 Mark 在哪儿。

别人可是光明正大的mark…

不够直觉是没的洗的,正常人不会想到用个复制粘贴都要先把操作手册读完。

我也是只开了electric-indent-mode, 出问题的时候按C-cC-s(c-show-syntactic-information), 指示的位置已经不对了, 这种状态下会发生什么很难预料. 文件重新打开后恢复正常.

在emacs 25以及以前出现频率特别高, emacs 26之后频率低了很多, cc-mode好像升级了.

以前emacs是轻中度使用, 遇到bug的几率很低, 这几年是重度使用, 遇到了挺多bug.

我觉得没毛病,一般人也不会在没有选中的时候剪切吧。

还是emacs作为传统键盘操作程序,和大部分人的鼠标思维冲突的问题。

问题并不在于yank之后留了mark,而是在没有激活mark的时候C-w出乎意料地剪切了。

楼主可以看一下 region bindings mode. 只在激活mark的情况下绑定C-w, 平常还多了一个快捷键 :dog:

激活region ?