写了个删除空行的函数

以前使用别的编辑器时,删除空行很容易,在emacs里面没有找到,索性自己写了一个。

    (defun xxx/delete-empty-line (beg end)
      "delete empty lines if selected, otherwise the whole buffer."
      (interactive "r")
      (let ((empty-line "^[\t  ]*$"))
        (save-excursion
          (if (region-active-p)
              (flush-lines empty-line beg end)
            (flush-lines empty-line (point-min) (point-max))))))

写的比较简陋,大家给提点意见. 注:[]中包含了TAB和中英文空格。 BTW: 为什么我用4个·还没有代码高亮呢?

3 个赞

不错,没什么问题。Emacs 默认有个 C-x C-odelete-blank-lines),但跟你的功能不同。region-active-p 常常用 use-region-p 代替,后者在前者的基础上排除了 Region 为空的情况。

需要写出 GitHub 风格的代码块才能高亮。但是我觉得 Elisp 高亮的效果太过了,直接把 ( 后的第一个位置都当作函数名,感觉太不专业了,所以我宁愿完全不用高亮。

缩进是不会高亮的,必须这样:

```elisp
;; comment
(+ 1 2)
```

效果:

;; comment
(+ 1 2)

还可加个 *,排除只读的情况

谢谢夸奖,马上改一下。

谢谢,重新编辑了一下,可以高亮了。

ok,看来还是没有考虑周全。

我一般这样删空行:

M-x flush-lines RET ^\s-*$ RET
1 个赞

谢谢,我之所以这样做,就是因为每次敲正则太麻烦了,不如绑定在一个按键上方便。

1 个赞

可以直接把这套操作变成一个函数,像这样:

(fset 'delete-empty-lines (kbd "M-x flush-lines RET ^\s-*$ RET"))
3 个赞

这个方法很赞!

谢谢。当然这种方法有两个缺点:

  • 效率低一点
  • 如果键绑定改了就不能用了