我想添加一個before-save-hook,我可以爲自上次保存後更改過的行執行一些操作。例如,刪除尾隨空白,檢查縮進等。我不想爲整個文件做這件事,我知道每個這些都有單獨的選項(只是爲所有更改的行刪除尾隨空白,等等),但我想要一些通用的東西,以便我可以添加更多的東西。我想有些東西可以讓我更改行號列表,或者獲取第一個更改行(),get-next-changed-line()類型的函數。如何在保存之前對Emacs中更改的行執行操作?
回答
使用高亮的變化模式機械
你可以使用highlight-changes-mode
,然後遍歷通過它使用next-single-property-change
設置text屬性hilit-chg
。
例如,
(with-current-buffer "my-buffer-name"
(let ((beg (point-min)) end)
(while (setq end (next-single-property-change beg 'hilit-chg))
(setq beg (next-single-property-change end 'hilit-chg))
(message "[[%s]]" (buffer-substring-no-properties end beg)))))
將產生以下:
[[
these are my changes
]]
[[ and here]]
[[
here are more changes
]]
在*Messages*
緩衝液(和在回聲區域)。
全面推行例如
ws-butler使用這個機制在EOL上保存修改 線修剪空間。
我正在玩高亮度變化模式,但無法弄清楚如何迭代文本屬性。你能再解釋一下嗎? (對不起,這真的是我第一次嘗試elisp :) –
@VijayKotari:使用屬性爲'hilit-chg'的函數'next-single-property-change'。 – sds
巧合的是,這是我實施更好的(IMO)ws-trim模式 - ws-butler的方式。 –
- 1. 如何在執行操作之前確保對象存在
- 2. 保存前執行操作(`on_pre_save`)
- 3. 在symfony2中執行操作之前
- 4. 在聚合函數之前對ActiveRecord對象執行行操作
- 5. 在任何document.location更改之前保證Javascript AJAX的執行
- 6. Angularfire:如何在更新模板之前對數據執行一些操作
- 7. 如何在WPF中執行操作之前放置延遲
- 8. 如何在UISearchDisplayDelegate中執行操作之前設置延遲?
- 9. Rails 3.如何對所有記錄執行保存操作?
- 10. 如何在任何@ synthesize'd訪問器之前執行操作?
- 11. 無法在Process.Runtime.exec語句行之前執行任何操作
- 12. 如何讓表單中的提交按鈕在執行表單操作之前執行某些操作
- 13. 如何在prepareForSegue之前執行觸摸操作
- 14. 如何在遵循<Href>之前執行Knockout.js操作?
- 15. 如何在grunt.initConfig()之前執行異步操作?
- 16. 如何在繼續執行之前'刷新'UI線程操作
- 17. 如何在對模型執行操作之前對相關模型執行復雜的驗證檢查?
- 18. 在前端顯示之前對綁定數據列中的列執行操作
- 19. 如何確保在繼續執行之前完成異步操作
- 20. 如何在執行某些操作之前確保其他線程已完成
- 21. Spark:如何在未執行之前保存RDD
- 22. Laravel - 在執行其他任何操作之前執行的控制器
- 23. 更改標籤之前執行任務
- 24. 執行其他操作之前的WPF更新UI
- 25. 保存時自動執行此操作
- 26. 在Spark Streaming中的微批次結束之前執行操作
- 27. 在Visual Studio中的所有WebTest之前執行操作
- 28. 如何在執行appendData操作後從NSData保存圖像?
- 29. 如何對JOptionPane.showMessageDialog的OK執行操作
- 30. 執行前綴操作符++
也許你可以以某種方式使用'ediff-mode'。 – PascalVKooten
你指的是哪個操作特定的軟件包?你也許可以重新使用部分實現。例如'ws-trim.el'依靠一個後命令鉤子去除已更改行上的空白。在任何情況下,如果您的操作不是計算量大並且可以逐行應用,我認爲在每行修改後運行它比在保存前鉤子的整個緩衝區更容易。 – Francesco