Em zsh
, o cd
comando tem uma forma de dois argumentos: cd OLD NEW
muda para ${PWD/OLD/NEW}
. Com o novo sistema de conclusão de estilo, o zsh é capaz de concluir NEW
: o segundo argumento é concluído com base no que OLD
pode ser substituído para obter um diretório existente. Mas o primeiro argumento é concluído apenas em diretórios existentes.
Como posso fazer com que o zsh ofereça conclusões possíveis OLD
, além de concluir os diretórios existentes?
Por exemplo, se o diretório atual for /path/to/foo
e também houver diretórios /also/to/foo
e /path/to/foo/prime
, em seguida, cd p
Tabconclua p
para prime
. Se pretendo executar cd path also
, gostaria que o zsh também oferecesse path
como conclusão. Quão?
Usar valores já digitados do segundo argumento para limitar as possibilidades do primeiro argumento seria uma vantagem, mas concluir o primeiro argumento de forma independente também seria bom.
fonte
cd p also <Tab>
oucd p also <left arrow x 5> <Tab>
?cd p also<Left*5><Tab>
: se eu pressionar<Tab>
enquanto o cursor estiveralso
, esperoalso
que seja concluído, nãop
.cd t<tab>
, ele deve oferecerth/to/foo/prime
eto/foo/prime
? Ou deveria apenas limitar-se aos limites do diretório?Respostas:
Eu acho que você pode adicionar os componentes de
$PWD
àcd
lista de conclusão, embora isso pareça exigir mexer com_cd
; ou seja, uma versão personalizada de_cd
deve aparecer primeiro$fpath
.Em seguida, no topo de
~/zcomp/_cd
adicionar uma funçãoe, logo antes da
_alternative
linha, adicione o que retorna à lista de alternativasembora isso sempre adicione os
pwd
componentes àscd
conclusões:com lógica adicional, você só pode adicionar os
$PWD
componentes quando já existe um segundo argumento em vez de sempre.Contudo! Isso sempre atrapalha a
cd
conclusão e exige que façamos um patch na_cd
conclusão inicial. Outra opção seria criar um novo nome para a função fornecida pelo two-argcd
, talvez chamadocdsub
, e ter apenas a conclusão dosPWD
componentes para isso. Adicione isto a~/.zshrc
E então uma
_cd
conclusão_cdsub
estripada para ser colocada em algum lugar$fpath
:fonte