在emacs中“触摸”当前文件

时间:2012-01-24 15:36:39

标签: emacs

我是emacs,我想对当前缓冲区引用的文件运行“触摸”(特别是想要更改修改时间)。我使用guard在文件更改后运行一些测试,但有时我想手动调用它。只要设置了mtime,我就不关心运行实际的shell实用程序触摸。

5 个答案:

答案 0 :(得分:8)

当然,这假设您的路径上有一个名为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))

在直接模式下,默认情况下会将触摸命令绑定到T。该命令不是那么容易使用,因为它会提示用户输入时间戳。我认为这是非常普遍的,但这并不是一种非常方便的方式来做“触摸”通常所要求的。

答案 1 :(得分:6)

可能比自定义函数更多的击键,但您可以使用C-u M-~然后C-x C-s开箱即用。

M-~默认绑定到not-modified,它会清除缓冲区的修改标志,除非您使用参数(C-u前缀)调用它,在这种情况下它会相反。然后只需保存缓冲区。

答案 2 :(得分:5)

这是一种纯粹的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))))

答案 3 :(得分:3)

我是这样做的:插入一个空格,然后我再次删除空格并保存。这改变了mtime。

答案 4 :(得分:1)

8 年后,melpa 中有用的“f”库提供了 f-touch。

见:https://github.com/rejeep/f.el