¿Hay alguna forma de configurar VIM para buscar interactivamente dentro de cada archivo un proyecto completo?
Por interactivo , me refiero a actualizar cada pulsación de tecla.
Algo así como Emacs Counsel-git-grep , ver: ejemplo de demostración .
¿Hay alguna forma de configurar VIM para buscar interactivamente dentro de cada archivo un proyecto completo?
Por interactivo , me refiero a actualizar cada pulsación de tecla.
Algo así como Emacs Counsel-git-grep , ver: ejemplo de demostración .
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.ctrl-p
Tiene alguna forma de buscar interactivamente el contenido del archivo? Solo lo he usado para buscar interactivamente archivos basados en sus nombres.Respuestas:
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
:... en algún lugar entre las líneas:
y:
Entonces ejecuta
:PlugInstall
.Entre los diversos comandos y asignaciones proporcionados por
fzf.vim
(cuyo único propósito parece ser instalar asignaciones y comandos que solicitanfzf
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:
El proyecto en github explica cómo instalarlo en MacOS:
: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:
C-n
yC-p
Tab
/S-Tab
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 suvimrc
:Lo uso
Fzf
como prefijo, por eso no escribí:Ag
pero:FzfAg
.Si prefiere usar en
git grep
lugar deag
, parece que podría instalar su propio envoltorio personalizado alrededor:GGrep
, de esta manera: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 usabash
, agregará la siguiente línea en su~/.bashrc
:Esto generará el archivo
~/.fzf.bash
. Este último contiene algún código:Este código añade una ruta a la variable de entorno
$PATH
:/home/user/.fzf/bin
; cual es la carpeta que contiene elfzf
programa.También genera otros 2 archivos:
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ónfzf-file-widget
aC-t
. Readline suele utilizar esta tecla para ejecutar latranspose-chars
función.Si no desea esto, una posible solución sería restaurar las asociaciones de teclas dentro de su
~/.bashrc
, después defzf
haber obtenido su configuración. Por ejemplo, si deseaC-t
mantener su comportamiento anterior, eso es transponer los 2 caracteres alrededor del cursor y vincularfzf-file-widget
a otra tecla, digamosC-x C-t
, podría agregar estas líneas al final de~/.bashrc
:Lo mismo se aplica al
zsh
shell, pero la sintaxis para instalar un enlace de teclas es un poco diferente: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 lafzf
configuración. Luego, vuelva a abrir un terminal y eche un vistazo a la salida delbind -P
comando, que puede leer en un búfer de Vim: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 laC-t
tecla, en el búfer Vim, buscaría\\C-t
. Y si estaba buscando el que está vinculado aM-c
(tecla meta / alt), buscaría\\ec
(\e
representa la tecla de escape y parece queM-c
produce los mismos códigos de tecla queescape + c
).Puede hacer lo mismo
zsh
mirando la salida delbindkey
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 teclasC-i
(igual queTab
)C-r
,C-t
yM-c
. Están vinculados a las siguientes funciones:En mi sistema, originalmente
readline
(la biblioteca utilizadabash
para editar la línea de comando) vinculaba esas teclas a estas funciones:Y
zle
(el editor de línea utilizado porzsh
), los unió a:fuente
ag
necesita instalar un complemento / herramienta separado?ag
también era necesario. Actualicé la respuesta.