又测试了一下,这两个都是在buffer内容比较多的时候才会发生,下面的gif分别录制于web-mode和emacs-lisp-mode,都是一百多行这样,而我新建了两个文件,在它们为空或者有二三十行内容的时候,不会有这两个问题。
company active时选择next在由第二行跳到第三行时变成了next-line
(注意左下角的已保存标志):
yas在保存后一个field的占位单词不会被覆盖(注意左下角的已保存标志):
我的防御方法就是上面说的
(when (and (not yas--active-snippets) (not company-candidates))
...)
我的意思, 你把下面代码的上下文都粘贴一下, 我看看能否写一个补丁, 让 auto-save.el 天生避免这种问题.
(when (and (not yas--active-snippets) (not company-candidates))
...)
谢谢
(run-with-idle-timer 1 t #'jester/save-all-buffers)
会有bug的代码:
(defun jester/save-all-buffers ()
"Save all buffers."
;; https://github.com/manateelazycat/lazycat-emacs/commit/da13a688ef89f8ab2c577a3e9d2a7bcf0ef9b71d
(with-temp-message
(with-current-buffer " *Minibuf-0*" (buffer-string))
(save-some-buffers t #'(lambda () (and (buffer-file-name) (buffer-modified-p))))))
修复后的代码:
(defun jester/save-all-buffers ()
"Save all buffers."
;; yas overlay and company-select-next has problem with this.
(when (and (not yas--active-snippets) (not company-candidates))
;; https://github.com/manateelazycat/lazycat-emacs/commit/da13a688ef89f8ab2c577a3e9d2a7bcf0ef9b71d
(with-temp-message
(with-current-buffer " *Minibuf-0*" (buffer-string))
(save-some-buffers t #'(lambda () (and (buffer-file-name) (buffer-modified-p)))))))
我推送了一个补丁: https://github.com/manateelazycat/auto-save/commit/99e2dcbe4cbc43ae46db7ceb1d07157148264b6f
可以帮我验证一下是否修正了你的问题了吗?
我的版本是针对每个 buffer 验证的, 如果当前 buffer 的 yas/company 激活的时候, 后台的 buffer 依然可以自动保存.
cireu
30
Reference:Emacs 中的 minibuffer 如何实现类似Google实时补全的效果? - #31,来自 cireu
可能这样好一点
(if auto-save-silent
(with-temp-message ""
(let ((inhibit-message t))
(basic-save-buffer)))
(basic-save-buffer))
eldoc
helm/ivy
Cc: @JJPandari
最近在用懒猫大神的auto-save,发现一个问题,就是在使用脚本语言pyhton的时候,每次自动保存,光标都会调到第一行起始位置
还是不行哦,我换成最新版本了,但是任然有问题:joy:
换成最新2月2日,更新的版本还是不行.
应该是你在 write-file-hook 里面加了 yapf 或 autopep8 之类的自动格式化工具, 因此每次保存都会格式化,导致光标跑了。去掉就好了,和 auto-save 无关。
3 个赞
请问一下使用auto-save进行自动保存的时候,即使开了silent模式,还是会在minibuffer中不断出现提示信息。有什么办法彻底让auto-save安静呢?
Omitting...
Omitted 2 lines.
Omitting...
已解决:这个跟自动保存没有关系,是dired-x的锅。
(setq dired-omit-verbose nil)
(setq auto-revert-verbose nil)
这样就不会提示了。
1 个赞
歪个楼,在任何编辑工具中都会关闭自动保存。感觉自己不按C-xC-s心里总是没底(我把系统的C-s也绑定了C-xC-s)。
能告诉我你们为什么这么喜欢自动保存么?我怎么get不到它的一点好处?靠自己手点不香么?手动保存完全不会打断思路,就是下意识的动作
用modeline
背景颜色提示当前文件状态(已保存或已修改),
;; {{ change mode-line color by evil state
(defconst my-default-color (cons (face-background 'mode-line)
(face-foreground 'mode-line)))
(defun my-show-evil-state ()
"Change mode line color to notify user evil current state."
(let* ((color (cond ((minibufferp) my-default-color)
((evil-insert-state-p) '("#e80000" . "#ffffff"))
((evil-emacs-state-p) '("#444488" . "#ffffff"))
((buffer-modified-p) '("#006fa0" . "#ffffff"))
(t my-default-color))))
(set-face-background 'mode-line (car color))
(set-face-foreground 'mode-line (cdr color))))
(add-hook 'post-command-hook #'my-show-evil-state)
;; }}
在追求极致编程速度的同时,也可以用工具解决人需要可视地确认文件状态的问题。
7 个赞
手动保存按的手累啊,用了自动保存以后,从来就没关心过保存的事情。写完直接关,写错直接undo。C-x,C-s的按键我都取消了。
这个你要亲自试试看,就能get到了。
1 个赞
wsug
42
不习惯自动保存,但C-x C-s确实很累,我也不用,我的是shift-s,后来发现在某些情况下,S按得太多,也有那么点累,然后我就针对某些情况单独处理,把保存的行为用输入空格事件来触发,虽然还是手动按保存,但没有再按累的情况
;;在每次输入空格时都触发保存按钮,先插入空格在保存,与正常输入空格不冲突
(defun my-insert-spc()
(interactive)
(progn
(insert-char 32)
(save-buffer)
))
3 个赞
还有这样玩的
如果按连续快速按几个空格会不会有卡顿啊?
我用自动保存的另外一个原因是Emacs和外部的编辑器同时编辑同一个文件的时候,我只要切换窗口马上就可以编辑。
wsug
45
连接按空格时没有卡顿,不过比起正常连续输入空格的操作是要慢那么一点