科研用户,平常就是用emacs写写C++、python、shell。有两个功能我个人觉得挺有用的,但是在Spacemacs里面没找到。。。可能是默认没有吗?
我开启的layer是Compleseus。
-
在一个Project里面,搜索某个东西,比如变量名,或者一个字符串,这个可以用 Spc s p
来搜索。例如输入dlopen,下面会出来所有的搜索结果。那么我可以在这里或者另外弹出一个窗口来修改所有的搜索结果并保存到各自所在的文件里面吗?我记得以前用的时候有个类似action的东西可以实现,最近找不到了(前段时间一直开会,没怎么用Spacemacs,就是保持更新而已)
-
还是在一个Project里面,我先搜索某些文件,比如CMakeLists.txt,那么会搜索出来这个项目里面所有的CMakeLists.txt文件,这个用 Spc p f
可以做到。那么现在我能够 以所有的搜索结果为范围,在这个范围里面继续搜索某个内容,比如 add_library,吗?
这两个功能似乎不复杂,应该也可以用elisp自己实现,奈何我elisp水平十分有限,如果Spacemacs有现成的,或者开启某个layer、在或者装上某个package就能实现,那就再好不过啦
我用的ivy:
搜索后在ivy列表中C-c C-o
就可以在新buffer中显示结果,然后批量编辑用ivy-wgrep-change-to-wgrep-mode
wgrep-finish-edit
wgrep-abort-changes
。这个在buffer里显示搜索结果的功能叫occur,在occur里编辑叫wgrep,所以只要记得这两个词,下次网上搜索 ivy occur 和 wgrep 就能找到了。
让ivy限定目录或者再加上参数给rg/ag来搜索,给搜索按键加上universal-argument就行了,按键是C-u
或者SPC u
之类。可以加一个或两个,行为不同。 这个其实翻开文档找到搜索功能那里应该就会告诉你可以按C-u加参数了,helm ivy spacemacs的文档我估计都有;或者直接网上搜spacemacs search with arg啥的
1 个赞
OK,谢谢,我以前用helm的时候,第一个功能是和你描述的用法差不多的,后来觉得helm太重了,就换成Compleseus了,我觉得可能这个新的layer里面还没实现这些功能?
哦哦,确实,原来 embark
的export是这么用的。。。
我之前试过,一直是显示 read-only,没想到要先 , w
的切到 wgrep
mode。
谢谢!
ivy-occur
和wgrep-mode
是我最常用的技巧,在我的教程和知乎专栏都强调过的。两者都可以进一步钻研。前者可以用Lisp定制occur. 后者可以读其代码。例如在wgrep-mode中可以按C-c C-d
或M-x wgrep-mark-deletion
标记当前行需要被删除。
第二个需求我也感觉很有用, 但怎么做大家有想法么?