Existe uma maneira, possivelmente usando um pacote, de listar recursivamente todos os arquivos (com caminhos) e subdiretórios (ou pelo menos os subdiretórios vazios , pois os caminhos para os não vazios podem ser recolhidos a partir dos caminhos de os arquivos nele contidos) do diretório atual?
O mais próximo que pude encontrar é a projectile-find-file
função do projectile
pacote (alternativamente, a helm-projectile-find-file
função do helm-projectile
pacote), mas não parece capaz de listar pastas vazias. Além disso, parece funcionar apenas com o Git e outros repositórios de controle de versão, mas pode haver uma solução alternativa para essa limitação.
helm
ou outroivy
, ou seja, que os resultados serão exibidos em um bufferhelm
ouivy
. Se for impossível satisfazer os dois requisitos, o segundo é mais importante para mim.Respostas:
Supondo que você use,
ivy
você pode usar esta funçãofonte
helm
?helm
.ivy
é bem leve. Dê um tiro.diretório-arquivos-recursivamente
(Eu acho que isso foi adicionado no Emacs 25)
aqui está o link para o manual: https://www.gnu.org/software/emacs/manual/html_node/elisp/Contents-of-Directories.html
Exemplo
fonte
include-directories
at
? Estou trabalhando no Emacs 24 e não posso tentar isso agora, mas posso testar isso em casa em poucas horas.Esta resposta assume que você deseja exibir uma lista dos nomes de arquivos e diretórios, em vez de obter uma lista Lisp deles.
Use comandos padrão Emacs
find-dired
,find-name-dired
oufind-grep-dired
. Os nomes de arquivos e diretórios encontrados são exibidos em um buffer no modo Dired. (Você pode colocar todo o poder do Dired para trabalhar nos resultados.)Se você usa a biblioteca,
find-dired+.el
então possui versões aprimoradas desses comandos padrão do Emacs, além de possuir um comandofind-time-dired
, que encontra arquivos mais novos ou mais antigos que um determinado carimbo de data / hora.fonte
find-dired
é exatamente o que estou procurando, mas existe uma maneira de imprimir apenas nomes? Como, por outro lado, o nome do arquivo único requer várias linhas sem motivo, porque eu absolutamente não me importo com o tamanho, a data ou as permissões dos arquivos. Eu tentei executar(setcar find-ls-option "-printf '%p\n'")
antesfind-dired
, mas por algum motivo, dessa maneira, o comando não deseja abrir um arquivo ao pressionar Enter sobre um item.(
alternar para exibir mais do que os nomes dos arquivos. Eu o deixo desligado a maior parte do tempo (nenhum detalhe é mostrado) e apenas o desligo brevemente quando quero verificar alguns detalhes.Consulte https://github.com/technomancy/find-file-in-project
Existem comandos para localizar arquivos ou localizar diretórios. Mas não ambos.
Se você deseja apenas listar todos os subdiretórios e arquivos de forma recursiva em um buffer, há dois comandos criados no Emacs para idades:
M-x find-dired
. Depende da ferramenta CLIfind
. No Windows, você precisa instalar o Cygwin ou MYSYS, que possuifind
M-x find-lisp-find-dired
. O mesmo quefind-dired
escrito em Lisp. Portanto, não há dependência de terceiros. Além disso, ele pode reconhecer o local fora da caixa. Mas é mais lento quefind-dired
fonte
ls
ou a função Emacsfind-file
, que lista arquivos e diretórios, incluindo diretórios vazios.find-dired
efind-lisp-find-dired
listam não apenas o conteúdo do diretório atual, mas também o conteúdo de cada um de seus subdiretórios, subdiretórios, etc.?Esta resposta pressupõe que você deseja obter uma lista Lisp dos nomes de arquivos e diretórios, em vez de exibir uma lista deles.
Se você usar a biblioteca Dired + então você pode usar a função
diredp-files-within
. (Você não precisa estar em um buffer Dired para usá-lo.)Isso funciona com qualquer versão do Emacs e é mais geral do que
directory-files-recursively
.Você pode passar uma lista de arquivos e diretórios, e ela atua recursivamente em cada um deles.
Ou você pode passar uma função que retorna essa lista.
Se houver um buffer direcionado para um diretório que é processado, a função será chamada nesse buffer para retornar a lista de arquivos a serem incluídos.
Por exemplo, se a função for
dired-get-marked-files
, apenas os arquivos e subdiretórios marcados serão incluídos.Você pode transmitir um predicado que cada arquivo ou diretório deve satisfazer. A correspondência de regexp é, obviamente, um tipo de predicado.
Você pode dizer para não seguir os links simbólicos.
fonte
fonte