如果你没有听说过fzf,它是一个非常方便的通用命令行模糊查找器。除了命令行,它也是一个流行的Vim插件。如果你想知道,模糊查找器是一个帮助你找到你要找的东西而不需要写全名的工具。
作为一个Vim用户,我总是痴迷于用尽可能少的按键做一件事。在Vim中快速打开一个文件的能力对我来说超级有用,你很快就会明白为什么。
但是,你知道这个模糊搜索器--fzf,能做的事情比你想象的多得多吗?哦,是的,模糊搜索在这里只是冰山一角。 它就像酒一样,你把它放在你的电脑上越多,它从那个命令行中积累的味道和甜味就越多。让我们深入了解一下,如何利用Vim内部的fzf提高你的工作效率。
开始了
为了能够做我在这篇博文中所做的事情,你将需要几个插件。如果你没有使用vim-plug来安装其他Vim插件,那你就错过了。去吧,把它设置好,你可以添加以下内容:
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
然后,用:PlugInstall
安装这些插件,或者使用我使用的这个快捷方式:
" Source Vim configuration file and install plugins
nnoremap <silent><leader>1 :source ~/.vimrc \| :PlugInstall<CR>
然后,你可以按你的领导键和数字1来安装和应用你的.vimrc
中的所有变化。
现在,到了最酷的部分!
神奇的搜索器
我们需要的东西都已经安装好了,我们可以进入实用部分了。正如我们之前所说,fzf是一个模糊的查找器,如果你想的话,是一个文件选择器。让我们马上尝试一下这个功能。要打开文件选择器,在Vim会话中输入:Files
。你应该得到像这样的东西。
发生的事情是fzf在底部打开了一个小窗口,显示我们目录中的文件。如果你看一下新打开的窗口,你会看到文件列表,以及窗口右边的当前选定文件的预览。所以你的文件在左边,它们的预览在右边。你是不是已经像我一样印象深刻了?很好,让我们继续前进。
如果你不喜欢这个窗口,你可以用fzf定制选项轻松地进行微调。但是如果你想在全屏状态下使用任何fzf命令,你可以在命令的最后加上!
。例如,让我们做:Files!
,你应该看到下面的情况。
但是,我并不经常使用:Files
。事实上,我只使用 fzf 的:GFiles
命令。:GFiles
会为你的 Git 文件打开一个文件选取器,忽略.gitignore
中的文件。在 JavaScript 项目中使用它是非常整洁的,因为node_modules
文件在运行:Files
时往往会扼杀心情。让我们用:Files
和:GFiles
命令来比较同一个项目。
恶心!到处都是`node_modules`。
啊,这就好了。
注意到区别了吗?没有那些node_modules/**
文件的出现,感觉我就像放下了一个沉重的背包。总之,让我们看看这个坏小子在搜索要编辑的文件时的表现。
就是这样,它看起来很不错。我不喜欢使用:GFiles
的唯一一点是,它不会包括你的新文件,除非你用git add
把它们加入 Git 索引。另外,我希望在预览文件时能有一些语法高亮显示,但我们会在另一篇博文中介绍。同时,请考虑订阅新闻通讯,以获得类似的文章。
总而言之,在搜索文件时,fzf很有用,而且快如闪电。而且,正如Drake下面所说的,诉诸于使用:GFiles
,或尝试配置:Files
,以忽略某些文件和路径。
为了让你的速度超快,你可以创建一个快捷方式。我用CTRL + p打开:GFiles
。我的肌肉记忆中留下了这一点,来自传说中的ctrlp插件。要想让:GFiles
,使它用CTRL + p打开,你可以在你的.vimrc
中添加以下内容。
nnoremap <C-p> :GFiles<Cr>
快速搜索你的项目
令我吃惊的是,你可以在Vim中用fzf做其他事情。例如,你可以用The Silver Searcher或ripgrep来搜索fzf。 要用The Silver Searcher来搜索,输入:Ag
和你想搜索的术语。而要用ripgrep搜索,则需要输入:Rg
,然后输入术语。当然,为了使这些命令发挥作用,你需要在你的环境中安装各自的库。
我使用:Ag
,它的性能非常好。对我来说,它与CTRL+g相连,所以我可以快速访问它。要有这样或类似的设置,请将以下内容添加到你的.vimrc
:
nnoremap <C-g> :Ag<Cr>
上面的快捷方式将在底部打开:Ag
搜索窗口,并提供文件的预览。我发现当我需要在一个项目中搜索一个词时,它超级有帮助,而且很快捷。让我们看看:Ag
的操作。
抛光了的
你可以通过输入:Buffers
,用fzf搜索你所有打开的缓冲区。我在我的领导键(空格键,BTW)+b处保留了一个快捷方式,像这样:
nnoremap <silent><leader>l :Buffers<CR>
有了这个命令,你会得到一个缓冲区资源管理器,你可以在打开的文件之间快速切换。我希望这有帮助。让我们看看它看起来如何。
ASCII艺术(一种)
如果你是一个喜欢在终端内绘图的人,那么你会喜欢这个。 如果你使用vim-fugitive插件,可以试着输入:Commits
。这个插件本身就是一个非常棒的Git包装,只是如果你不想离开温暖的Vim会话。总之,如果你输入:Commits
,你应该得到一个项目提交树,就像这样。
很酷,是吧?你可以向上和向下滚动,查看每个提交的变化。你甚至可以输入你感兴趣的提交,查看那里的修改。所有这些都要归功于vim-fugitive
,所以请看一下。关于在Vim内部使用Git的博文即将发布,请务必订阅通讯。
一个快速的总结
Vim生态系统有很多插件,fzf就是一个很棒的插件。你可以用:GFiles
和:Files
来搜索文件。如果你想进行文本搜索,可以尝试使用:Ag
或:Rg
,它们分别使用 The Silver Searcher 和 ripgrep。厌倦了在打开的缓冲区之间缓慢切换--试试:Buffers
。或者,如果你想要一些漂亮的提交信息,可以使用:Commits
.