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