Ultimamente tenho usado o wsl
comando para executar binários e comandos do Linux (Ubuntu) no powershell.
Por exemplo:
ls | wsl grep 'log'
Eu estava tentando usar o vim para abrir um arquivo chamado .htaccess
, mas não queria digitar o nome completo do arquivo. Então, em vez disso, apenas digitei wsl vim .ht
e pressionei tab para que o powershell completasse automaticamente o caminho. Este preenchimento automático wsl vim .\.htaccess
parecia bom, mas quando pressionei enter, o vim abriu um novo arquivo chamado ..htaccess
(observe o ponto adicional). Foi quando percebi que estava usando o separador de diretório do Windows de barra invertida em vez de barra. Presumivelmente, a barra invertida acabou de escapar do ponto e é por isso que no vim ele estava tentando criar um novo arquivo chamado ..htaccess
.
Eu queria saber se existe alguma maneira de ajustar o powershell para que ele use barras para preenchimento automático de caminho em vez de barra invertida. Eu sei que ultimamente o Windows entende e traduz barras.
Por exemplo, este comando funciona no powershell:
cd C:/Windows
Embora o Windows use barra invertida, esse comando funcionou e me levou ao C:\Windows
. Então, existe uma maneira de fazer o preenchimento automático usar a barra?
Eu tento evitar "respostas negativas", mas às vezes não há muita escolha. No momento, não consigo pensar em nenhuma boa maneira de fazer isso. Houve uma solicitação de problema/recurso do Github para isso no início deste ano, e a equipe do PowerShell PSReadLine respondeu com "conforme projetado".
Apenas no caso, porém, examinei as
Get-PSReadLineOption
opções disponíveis, mas não há opção para o separador de caminho lá.Há
[IO.Path]::DirectorySeparatorChar
, mas como um comentário nesta resposta aponta, é somente leitura.Ao considerar alternativas possíveis, não consegui pensar muito:
Pode haver uma maneira de envolver uma função do PowerShell em sua
wsl
chamada de maneira genérica o suficiente para lidar com comandos diferentes. A função precisaria analisar os argumentos e executar umwslpath
comando em qualquer caminho.O
wslpath
comando é instalado por padrão em algumas distribuições WSL (Ubuntu, pelo menos) e pode ser instalado em outras por meio do pacote wslu .Por exemplo,
wslpath "C:\\"
retornos/mnt/c
Mas também entramos em questões de citação de barra invertida dupla, etc. Por fim, descartei isso como muito hacky e provavelmente muito "frágil".
Eu acredito que você poderia lidar com isso em um .NET
ArgumentCompleter
para owsl
comando. Eu escrevi um que lida com os vários sinalizadores para o comando WSL que você pode usar como base.Só não tenho certeza de quão difícil seria reescrever o completor para arquivos/diretórios, mas tenho a sensação de que não vale a pena o esforço.