5

我正在尝试使 kill ring 基本上忽略仅空白条目(制表符、换行符、仅空格等),我对 elisp 相当陌生,我很确定要做的方法是做 defadvice 但我有一个几个问题。

  • 首先阻止空白条目进入杀戮环,还是在猛拉时跳过它们会更好?我假设后者。

在这种情况下,我完全不知道应该建议哪个函数,它在 current-kill、yank 和 insert-for-yank 之间——但我不完全确定我应该操纵哪个函数来不从 kill ring 中拉出空格。

谢谢!

编辑:我很确定这样做的方法是操纵“current-kill”以继续调用自己,直到它到达一个非空白条目?(或环结束,以先到者为准)

4

3 回答 3

4

从评论看来,由于您杀死了空白行,因此您的杀伤环中的空白存在问题。我的解决方案是避免删除空白行并改用函数delete-blank-line( C-x C-o)。这会将一组空行(包括空格和制表符)减少为单个空行。

于 2012-08-24T12:30:50.780 回答
2

我编写了一个包clean-kill-ring.el,它提供了控制 kill ring 中允许的内容的功能。

默认情况下,启用clean-kill-ring-mode会阻止空白字符串进入 kill ring,但也可以进行进一步的自定义。

于 2022-02-23T16:22:07.650 回答
0

以下建议首先不允许将空格添加到 kill ring 中:

(defun night/h-kill-skip-whitespace (orig-fn string &optional rest)
  (let* (
         (string-raw (substring-no-properties string))
         (space-p (not (string-match-p "[^ \t\n\r]" string-raw))))

    (cond
     ((not space-p)
      (apply orig-fn string rest))
     (t
      (message "skipped whitespace kill")
     ))))

(advice-add 'kill-new :around #'night/h-kill-skip-whitespace)
于 2021-09-23T21:34:49.763 回答