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 fzf
la 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
:Ag
es una envoltura $ ag
y 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-n
yC-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-a
oM-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 :cnext
y :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 Fzf
como prefijo, por eso no escribí :Ag
pero :FzfAg
.
Si prefiere usar en git grep
lugar 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 fzf
se 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 fzf
cambia 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 fzf
programa.
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 readline
funciones predeterminadas .
Por ejemplo, fzf
vincula la función fzf-file-widget
a C-t
. Readline suele utilizar esta tecla para ejecutar la transpose-chars
función.
Si no desea esto, una posible solución sería restaurar las asociaciones de teclas dentro de su ~/.bashrc
, después de fzf
haber obtenido su configuración. Por ejemplo, si desea C-t
mantener su comportamiento anterior, eso es transponer los 2 caracteres alrededor del cursor y vincular fzf-file-widget
a 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 zsh
shell, 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 fzf
configuración. Luego, vuelva a abrir un terminal y eche un vistazo a la salida del bind -P
comando, 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 readline
asociaciones de teclas. Si está buscando el nombre de la función readline vinculada a la C-t
tecla, 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
( \e
representa la tecla de escape y parece que M-c
produce los mismos códigos de tecla que escape + c
).
Puede hacer lo mismo zsh
mirando la salida del bindkey
comando. 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 fzf
palabra clave en su nombre. Usan las secuencias de teclas C-i
(igual que Tab
) C-r
, C-t
y 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 bash
para 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-p
lo que estás buscando es un complemento similar. Tenga en cuenta queunite.vim
también debería poder hacerlo, pero no lo recomendaría porque, en mi opinión , es un complemento bastante pesado y que crea errores.