No estoy seguro de que esto sea lo que estás buscando, pero tal vez podrías probar fzf y fzf.vim .
Si usa vim-plug como administrador de complementos, todo lo que debe hacer para instalarlos es agregar estas líneas en su vimrc:
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
... en algún lugar entre las líneas:
call plug#begin('~/.vim/plugged')
y:
call plug#end()
Entonces ejecuta :PlugInstall.
Entre los diversos comandos y asignaciones proporcionados por fzf.vim(cuyo único propósito parece ser instalar asignaciones y comandos que solicitan fzfla búsqueda difusa a través de fuentes predefinidas), está el comando :Ag.
Para poder usarlo, debe instalar el comando de shell ag . En distribuciones basadas en Debian, se puede hacer con el siguiente comando:
apt-get install silversearcher-ag
El proyecto en github explica cómo instalarlo en MacOS:
brew install the_silver_searcher
:Ages una envoltura $ agy le permite buscar difusamente un patrón en los archivos del directorio actual (el que se muestra cuando escribe :pwd). Las coincidencias se actualizan después de cada pulsación de tecla.
Usted puede:
- avanzar y retroceder por los partidos con
C-nyC-p
- selecciona el partido actual y pasa al siguiente / anterior con
Tab/S-Tab
- seleccionar o anular la selección de todas las coincidencias con
M-aoM-d
Si selecciona una o varias coincidencias, después de presionar Intro, completarán la lista de soluciones rápidas. Desde allí, podrá navegar a través de ellos con los comandos / asignaciones de Vim predeterminados, como :cnexty :cprevious.

Si desea agregar un prefijo a todos los comandos instalados por fzf.vim, y evitar anular los comandos existentes, puede agregar esto en su vimrc:
let g:fzf_command_prefix = 'your_prefix'
Lo uso Fzfcomo prefijo, por eso no escribí :Agpero :FzfAg.
Si prefiere usar en git greplugar de ag, parece que podría instalar su propio envoltorio personalizado alrededor :GGrep, de esta manera:
command! -bang -nargs=* GGrep
\ call fzf#vim#grep('git grep --line-number '.shellescape(<q-args>), 0, <bang>0)
Se explica en :h fzf-vim-customization.
Además, si fzfse abre un panel en tmux, y que preferirían que se necesita toda la pantalla en su lugar, puede anexar un golpe a todos los comandos ( :Ag!, :GGrep!, ...).
Como dijiste en tu último comentario , por defecto fzfcambia la configuración de tu shell. Por ejemplo, si usa bash, agregará la siguiente línea en su ~/.bashrc:
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
Esto generará el archivo ~/.fzf.bash. Este último contiene algún código:
# 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"
Este código añade una ruta a la variable de entorno $PATH: /home/user/.fzf/bin; cual es la carpeta que contiene el fzfprograma.
También genera otros 2 archivos:
/home/user/.fzf/shell/completion.bash
/home/user/.fzf/shell/key-bindings.bash
El primero parece definir las funciones de finalización, mientras que el segundo instala las asociaciones de teclas.
Desafortunadamente, las combinaciones de teclas pueden anular las readlinefunciones predeterminadas .
Por ejemplo, fzfvincula la función fzf-file-widgeta C-t. Readline suele utilizar esta tecla para ejecutar la transpose-charsfunción.
Si no desea esto, una posible solución sería restaurar las asociaciones de teclas dentro de su ~/.bashrc, después de fzfhaber obtenido su configuración. Por ejemplo, si desea C-tmantener su comportamiento anterior, eso es transponer los 2 caracteres alrededor del cursor y vincular fzf-file-widgeta otra tecla, digamos C-x C-t, podría agregar estas líneas al final de ~/.bashrc:
bind -x '"\C-x\C-t": fzf-file-widget'
bind '"\C-t": transpose-chars'
Lo mismo se aplica al zshshell, pero la sintaxis para instalar un enlace de teclas es un poco diferente:
bindkey '^X^T' fzf-file-widget
bindkey '^T' transpose-chars
Si uno de los enlaces de teclas de shell al que estaba acostumbrado ha sido anulado fzf, desea restaurarlo, pero no sabe cuál es el nombre exacto de la función que se ejecutó, puede intentar lo siguiente.
Primero, dentro de tu ~/.bashrc, comenta temporalmente la línea que origina la fzfconfiguración. Luego, vuelva a abrir un terminal y eche un vistazo a la salida del bind -Pcomando, que puede leer en un búfer de Vim:
bind -P | vim -R -
No estoy seguro, pero creo que debería mostrar la mayoría o todas las readlineasociaciones de teclas. Si está buscando el nombre de la función readline vinculada a la C-ttecla, en el búfer Vim, buscaría \\C-t. Y si estaba buscando el que está vinculado a M-c(tecla meta / alt), buscaría \\ec( \erepresenta la tecla de escape y parece que M-cproduce los mismos códigos de tecla que escape + c).
Puede hacer lo mismo zshmirando la salida del bindkeycomando. Pero esta vez, ^[representa la tecla modificadora meta / alt, mientras que un solo carácter caret ( ^) representa la tecla de control.
Actualmente, encontré 4 enlaces de teclas que ejecutan funciones que contienen la fzfpalabra clave en su nombre. Usan las secuencias de teclas C-i(igual que Tab) C-r, C-ty M-c. Están vinculados a las siguientes funciones:
C-i fzf-completion
C-r fzf-history-widget
C-t fzf-file-widget
M-c fzf-cd-widget
En mi sistema, originalmente readline(la biblioteca utilizada bashpara editar la línea de comando) vinculaba esas teclas a estas funciones:
C-i complete
C-r reverse-search-history
C-t transpose-chars
M-c capitalize-word
Y zle(el editor de línea utilizado por zsh), los unió a:
C-i expand-or-complete
C-r history-incremental-search-backward
C-t transpose-chars
M-c capitalize-word
ctrl-plo que estás buscando es un complemento similar. Tenga en cuenta queunite.vimtambién debería poder hacerlo, pero no lo recomendaría porque, en mi opinión , es un complemento bastante pesado y que crea errores.