Swiper 下该怎么搜索空行?

搜索了一会儿,我明白了 C-M-s 下可以 C-q C-j 搜索空行。 但是我想用 Swiper/Swiper isearch 搜索空行,有人知道该怎么搜索的吗?我试了一下 C-q C-j 没用,\n 也不行,会搜索成 n。 我现在是用 ivy–regex-plus 补全风格的。

先谢谢了。

不知道有个东西叫正则?

%E5%9B%BE%E7%89%87

1 个赞

谢谢解答……我知道正则。\n不也是正则的一部分吗。

你这个方式只能搜索一个空行(其实本质上只是一个空行的一种workaround),搜索不了两个空行(不能复合搜索多个空行)……其实我的需求是搜索多行空行(比如说两个空行),不过我在首楼没说清楚我也有锅。

因为mini-buffer中文本输入适用不同而规则https://www.gnu.org/software/emacs/manual/html_mono/emacs.html#Inserting-Text

猜一下, 你要解决的问题, 定位空行的下一步, 只有删除和替换操作,

regex-replace是更好的选项.

非要定位空行用grep.

1 个赞

不你不知道,\n 是转义字符,意思是换行符。和正常的字符 abcd123 之类并无区别。

1 个赞

好吧,是我不熟悉elisp, 应该是^\s-*$,这就可以了

注:

In this case \s- is the syntax class (type C-h s to see your buffer’s syntax table) for whitespace characters. The * meta-character, in case you are not a regexp person, means zero or more of the preceding character.

From Removing blank lines in a buffer - Mastering Emacs


那同样用正则表达多行 ^\s*$,不过貌似swiper不支持转义符\s?得去看看swiper细节

2 个赞

在函数 swiper–candidates 中 会调用 swiper–line 函数

他好像是将一行作为了一个candidate

如果你想搜索两个连续的空白行 肯定是不可能的

除非你实现自己的 swiper–line 将多个连续的空白行看做是一个(有点难 也不是不可能)

1 个赞