解压缩并删除emacs中的尾随空格

时间:2010-09-14 00:08:53

标签: emacs whitespace

我正在从事大型项目,其中有大约100名工程师在处理许多文件。我想看看我是否可以在emacs中添加自定义以删除尾随的空格并取消我正在编辑的行。在大文件中解除并删除与我的更改无关的空格并不是一个好主意。 (我同意,团队中的每个人都应该遵循一些基本规则。做什么,有时它不起作用。:()。

目前我已启用:

(show-ws-toggle-show-trailing-whitespace)
(show-ws-toggle-show-tabs)

这些选项出现问题,如果文件的所有者没有修复他的标签和尾随空格,它会使所有文件都为黄色或白色。

如果你能指出我的emacs选项会让我“删除我正在编辑的行上的空白和标签”(不是整个文件),那就太棒了。

5 个答案:

答案 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)))))))

将它绑定到你想要的任何键上。