Maneiras simples de copiar / colar arquivos e diretórios entre buffers direcionados
Existe uma M-w C-yabordagem simples para copiar e colar arquivos e diretórios entre dois buffers direcionados?
Quero dizer, marcar alguns itens (arquivos e buffer) mcopiando-os por M-w(ou outro atalho) e depois indo para outro buffer direcionado (que não está necessariamente em uma janela lado a lado pela janela do (s) buffer (s) direcionado (s) anterior (s) ), então yankingtodo o arquivo copiado por C-y(ou outro atalho) lá? Essa é uma tarefa simples que muitos exploradores de arquivos em diferentes sistemas operacionais podem fazer.
O problema com a opção de cópia clássica C em dired é que, assim que é pressionado, ele solicita o destino. Se o caminho do buffer de destino for muito longo ou houver muitos buffers direcionados abertos, essa abordagem será complicada.
Estou procurando uma solução para copiar primeiro os itens e colá-los em um buffer direcionado apropriado.
Existe uma pergunta relacionada Como copiar / mover arquivos rapidamente no Emacs Dired? que utiliza a abordagem clássica de prensagem C quando duas janelas Dired separados verticalmente usando a opção (setq dired-dwim-target t).
Quais são as maneiras de conseguir isso?
Adicionei esse recurso agora ao Dired + .
Você pode usar C-y(comando diredp-yank-files) para colar arquivos, cujos nomes absolutos foram copiados para o anel de interrupção, no diretório atual. O "diretório atual" aqui é o que dired-current-directoryretorna: o subdiretório inserido onde o cursor está localizado ou o diretório principal Dired se o cursor não estiver em uma lista de subdiretórios.
Com um prefixo arg, C-ysolicita o diretório de destino para a pasta. Portanto, você não precisa estar em um buffer Dired para colar arquivos em um diretório.
Você deve ter copiado os nomes dos arquivos para o anel de morte usando M-0 wou M-x diredp-copy-abs-filenames-as-kill.
Em Dired +, esses comandos também definem variável diredp-last-copied-filenamespara a mesma sequência de nomes de arquivos. C-yusa o valor dessa variável, não o que está atualmente na cabeça do anel de morte. Isso significa que você não precisa colar imediatamente após copiar os nomes dos arquivos. E isso significa que você pode, em vez de copiar os nomes dos arquivos no ringue, apenas colocar os nomes nessa variável (por exemplo, programaticamente).
Quando você usa C-y, você é solicitado a confirmar ( you n). Você também pode pressionar l(para "lista") quando solicitado, para exibir a lista de arquivos que serão colados.
Você também pode copiar os arquivos marcados do buffer Dired atual e quaisquer arquivos marcados em seus subdiretórios marcados, definidos recursivamente . Para isso, use M-0 M-+ M-w(prefixo zero arg com comando diredp-copy-filename-as-kill-recursive) ou use M-x diredp-copy-abs-filenames-as-kill-recursive.
Observe que com o Dired + você também pode facilmente ter um buffer Dired que lista qualquer número de arquivos e diretórios, de qualquer lugar. Ou seja, as entradas listadas não precisam estar no mesmo diretório ou mesmo em diretórios relacionados. Consulte C-x D F(comando diredp-dired-for-files), que está no menu da barra de menus Dir como o item Arquivos Dired Localizados em Qualquer Lugar . Você pode marcar e colar (copiar) esses arquivos arbitrários de um buffer Dired para qualquer diretório.
Atualização 2019-04-22:
Também adicionei a capacidade de mover (não apenas colar) os arquivos cujos nomes (absolutos) você copiou para o anel de morte para o diretório atual (ou outro). Isso está vinculado C-wem Dired.
diredp-move-files-named-in-kill-ringé uma função interativa do Lisp no Windows dired+.el.
Mova os arquivos cujos nomes absolutos foram copiados para o diretório atual.
Com um prefixo não negativo arg, é solicitado o diretório de destino.
Com um prefixo não positivo arg, você pode ver detalhes sobre os arquivos se clicar lquando solicitado a confirmar a colagem. Caso contrário, você verá apenas os nomes dos arquivos. Os detalhes que você vê são definidos por opção diredp-list-file-attributes.
Você deveria ter copiado a lista de nomes de arquivos como uma string para o anel de morte usando M-0 wou M-x diredp-copy-abs-filenames-as-kill. Esses comandos também definem variável diredp-last-copied-filenamespara a mesma string. diredp-move-files-named-in-kill-ringusa o valor dessa variável, não o que está atualmente na cabeça do anel de morte.
Quando chamado do Lisp:
Arg opcional NO-CONFIRM-Psignifica que não solicite confirmação para mover.
Arg opcional DETAILSé passado para diredp-y-or-n-files-p.
Trabalhou bem. O diredp teve C-wque mover / renomear o arquivo em vez de copiar? Graças
@azzamsa: Não, acho que não. (Eu acho que você nomes de arquivos uso médios que estão no kill-ringpara contar Dired para mover esses arquivos em algum lugar, por exemplo, o que levou para onde movê-los.)
Certo. Quero dizer, por que você não adiciona essa funcionalidade? Seria maravilhoso :). Porque o atual, apenas suporta Cy. Apenas copiar, Não mover / renomear.
— Azzamsa 8/10
Agora. Eu uso o dired-ranger hack para esse obrigado.
FYI - Agora você pode usar C-wpara mover os arquivos cujos nomes você copiou.
Você pode fazer o seguinte no Vanilla Dired (não é necessária uma biblioteca de terceiros):
Vá primeiro para um buffer direcionado que lista o diretório de destino .
Com o cursor na linha de cabeçalho do diretório para obter uma lista do diretório de destino, use w(comando dired-copy-filename-as-kill). Isso copia o nome absoluto desse diretório de destino. (Você pode copiar um nome de diretório de qualquer linha de cabeçalho de subdiretação de listagem Dired da mesma maneira.)
Vá para o buffer Dired que lista os arquivos que você deseja copiar . Marque esses arquivos.
Use C(comando dired-do-copy) para copiar os arquivos marcados . No prompt, use C-ypara colar o nome (absoluto) do diretório de destino . Você pode simplesmente colá-lo, sem se preocupar em remover o diretório padrão inserido no minibuffer. (Colá-lo após esse nome de diretório padrão escurece esse nome padrão - ele é ignorado.)
Acho que é tão simples quanto o que você descreve ( C-wpara copiar nomes de arquivos marcados seguidos C-yna listagem Dired de destino), mas a ordem é oposta : você copia primeiro o nome do diretório de destino e, em seguida, cola-o no comando C( dired-do-copy) .
( dired-do-copyverifica se há arquivos com o mesmo nome no diretório de destino etc.)
Dica: (Isso não é necessário se você usar Dired + - veja minha outra resposta aqui.) Se você pretende copiar (ou mover) arquivos de vários diretórios para o mesmo diretório de destino, e pode estar fazendo outras coisas com o kill-ring no meio, para que o nome do diretório de destino copiado não seja mais o primeiro no anel de interrupção, use a seleção secundária para selecionar o nome do diretório de destino. A seleção secundária não depende da região ou da posição do cursor - você pode colá-la quantas vezes quiser, independentemente das alterações no kill-ring. Você pode colá-lo usando o mouse, mas é mais prático usar C-M-yna biblioteca second-sel.el.
Sua ideia parece direta; talvez você possa tentar implementá-la por conta própria; também pode usar o seguinte para começar, se quiser.
Muito obrigado. Tenho uma sugestão: após colar, atualize (atualize) o buffer direcionado para ver os novos itens copiados.
Outra sugestão: para desmarcar os itens marcados após colar.
@Name Boas sugestões. Eu recomendo que você os implemente sozinho, já que você é quem o utilizará. Boa sorte.
O gerenciador de arquivos Ranger funciona da maneira que você descreve, mas é inspirado no vim (assim, as combinações yyde teclas do vim para puxar / copiar ppara colar etc). O Emacs também possui implementação de ranger. Experimente, talvez atenda às suas necessidades.
Eu, por mim mesmo, uso o emacs sunrise-commander, que é semelhante ao Midnight Commander (mc), sempre que sinto que preciso de um gerenciamento de arquivos com painéis duplos.
Upd: dired-ranger possui a cópia / colagem que você descreveu. Pelo menos nos documentos.
Existem dired-rangere estão rangerdisponíveis no MELPA. Você quer dizer qual?
bem, eu não sabia sobre dir-ranger, mas a partir da descrição, parece que você quer.
Eu também sugeriria usar dired-ranger. Isto é o que eu tenho no meu init.el:
O ranger dirigido era a verdadeira solução para mim:
Você pode obter um comportamento comum do explorador de arquivos conforme descrito, apenas com esta configuração simples (supondo que você use use-package):