Aqui está uma pequena função que uso como um alias em meu zhsrc:
ff () {
find | xargs grep "$1" -sl | view - -c "/$1/";
}
Agora, este provavelmente não é o mais prático dos apelidos, uma vez que atravessa toda a árvore de diretórios, mas é bom para pequenos projetos. Para Rails, geralmente uso os outros quatro:
fa () {
find app/models app/controllers | xargs grep "$1" -sl | view - -c "/$1/";
}
fs () {
find features/ spec/ | xargs grep "$1" -sl | view - -c "/$1/";
}
fd () {
find db/ | xargs grep "$1" -sl | view - -c "/$1/";
}
fv () {
find app/views/ | xargs grep "$1" -sl | view - -c "/$1/";
}
O que eles fazem? Vamos examiná-los passo a passo:
- primeiro nós
find
– que mostra todos os arquivos no diretório atual, recursivamente - em seguida, canalizamos para
xargs
, que obtém a saída de find e, linha por linha, envia para o próximo comando, que em nosso caso é grep "str"
– estaremos procurando por uma string no arquivo que foi fornecido porxargs
. Uma vez que todos os arquivos foram passados linha por linhaxargs
, vamos procurar por “str” em todos os arquivos, um por um- nós daremos
grep
a opção de exibir os dados como uma lista curta, (daí o ) para ter apenas os nomes de arquivos absolutos-sl
- o resultado é uma lista de arquivos onde “str” foi encontrado, então a próxima etapa seria passá-lo para o vim somente leitura (visualização) para mantê-lo em algum lugar. Anexamos um traço no final para fazer a leitura da visualização de stdin, de onde vem o tubo.
Portanto, temos uma visão de todos os arquivos que contêm “str”. Agora podemos ir para a linha que nos interessa e clicar gf
para abrir o arquivo no vim.
É isso aí!
Como vai funcionar? Tente ff somestring
procurar somestring
em todos os arquivos e, em seguida, gf
vá até o arquivo que lhe interessa. Da mesma forma, fa
olha através dos modelos e controladores, fs
é para especificações, fd
é para migrações (lembra quando você estava procurando pela migração que introduziu uma certa mudança?) E fv
para olhar nas visualizações.