1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 05:30:07 +08:00
SpaceVim/docs/_posts/2018-01-31-grep-on-the-fly-in-spacevim.md
2019-10-04 14:13:51 +08:00

113 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Vim 异步实时代码检索"
categories: [blog_cn, feature_cn]
excerpt: "异步执行 grep根据输入内容实时展示搜索结果支持全工程检索、检索当前文件、检索已打开的文件等"
image: https://user-images.githubusercontent.com/13142418/35278709-7856ed62-0010-11e8-8b1e-e6cc6374b0dc.gif
commentsID: "Vim 异步实时代码检索"
comments: true
permalink: /cn/:title/
lang: zh
---
# [Blogs](../blog/) >> Vim 异步实时代码检索
{{ page.date | date_to_string }}
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)
- 仅搜索当前文件
同时,可以使用快捷键 `SPC s s` 仅搜索当前文件中的内容,如果需要在当前文件中搜索光标下的词,可以使用快捷键 `SPC s S`
![searching current file](https://user-images.githubusercontent.com/13142418/35278847-e0032796-0010-11e8-911b-2ee8fd81aed2.gif)
- 在所有已经载入的文件中搜索
如果需要在所有已经打开的文件中搜索,可以使用快捷键 `SPC s b`,如果需要在所有已打开的文件中搜索光标下的词语,
则可以使用快捷键 `SPC s B`
![searching-loaded-buffer](https://user-images.githubusercontent.com/13142418/35278996-518b8a34-0011-11e8-9a7a-613668398ee2.gif)
- 搜索指定的文件夹
如果需要指定一个文件夹来搜索,可以使用快捷键 `SPC s f`,然后输入需要搜索的文件夹即可。同理,
如果需要在指定文件夹下搜索光标下的词语,可以使用快捷键 `SPC s F`
- 全工程后台检索
首先,需要启用 incsearch 模块:
```toml
[[layers]]
name = 'incsearch'
```
全工程后台检索,可以使用快捷键 `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 内的快捷键如下:
| 快捷键 | 功能描述 |
| ---------------- | ------------------ |
| `<Esc>` | 关闭 FlyGrep 窗口 |
| `<Enter>` | 打开光标下文件位置 |
| `<Tab>` | 移动至下一行 |
| `Ctrl-j` | 移动至下一行 |
| `<S-Tab>` | 移动至上一行 |
| `Ctrl-k` | 移动至上一行 |
| `<Backspace>` | 删除光标前一个字符 |
| `Ctrl-w` | 删除光标后的单词 |
| `Ctrl-u` | 删除光标前所有字符 |
| `Ctrl-k` | 删除光标后所有字符 |
| `Ctrl-a` / `<Home>` | 将光标定位到行首 |
| `Ctrl-e` / `<End>` | 将光标定位到行尾 |