diff --git a/.projections.json b/.projections.json index 3fe1073c2..2a8ef683b 100644 --- a/.projections.json +++ b/.projections.json @@ -16,5 +16,7 @@ "docs/_posts/2018-09-27-use-vim-as-a-python-ide.md": {"alternate": "docs/_posts/2018-09-28-use-vim-as-a-python-ide.md"}, "docs/_posts/2018-09-28-use-vim-as-a-python-ide.md": {"alternate": "docs/_posts/2018-09-27-use-vim-as-a-python-ide.md"}, "docs/_posts/2018-09-27-use-vim-as-ide.md": {"alternate": "docs/_posts/2018-09-28-use-vim-as-ide.md"}, + "docs/_posts/2018-01-23-grep-on-the-fly-in-spacevim.md": {"alternate": "docs/_posts/2018-01-31-grep-on-the-fly-in-spacevim.md"}, + "docs/_posts/2018-01-31-grep-on-the-fly-in-spacevim.md": {"alternate": "docs/_posts/2018-01-23-grep-on-the-fly-in-spacevim.md"}, "docs/_posts/2018-09-28-use-vim-as-ide.md": {"alternate": "docs/_posts/2018-09-27-use-vim-as-ide.md"} } diff --git a/docs/_posts/2018-01-23-grep-on-the-fly-in-spacevim.md b/docs/_posts/2018-01-23-grep-on-the-fly-in-spacevim.md index 6971668e9..51424bc8f 100644 --- a/docs/_posts/2018-01-23-grep-on-the-fly-in-spacevim.md +++ b/docs/_posts/2018-01-23-grep-on-the-fly-in-spacevim.md @@ -7,7 +7,9 @@ commentsID: "Grep on the fly" comments: true --- -# Asynchronous grep on the fly +# [Blogs](../blog/) >> Asynchronous grep on the fly + +{{ page.date | date_to_string }} FlyGrep means **grep on the fly**, it will update the result as you type. Of course, it is running asynchronously. Before using this feature, you need to install a searching tool. FlyGrep works diff --git a/docs/_posts/2018-01-31-grep-on-the-fly-in-spacevim.md b/docs/_posts/2018-01-31-grep-on-the-fly-in-spacevim.md index d8c13f309..414834d28 100644 --- a/docs/_posts/2018-01-31-grep-on-the-fly-in-spacevim.md +++ b/docs/_posts/2018-01-31-grep-on-the-fly-in-spacevim.md @@ -9,51 +9,104 @@ permalink: /cn/:title/ lang: cn --- -# Vim 异步实时代码检索 +# [Blogs](../blog/) >> Vim 异步实时代码检索 {{ page.date | date_to_string }} -SpaceVim 中代码检索采用的是 FlyGrep 这个插件,包括了常用的全工程代码检索,局部文件夹代码检索等特性。搜索结果实时展示。 -这个插件是 SpaceVim 的内置插件,当然也已分离出一个备份仓库供给非 SpaceVim 用户使用。 +FlyGrep 指的是 **grep on the fly**,将根据用户输入实时展示搜索结果。当然,这些搜索命令都是异步执行的。 +在使用这一功能之前,需要安装一个命令行搜索工具。目前 FlyGrep 支持的工具包括:`ag`、`rg`、`ack`、`pt` 和 `grep`, +选择你喜欢的工具安装即可。 - +这是一个 SpaceVim 内置插件,当然也自动剥离出一个独立的插件供非 SpaceVim 用户使用:[FlyGrep.vim](https://github.com/wsdjeg/FlyGrep.vim) + +### 安装 + +在 Linux 系统下,flygrep 默认使用 grep,如果需要使用更快的工具,可以安装以下某一个工具: + +- [ripgrep(rg)](https://github.com/BurntSushi/ripgrep) +- [the_silver_searcher(ag)](https://github.com/ggreer/the_silver_searcher) +- [the_platinum_searcher(pt)](https://github.com/monochromegane/the_platinum_searcher) + +### 功能特性 + +- 全工程实时检索 + +在 SpaceVim 中,可以使用快捷键 `SPC s p` 或者 `SPC s /` 进行全工程检索。 ![searching project](https://user-images.githubusercontent.com/13142418/35278709-7856ed62-0010-11e8-8b1e-e6cc6374b0dc.gif) -## 安装搜索工具 +- 仅搜索当前文件 -FlyGrep 异步调用搜索工具,搜索并展示结果,目前支持的搜索工具包括:`rg`, `ag`, `pt`, `grep`, `findstr`, `ack`。 -以上这些工具在 Linux 系统下默认包含了 `grep`,Windows 系统下默认包含了 `findstr`。其他工具安装方式如下: +同时,可以使用快捷键 `SPC s s` 仅搜索当前文件中的内容,如果需要在当前文件中搜索光标下的词,可以使用快捷键 `SPC s S`。 -### Windows +![searching current file](https://user-images.githubusercontent.com/13142418/35278847-e0032796-0010-11e8-911b-2ee8fd81aed2.gif) -在 Windows 下,可以直接下载解压,可执行文件所在目录加入 `PATH` 即可。 +- 在所有已经载入的文件中搜索 -- rg: [ripgrep releases](https://github.com/BurntSushi/ripgrep/releases) -- ag: [the_silver_searcher-win32](https://github.com/k-takata/the_silver_searcher-win32/releases) +如果需要在所有已经打开的文件中搜索,可以使用快捷键 `SPC s b`,如果需要在所有已打开的文件中搜索光标下的词语, +则可以使用快捷键 `SPC s B`。 -## 特性 +![searching-loaded-buffer](https://user-images.githubusercontent.com/13142418/35278996-518b8a34-0011-11e8-9a7a-613668398ee2.gif) -- 实时检索全工程文件 -- 实时检索全工程文件,指定初始输入伺,适合搜光标单词或选择的词语 -- 实时检索已载入文件,这不同于全工程搜索,只搜索vim中已打开的文件,能更准确定位 -- 同上,支持指定输入词来检索已载入文件 -- 指定检索目录,适合跨工程检索或检索子目录,也可用于同时检索多个工程 -- 支持正则表达式输入 -- 支持中文检索 -- 输入框采用的是终端那一套快捷键,bash 用户应该非常喜欢这样快捷键,可以快速编辑单行输入内容。 -- 鼠标支持,用 Vim 其实也有鼠标党,在这个插件里面,可以用鼠标滚轮上下移动选择行,也可以用鼠标双击打开匹配位置,单击移动匹配位置 -以上这些功能已经在 SpaceVim 中实现了,文中的连接是一波演示效果图。 +- 搜索指定的文件夹 -**补充:** +如果需要指定一个文件夹来搜索,可以使用快捷键 `SPC s f`,然后输入需要搜索的文件夹即可。同理, +如果需要在指定文件夹下搜索光标下的词语,可以使用快捷键 `SPC s F`。 -首先是增加了 filter 模式,也就是当我们搜索一个关键词,出现了很多结果,而我们需要的结果排在很后,以至于下拉很久看不到,这时候你可以启用 filter 模式,filter 模式其实类似于 flygrep,但是,他是对前一次的结果进行筛选。默认快捷键是 flygrep 模式下按下 ctrl+f +- 全工程后台检索 -## 计划中的特性 +首先,需要启用 incsearch 模块: -一个比较实用的 todo,提供一个快捷键,将搜索结果转变为 quickfix 列表,这有助于对这些搜索结果进行后期处理。 -另外一个 TODO 是全工程替换,或局部替换,大致思路是由flygrep 删选结果,由 Iedit 多光标编辑,再应用至文件. +```toml +[[layers]] + name = 'incsearch' +``` -后期还有那些特性会去实现呢?首先当然是neovim的悬浮窗特性,在我前面的文章里面已经展示过悬浮窗的特性,那只是一个粗略的效果图, 具体细节当然还需要时间去实现。 +全工程后台检索,可以使用快捷键 `SPC s j`,搜索结束后,数量会展示在状态栏上。可以使用 `SPC s l` 打开搜索列表。 -关于代码检索,大家还有什么建议吗?欢迎留言. +### 快捷键 + +SpaceVim 中的搜索命令以 `SPC s` 为前缀,前一个键是使用的工具,后一个键是范围。 +例如 `SPC s a b`将使用 `ag`在当前所有已经打开的缓冲区中进行搜索。 + +如果最后一个键(决定范围)是大写字母,那么就会对当前光标下的单词进行搜索。 +举个例子 `SPC s a B` 将会搜索当前光标下的单词。 + +如果工具键被省略了,那么会用默认的搜索工具进行搜索。默认的搜索工具对应在 `g:spacevim_search_tools` +列表中的第一个工具。列表中的工具默认的顺序为:`rg`, `ag`, `pt`, `ack`, `grep`。 +举个例子:如果 `rg` 和 `ag` 没有在系统中找到,那么 `SPC s b` 会使用 `pt` 进行搜索。 + +下表是全部的工具键: + +| 工具 | 键 | +| ---- | --- | +| ag | a | +| grep | g | +| ack | k | +| rg | r | +| pt | t | + +应当避免的范围和对应按键为: + +| 范围 | 键 | +| -------------- | --- | +| 打开的缓冲区 | b | +| 给定目录的文件 | f | +| 当前工程 | p | + +在 FlyGrep 内的快捷键如下: + +| 快捷键 | 功能描述 | +| ---------------- | ------------------ | +| `` | 关闭 FlyGrep 窗口 | +| `` | 打开光标下文件位置 | +| `` | 移动至下一行 | +| `` | 移动至下一行 | +| `` | 移动至上一行 | +| `` | 移动至上一行 | +| `` | 删除光标前一个字符 | +| `` | 删除光标后的单词 | +| `` | 删除光标前所有字符 | +| `` | 删除光标后所有字符 | +| ``/`` | 将光标定位到行首 | +| ``/`` | 将光标定位到行尾 |