具体使用的是 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 的问题。谢谢各位。