Answers:
我不确定这是您要寻找的东西,但是也许您可以尝试fzf和fzf.vim。
如果您将vim-plug用作插件管理器,则安装它们所需要做的就是在您的中添加以下行vimrc:
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
...在两行之间的某处:
call plug#begin('~/.vim/plugged')
和:
call plug#end()
然后执行:PlugInstall。
在提供的各种命令和映射中fzf.vim(其唯一目的似乎是安装要求fzf通过预定义源进行模糊搜索的映射和命令),其中包含command :Ag。
为了能够使用它,您需要安装shell命令ag。在基于debian的发行版中,可以使用以下命令来完成:
apt-get install silversearcher-ag
github上的项目说明了如何在MacOS上安装它:
brew install the_silver_searcher
:Ag是的包装$ ag,可以让您在当前目录(键入时显示的文件)中模糊搜索模式:pwd。每次击键后比赛都会更新。
您可以:
C-n和的比赛中前后循环C-pTab/S-TabM-a或选择或取消选择所有匹配项M-d如果选择一个或多个匹配项,则按Enter键后,它们将填充快速修复列表。从那里,您可以使用默认的Vim命令/映射(例如:cnext和)在它们之间导航:cprevious。
如果您想为所安装的所有命令添加前缀fzf.vim,并避免覆盖现有命令,则可以在vimrc:
let g:fzf_command_prefix = 'your_prefix'
我将其Fzf用作前缀,这就是为什么我没有输入:Agbut 的原因:FzfAg。
如果您喜欢使用git grep而不是ag,则可以在其周围安装自己的自定义包装:GGrep,如下所示:
command! -bang -nargs=* GGrep
\ call fzf#vim#grep('git grep --line-number '.shellescape(<q-args>), 0, <bang>0)
在中进行了说明:h fzf-vim-customization。
此外,如果fzf打开了TMUX一个窗格,您希望它需要整个屏幕,而不是,您可以附加一个爆炸到所有的命令(:Ag!,:GGrep!,...)。
正如您在最后一条评论中所说,默认情况下会fzf更改外壳程序的配置。例如,如果您使用bash,它将在您的中添加以下行~/.bashrc:
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
这将获取文件~/.fzf.bash。后者包含一些代码:
# Setup fzf
# ---------
if [[ ! "$PATH" == */home/user/.fzf/bin* ]]; then
export PATH="$PATH:/home/user/.fzf/bin"
fi
# Auto-completion
# ---------------
[[ $- == *i* ]] && source "/home/user/.fzf/shell/completion.bash" 2> /dev/null
# Key bindings
# ------------
source "/home/user/.fzf/shell/key-bindings.bash"
此代码将路径附加到环境变量$PATH:/home/user/.fzf/bin; 这是包含fzf程序的文件夹。
它还提供其他2个文件:
/home/user/.fzf/shell/completion.bash
/home/user/.fzf/shell/key-bindings.bash
第一个似乎定义了完成功能,而第二个安装了键绑定。
不幸的是,按键绑定可能会覆盖默认readline功能。
例如,fzf将函数绑定fzf-file-widget到C-t。readline通常使用此键来执行该transpose-chars功能。
如果您不希望这样做,一种可能的解决方案是~/.bashrc在fzf获取其配置的源之后,还原其中的键绑定。例如,如果要C-t保留其旧的行为,即将光标周围的2个字符换行并绑定fzf-file-widget到另一个键,例如C-x C-t,可以在以下行末添加这些行~/.bashrc:
bind -x '"\C-x\C-t": fzf-file-widget'
bind '"\C-t": transpose-chars'
同样的道理也适用于zsh外壳,但语法安装一键绑定有一点不同:
bindkey '^X^T' fzf-file-widget
bindkey '^T' transpose-chars
如果您曾经习惯的其中一个外壳键绑定已被覆盖fzf,您想恢复它,但不知道所执行函数的确切名称是什么,则可以尝试以下操作。
首先,在您的内~/.bashrc,暂时注释掉提供fzf配置的行。然后,重新打开一个终端,然后查看bind -P命令的输出,您可以在Vim缓冲区中读取该命令的输出:
bind -P | vim -R -
我不确定,但是我认为它应该显示大多数或所有readline键绑定。如果要查找绑定到C-t键的readline函数的名称,请在Vim缓冲区中搜索\\C-t。如果您要查找的是M-c(meta / alt键)绑定的键,则将进行搜索\\ec(\e代表转义键,它似乎M-c产生与相同的键码escape + c)。
您可以zsh通过查看bindkey命令的输出来执行相同的操作。但是这一次,它^[代表meta / alt修饰键,而单个插入号(^)字符代表控制键。
目前,我发现4个键绑定执行fzf了名称中包含关键字的函数。他们使用键序列C-i(与,和相同Tab)。它们绑定到以下功能:C-rC-tM-c
C-i fzf-completion
C-r fzf-history-widget
C-t fzf-file-widget
M-c fzf-cd-widget
在我的系统上,最初,readline(用于bash编辑命令行的库)将这些键绑定到以下功能:
C-i complete
C-r reverse-search-history
C-t transpose-chars
M-c capitalize-word
并且zle(由所使用的行编辑器zsh)将它们绑定到:
C-i expand-or-complete
C-r history-incremental-search-backward
C-t transpose-chars
M-c capitalize-word
ag需要单独安装插件/工具?
ag也是必需的。我更新了答案。
ctrl-p您正在寻找类似的插件。请注意,它unite.vim也应该能够执行此操作,但我不建议这样做,因为在我看来,这是一个非常繁琐且易于创建错误的插件。