将函数添加到<;输入>;在emacs中

将函数添加到<;输入>;在emacs中,emacs,Emacs,我想用enter键添加(删除尾随空格) 我找不到给予的东西,因此我无法将它绑定到我的新函数 我怎样才能做到这一点 键必须绑定到命令,因此首先定义一个执行所需操作的命令: (defun delete-trailing-whitespace-newline () (interactive) (delete-trailing-whitespace) (newline)) defun需要一个顶层的交互式表单作为命令。然后将密钥绑定到命令: (global-set-key (kbd "RET

我想用enter键添加(删除尾随空格)

我找不到给予的东西,因此我无法将它绑定到我的新函数


我怎样才能做到这一点

键必须绑定到命令,因此首先定义一个执行所需操作的命令:

(defun delete-trailing-whitespace-newline ()
  (interactive)
  (delete-trailing-whitespace)
  (newline))
defun需要一个顶层的交互式表单作为命令。然后将密钥绑定到命令:

(global-set-key (kbd "RET") 'delete-trailing-whitespace-newline)

就我个人而言,我不建议将其绑定到enter键,因为这可能会经常发生,而且可能会很慢,相反,我使用

(add-hook 'before-save-hook 'delete-trailing-whitespace)
这只是在保存文件时删除所有尾随空格,而不是每次点击一个键


如果您仍要绑定它,请查看@ataylor的答案。

查看此答案及其注释:

我使用
ws-trim
自动删除我编辑的行中的尾随空格(这是一个更强大的解决方案,我相信您希望通过enter键绑定实现这一点)


event_jr还提到了
ws-butler
,它做了类似的事情,但在保存时只删除尾随的空格(仍然只从您编辑的行中删除)。

只从您正在按RET的行中删除空格怎么样


这不是一个很好的答案,但这正是你想要的。

希望我能+2这个。这是一个可怕的想法。当版本控制(尤其是多个开发人员)进入画面时,从文件中删除所有尾随空白很容易导致问题。如果在保存文件时,Emacs没有对您未编辑的行进行更改,则您的提交将更加干净。@phils如果没有任何多余的空格和制表符,则会更加干净。当然,这是另一个问题。如果其他开发人员现在正在将尾随空格放入文件中,他们将在以后继续这样做,即使您正在定期删除它。不幸的是,你不能通过编辑自己的.emacs来改变他们的习惯。@phils这是真的,尽管OP调用了删除尾随空格,但无论如何,这个解决方案只是分摊了成本。这可能是他的意思,看起来他选择了蛮力方法。是的,这正是我的想法,但我选择了一枚核导弹来杀死我房间里的蚊子:)
(defun delete-whitespace-on-this-line-then-newline ()
  "before doing a newline, remove any trailing whitespace on this line"
  (interactive)
  (save-match-data
    (save-excursion
      (beginning-of-line)
      (when (re-search-forward "\\s-+$" (line-end-position) t)
        (replace-match ""))))
  (newline))