Im emacs,我想在当前缓冲区引用的文件上运行“touch”(特别是要更改修改时间)。我使用guard在文件更改后运行一些测试,但有时我想手动调用它。只要设置了mtime,我并不在意运行实际的shell实用程序触摸。在emacs中“触摸”当前文件
回答
当然,这里假定您的路径上有一个名为touch
的命令。
(defun touch()
"updates mtime on the file for the current buffer"
(interactive)
(shell-command (concat "touch " (shell-quote-argument (buffer-file-name))))
(clear-visited-file-modtime))
在dired模式有默认绑定到T
触摸命令。该命令不太容易使用,因为它会提示用户输入时间戳。我认为这是非常普遍的,但这不是一种非常方便的方式来完成通常通过“触摸”来实现的目的。
我这样做:插入空格,结束然后我再次删除空间并保存。这改变了mtime。
是的,这就是我正在做的,但必须有一个Emacs的方式 – spike
是的,这几乎是我所做的,但我写了一个lisp函数,可以帮助你(请参阅我对这个问题的回答)。 –
这是一个纯粹的emacs的方式来做到这一点:
(defun touch-file()
"Force modification of current file, unless already modified."
(interactive)
(if (and (verify-visited-file-modtime (current-buffer))
(not (buffer-modified-p)))
(progn
(set-buffer-modified-p t)
(save-buffer 0))))
我喜欢不需要调用shell的“纯”elisp解决方案,但是这种方法只是改变时间戳,或者写整个缓冲区到文件?即使是直接模式的触摸命令也会调用外壳来调用触摸命令。我们真正需要的是一个elisp函数,它从Emacs进程中调用C中的utime()。 –
@GregMattes - 它基本上等同于“修改”缓冲区,然后保存它(不实际更改缓冲区内容)。 – jtahlborn
是的,确切地说。如果由于整个内容正在被保存而触及很多文件,那么这可能会导致很多I/O。例如,提问者有兴趣触摸文件来强制测试。我可以想象他可能会编写一些elisp来自动触摸一组文件,可能是一大组文件。因此,编写整个文件而不是在inode中更改mtime可能非常重要。我并不是说你的方法是错误的。实际上,在不调用外部shell命令的情况下,将它全部放在独立于平台的elisp上真的很好。 –
- 1. 在触摸中获取当前触摸移动
- 2. 取消当前UIScrollView触摸
- 3. 当前触摸位置
- 4. 允许触摸表格单元取消其他当前触摸
- 5. 当我触摸TextView时触摸按钮
- 6. 如何在C#中触摸文件?
- 7. 如何引用当前在Emacs Lisp中加载的文件?
- 8. 在Emacs中如何从当前行删除到文件结尾?
- 9. 当我触摸UIVIew
- 10. 在UIView中触摸事件
- 11. 在AppDelegate中触摸事件
- 12. 触摸板横向滚动emacs
- 13. 可可触摸 - 在UIImageView中触摸
- 14. 即使当我触摸ccMenuItem,即使当我触摸一个ccMenuItem
- 15. 在试剂中触摸左侧/触摸右侧事件
- 16. 在触摸移动过程中停止触摸事件
- 17. 从触摸屏在Chrome中触摸事件
- 18. 向前触摸到UIPageViewController
- 19. AngularJS事件触摸相当于mouseover
- 20. 重命名当前缓冲区和Emacs中的相关文件
- 21. Emacs/AUCTeX:在当前未打开的文件上运行命令
- 22. 事件触摸屏轻轻触摸
- 23. 监控可可触摸(iPhone)中的当前dB水平
- 24. 获取当前触摸位置随时在cocos2d为iPhone
- 25. 在当前触摸位置添加一个指示器?
- 26. 触摸文件集在将来
- 27. 触摸事件
- 28. 触摸事件
- 29. 在Emacs中,如何在当前文件中的函数之间跳转?
- 30. 触摸UIButton触摸
这不是该问题的重复。我不希望保存文件,我只想更新文件的时间(因此需要触摸,而不是@jtahlborn的纯emacs解决方案) – spike
我希望人们不要在没有仔细阅读的情况下关闭问题。这实际上是一个很好的问题。 – Nemo