Posso ignorar arquivos de ponto com a conclusão da guia cmd.exe?

3

Eu infelizmente preciso trabalhar com o cmd.exe de tempos em tempos e ele geralmente não me incomoda muito, exceto quando eu estou editando um arquivo no vim e então tento rodar esse arquivo com o término da tabulação.

Se eu tiver o arquivo foo.py aberto no vim, .foo.py.swp também existirá no diretório. O comportamento que vejo é:

C:\foo> f[TAB]
C:\foo> .foo.py.swp[TAB]
C:\foo> foo.py

Isso é bastante irritante e eu estou querendo saber se existe alguma maneira de evitar esse comportamento curto de uma solução completa, como alterar minha nomeação de arquivo de troca ou usando o PowerShell. Eu notei que o PowerShell não emula esse comportamento, mas eu realmente não quero usá-lo.

    
por djs 13.09.2010 / 01:37

2 respostas

3

O Windows está se comportando exatamente como você esperaria se pensasse (e para ser honesto, até ver sua pergunta, eu não tinha pensado nisso completamente). Um nome de arquivo que começa com um '.' é visto como um arquivo com um nome de arquivo nulo com uma extensão. Para ver como isso funciona, crie um diretório e crie os seguintes arquivos usando touch (suponho que você esteja familiarizado com touch ):

touch .a.aaa
touch a.aaa
touch .b.bbb
touch b.bbb

Agora, nesse diretório, use a tecla tab para percorrer os arquivos e você verá que a sequência é:

.a.aaa
.b.bbb
a.aaa
b.bbb

Se você quiser percorrer os arquivos 'a', digite 'a' antes da aba e você terá uma .a.aaa previsível, a.aaa .

Quanto ao caracter _ em um nome de arquivo, ele é igual a qualquer outro caractere e classifica após 'Z'.

    
por 13.09.2010 / 02:11
1

A semântica de FindFirstFile (o que o CMD usa para enumerar arquivos correspondentes) significa que o padrão é testado em relação ao nome de arquivo longo (o que você gostaria de ver) e também ao nome de arquivo "8.3" gerado automaticamente. A geração de nomes curtos é o que está causando suas correspondências espúrias.

Você pode desativar a geração 8.3 via FSUTIL, mas isso interrompe a geração FAST e não remove nomes já existentes. Você teria que executar um script que faria renomeados para removê-los totalmente.

Isso é perigoso, no entanto, uma vez que alguns programas não têm noção e escreverão os atalhos de nome autogerado (digamos que você esteja usando um instalador de 16 bits, como versões antigas do MSOFFICE). Se você desativar sua geração, esses instaladores poderão falhar.

    
por 22.09.2010 / 23:25