我正在从事大型项目,其中有大约100名工程师在处理许多文件。我想看看我是否可以在emacs中添加自定义以删除尾随的空格并取消我正在编辑的行。在大文件中解除并删除与我的更改无关的空格并不是一个好主意。 (我同意,团队中的每个人都应该遵循一些基本规则。做什么,有时它不起作用。:()。
目前我已启用:
(show-ws-toggle-show-trailing-whitespace)
(show-ws-toggle-show-tabs)
这些选项出现问题,如果文件的所有者没有修复他的标签和尾随空格,它会使所有文件都为黄色或白色。
如果你能指出我的emacs选项会让我“删除我正在编辑的行上的空白和标签”(不是整个文件),那就太棒了。
答案 0 :(得分:15)
这不是你问题的答案。但我怀疑你有兴趣了解它:
http://github.com/glasserc/ethan-wspace
它会在您打开文件时跟踪文件是否“干净”(没有尾随空格和标签),并且当您保存文件时将自动删除它们当且仅当您启动时它是干净的。这意味着如果文件开始干净,它将保持文件清洁,并且将保留任何脏的文件(即其他人不遵守规则)。
答案 1 :(得分:8)
来自我古老的.emacs
文件:
(defun clean-whitespace-region (start end)
"Untabifies, removes trailing whitespace, and re-indents the region"
(interactive "r")
(save-excursion
(untabify start end)
(c-indent-region start end)
(replace-regexp "[ ]+$" "" nil start end))) ;// uses literal space and tab chars
选择或标记区域后调用M-x clean-whitespace-region
。
untabify
会根据您当前的tab-width
设置替换带有空格的标签。然后我使用c-indent-region
来获取具有奇怪tab-with
值的文件(8,4,3和2看起来很常见)。
要在整个缓冲区中remove trailing whitespace in emacs 21+ ,请使用delete-trailing-whitespace
,否则regexp-replace
的工作方式如上所述。
答案 2 :(得分:5)
自从我开始使用Emacs以来,我一直使用ws-trim.el包。它就像一个魅力;配置并忘记它。
;;;; ************************************************************************
;;;; *** strip trailing whitespace on write
;;;; ************************************************************************
;;;; ------------------------------------------------------------------------
;;;; --- ws-trim.el - [1.3] ftp://ftp.lysator.liu.se/pub/emacs/ws-trim.el
;;;; ------------------------------------------------------------------------
(require 'ws-trim)
(global-ws-trim-mode t)
(set-default 'ws-trim-level 2)
(setq ws-trim-global-modes '(guess (not message-mode eshell-mode)))
(add-hook 'ws-trim-method-hook 'joc-no-tabs-in-java-hook)
(defun joc-no-tabs-in-java-hook ()
"WS-TRIM Hook to strip all tabs in Java mode only"
(interactive)
(if (string= major-mode "jde-mode")
(ws-trim-tabs)))
答案 3 :(得分:2)
我用它来删除整个文档中的尾随空格。我几年前写的......
;;
;; RM-Trailing-Spaces
;;
(defun rm-trailing-spaces ()
"Remove spaces at ends of all lines"
(interactive)
(save-excursion
(let ((current (point)))
(goto-char 0)
(while (re-search-forward "[ \t]+$" nil t)
(replace-match "" nil nil))
(goto-char current))))
答案 4 :(得分:1)
如果要删除当前行上的尾随空格,请使用以下命令:
(defun delete-trailing-whitespace-of-current-line ()
"Delete all the trailing whitespace on the current line.
All whitespace after the last non-whitespace character in a line is deleted.
This respects narrowing, created by \\[narrow-to-region] and friends."
(interactive "*")
(save-match-data
(save-excursion
(move-to-column 0)
(if (re-search-forward "\\s-$" nil t)
(progn
(skip-syntax-backward "-" (save-excursion (forward-line 0) (point)))
(delete-region (point) (match-end 0)))))))
将它绑定到你想要的任何键上。