具体使用的是 spacemacs counsel-ag.
用 \^abcde
可以搜索出 ^abcde
之类的。
但 \$abcde
就不行了。一直不知道怎么办。有一天忽然发现\$\abcde
可以搜出来 $abdce
但是又发现 \$/
可以搜出 $/
有谁能解释一下吗?
具体使用的是 spacemacs counsel-ag.
用 \^abcde
可以搜索出 ^abcde
之类的。
但 \$abcde
就不行了。一直不知道怎么办。有一天忽然发现\$\abcde
可以搜出来 $abdce
但是又发现 \$/
可以搜出 $/
有谁能解释一下吗?
ag 接受正则表达式(regex expression)
正则表达式中 ^ 表示行首,$ 表示行尾的,要搜索 $ 就要加转义符号 \
抱歉没看清问题,请忽视这个回答
但是 \^
起作用, \$
没起作用啊。 \$\
才有用。
\$
可以:
~ $ echo '$abc' | ag '\$abc'
$abc
注意在 Shell 中运行使用时,Shell 可能会展开 $VAR
,比如上面用双引号就不行了:
~ $ echo '$abc' | ag "\$abc"
这里不行因为 \
被 Shell 消耗了,ag
实际搜索的是 $ab
(用 --debug
参数能看到搜索的是什么),这时用 "\\\$ab"
应该可以。
我没用过 counsel-ag,不清楚什么状况。如果写在 Emacs Lisp 的 String 中的话,可能还得再考虑一层 Escape。
这是用 spacemacs develop 分支的 counsel-ag。我刚刚试了一下,用 helm-ag,像 @xuchunyang 在 shell 中使用 \\\$
,或者像 @twlz0ne 一样,在 scratch buffer 解析 “\$”,都是可行的,甚至 minibuffer 调用 counsel-ag 都是可行的。
仔细一看才发现快捷键调用的是 spacemacs/counsel-search.
这应该是 spacemacs 的问题。谢谢各位。