不习惯自动保存,但C-x C-s确实很累,我也不用,我的是shift-s,后来发现在某些情况下,S按得太多,也有那么点累,然后我就针对某些情况单独处理,把保存的行为用输入空格事件来触发,虽然还是手动按保存,但没有再按累的情况
;;在每次输入空格时都触发保存按钮,先插入空格在保存,与正常输入空格不冲突
(defun my-insert-spc()
(interactive)
(progn
(insert-char 32)
(save-buffer)
))
不习惯自动保存,但C-x C-s确实很累,我也不用,我的是shift-s,后来发现在某些情况下,S按得太多,也有那么点累,然后我就针对某些情况单独处理,把保存的行为用输入空格事件来触发,虽然还是手动按保存,但没有再按累的情况
;;在每次输入空格时都触发保存按钮,先插入空格在保存,与正常输入空格不冲突
(defun my-insert-spc()
(interactive)
(progn
(insert-char 32)
(save-buffer)
))
还有这样玩的
如果按连续快速按几个空格会不会有卡顿啊?
我用自动保存的另外一个原因是Emacs和外部的编辑器同时编辑同一个文件的时候,我只要切换窗口马上就可以编辑。
好点子。
我的办法是窗口失去焦点就保存。用起来也挺舒服。
连接按空格时没有卡顿,不过比起正常连续输入空格的操作是要慢那么一点
如果使用evil的话,也可以在其他state回到normal state时自动保存
请问下通过auto-save.el 开了自动删除尾行空格后,为什么在org-capture mode 会自动删除星号后面的空格,但是在org-mode 却不会? 如下图中,在NEXT后面打一个空格,很快就会被删掉。
自动保存不能和保存时删除空格、保存时自动缩进这种一起开吧?不然写到一半顿了一下就被删掉了空格/改了缩进,不是很抓狂
auto-save.el 可以做到不删除当前行的空格,不影响indent。但是在org-capture-mode 不知道什么不行。
我也有这个问题。我的解决方法是在这个buffer时,把auto-save禁用了。反正你需要用C-c C-c完成。
为啥不用默认自动保存?没有任何这种问题⋯⋯
现在用 super-save + ws-butler,super-save
开启 1 s 空闲自动保存。
解决了一些以前遇到的问题:
markdown-mode
启动清除尾行空格undo-tree
org-capture
我目前的解决方案是
(add-hook 'org-capture-prepare-finalize-hook 'auto-save-disable)
(add-hook 'org-capture-after-finalize-hook 'auto-save-enable)
(advice-add
'auto-save-delete-trailing-whitespace-except-current-line
:around
(lambda (fn) (interactive) (unless (org-capture-mode) fn)))
(setq auto-save-disable-predicates
'((lambda () (string-suffix-p
"gpg" (file-name-extension (buffer-name)) t))
;; FIXME 2022-01-15: not working below:
;; (lambda () (string-match-p
;; (regexp-quote "CAPTURE-") (buffer-name)))
))
目前我用 super-save 没这个问题,体验和 auto-save 差不多。设置 1秒保存。
前段时间一直在用你提到的 super-save + ws-butler 方案, 但它只保存当前 buffer,以及 (setq super-save-exclude '(".gpg"))
不起作用,还没排查出什么原因,暂时回到auto-save了。
我这边 (setq super-save-exclude '(".gpg"))
正常。
本来想用回 auto-save 的,结果我关闭了自动删除尾行空格,在 org-capture 时还是会自动删空格。实在没办法,就放弃了 。
(setq auto-save-delete-trailing-whitespace nil)
请问下你用什么命令会编辑非当前buffer?
org-agenda-mode 下切换 TODO 状态时,相关 buffer 就变成了编辑状态,要手动切过去,才会保存。
我前边提到的第一/二个方案对我有用,你试试看有没有用。不过你目前方案用习惯了也没必要切回来了。
多谢分享,目前暂时没遇到这种情况。agenda 用的也少了 ,以后遇到问题再考虑
我是通过在 insert 转回 normal 模式时设置 hook ,进行自动保存。
;;; Hook
(add-hook 'sniem-insert-to-normal-hook
(lambda ()
(run-with-timer
6 nil (lambda ()
(when (and (buffer-modified-p)
sniem-normal-mode)
(save-buffer))))))
用 timer 判断,若 6s 后依然是 normal 模式,就保存。避免打断补全和编辑。
你这个timer在什么时候会cancel呢?
这个是我今天才写的,一小时发现了些问题,对其有了些优化。
;;; Hook
(defvar spring/sniem-auto-save-blacklist '("COMMIT_EDITMSG")
"The blacklist of buffers to auto save.")
(add-hook 'sniem-insert-to-normal-hook
(lambda ()
(run-with-timer
6 nil
(lambda (current-buf)
(when (get-buffer current-buf)
(with-current-buffer current-buf
(when (and (not (derived-mode-p 'special-mode))
(not (memq current-buf
spring/sniem-auto-save-blacklist))
(buffer-modified-p)
sniem-normal-mode)
(save-buffer)))))
(buffer-name))))
这个 timer 没有设置 repeat