Existe alguma maneira de configurar o VIM para pesquisar interativamente em cada arquivo um projeto inteiro?
Por interativo , quero dizer atualizar cada pressionamento de tecla.
Algo como o Emacs advis-git-grep , veja: exemplo de demonstração .
Existe alguma maneira de configurar o VIM para pesquisar interativamente em cada arquivo um projeto inteiro?
Por interativo , quero dizer atualizar cada pressionamento de tecla.
Algo como o Emacs advis-git-grep , veja: exemplo de demonstração .
ctrl-p
um plugin semelhante é o que você está procurando. Note queunite.vim
também deve ser capaz de fazer isso, mas eu não o recomendaria, porque, na minha opinião , é um plugin bastante pesado e que cria bugs.ctrl-p
uma maneira de pesquisar interativamente o conteúdo do arquivo? Eu só o usei para procurar interativamente arquivos com base em seus nomes.Respostas:
Não tenho certeza se é isso que você está procurando, mas talvez você possa experimentar o fzf e o fzf.vim .
Se você usa o vim-plug como um gerenciador de plugins, tudo o que você precisa fazer para instalá-los é adicionar estas linhas no seu
vimrc
:... algures entre as linhas:
e:
Então execute
:PlugInstall
.Entre os vários comandos e mapeamentos fornecidos por
fzf.vim
(cuja única finalidade parece ser a instalação de mapeamentos e comandos que solicitamfzf
a pesquisa difusa por fontes predefinidas), existe o comando:Ag
.Para poder usá-lo, você precisa instalar o comando shell ag . Nas distribuições baseadas no debian, isso pode ser feito com o seguinte comando:
O projeto no github explica como instalá-lo no MacOS:
:Ag
é um invólucro$ ag
e permite que você pesquise um padrão nos arquivos do diretório atual (aquele exibido quando você digita:pwd
). As correspondências são atualizadas após cada pressionamento de tecla.Você pode:
C-n
eC-p
Tab
/S-Tab
M-a
ouM-d
Se você selecionar uma ou várias correspondências, depois de pressionar Enter, elas preencherão a lista de correções rápidas. A partir daí, você poderá navegar por eles com comandos / mapeamentos padrão do Vim, como
:cnext
e:cprevious
.Se você deseja adicionar um prefixo a todos os comandos instalados por
fzf.vim
e evitar a substituição de comandos existentes, você pode adicioná-lo emvimrc
:Eu uso
Fzf
como prefixo, é por isso que não digitei:Ag
mas:FzfAg
.Se você preferir usar em
git grep
vez deag
, parece que você pode instalar seu próprio wrapper personalizado em torno dele, da:GGrep
seguinte maneira:É explicado em
:h fzf-vim-customization
.Além disso, se
fzf
abre um painel no tmux, e você preferiria que toma toda a tela em vez disso, você pode acrescentar um estrondo a todos os comandos (:Ag!
,:GGrep!
...).Como você disse em seu último comentário , por padrão,
fzf
altera a configuração do seu shell. Por exemplo, se você usarbash
, ele adicionará a seguinte linha no seu~/.bashrc
:Isso irá originar o arquivo
~/.fzf.bash
. Este último contém algum código:Este código adiciona um caminho para a variável de ambiente
$PATH
:/home/user/.fzf/bin
; qual é a pasta que contém ofzf
programa.Ele também origina 2 outros arquivos:
O primeiro parece definir funções de conclusão, enquanto o segundo instala ligações de teclas.
Infelizmente, as combinações de teclas podem substituir as
readline
funções padrão .Por exemplo,
fzf
vincula a funçãofzf-file-widget
aC-t
. Essa tecla é geralmente usada pelo readline para executar atranspose-chars
função.Se você não quiser isso, uma solução possível seria restaurar as ligações de teclas dentro do seu
~/.bashrc
, depois defzf
ter originado sua configuração. Por exemplo, se você desejaC-t
manter seu comportamento antigo, é a transposição dos 2 caracteres ao redor do cursor e a ligaçãofzf-file-widget
a outra chave, digamosC-x C-t
, você pode adicionar essas linhas no final de~/.bashrc
:O mesmo se aplica ao
zsh
shell, mas a sintaxe para instalar uma ligação de chave é um pouco diferente:Se uma das ligações da tecla shell a que você estava acostumada foi substituída
fzf
, você deseja restaurá-la, mas não sabe qual é o nome exato da função que foi executada, tente o seguinte.Primeiro, dentro do seu
~/.bashrc
, comente temporariamente a linha que origina afzf
configuração. Em seguida, reabra um terminal e dê uma olhada na saída dobind -P
comando, que você pode ler em um buffer do Vim:Não tenho certeza, mas acho que deve exibir a maioria ou todas as
readline
combinações de teclas. Se você está procurando o nome da função readline vinculada àC-t
chave, no buffer do Vim, você deve pesquisar\\C-t
. E se você estivesse procurando pela pessoa vinculada aM-c
(tecla meta / alt), pesquisaria\\ec
(\e
significa a tecla escape e pareceM-c
produzir os mesmos códigos de chaveescape + c
).Você pode fazer a mesma coisa
zsh
observando a saída dobindkey
comando. Mas desta vez,^[
significa a tecla modificadora meta / alt, enquanto um único^
caractere de sinal de intercalação ( ) representa a tecla de controle.Atualmente, encontrei 4 ligações de teclas executando funções que continham a
fzf
palavra - chave em seu nome. Eles usam as seqüências de teclasC-i
(iguais aTab
)C-r
,,C-t
eM-c
. Eles estão vinculados às seguintes funções:No meu sistema, originalmente
readline
(a biblioteca usadabash
para editar a linha de comando) vinculava essas chaves a estas funções:E
zle
(o editor de linha usado porzsh
), vincule-os a:fonte
ag
um plugin / ferramenta separado que precisa ser instalado?ag
também era necessário. Eu atualizei a resposta.