Relacionado a Tab-complete parcial tab-complete para nomes de arquivos no Vim
Uma das características realmente fantásticas zsh
é que você pode digitar, por exemplo ls /u/s/m/m/who.1
, pressionar Tabe concluir
ls /usr/share/man/man1/who.1.gz
. Depois de se acostumar com isso, é realmente irritante voltar /u<tab>/s<tab>/m<tab>/m<tab>...
, especialmente quando todo o caminho parcial só pode resolver um caminho real, mas cada componente individual pode ter várias conclusões. Isso pode ser alcançado no Vim, por exemplo, ao usar :e
ou :cd
?
Existem outros recursos úteis relacionados ao caminho no zsh, como usar cd foo bar
para mover para um caminho equivalente com foo
substituído por bar
(ou seja, /blah/foo/baz/yada
torna-se /blah/bar/baz/yada
). Se houver uma solução que as traga também (essencialmente entregar tarefas relacionadas ao shell para um shell que faça isso muito bem), seria ótimo.
Respostas:
Eu costumava usar CtrlP e outros plugins relacionados muito antes, até descobrir verdadeiramente os poderes nativos do vim. Deixe-me explicar algumas maneiras de fazer isso sem exigir um plug-in externo:
:e
, o interessante de: e é que você pode fazer algo como:e /u*/s*/m*/m*/<Tab>
e o vim expandirá isso automaticamente para você:e /usr/share/man/man
. Isso é muito mais curto e simples do que o que você postou, mas uma maneira ainda melhor é fazê-lo:e /usr/**/man<Tab>
, assim ele parecerá recursivamente abaixo/usr
e listará todos os caminhos correspondentes. Isso pode levar tempo, dependendo do tamanho do conjunto, mas de uma maneira projetar isso funciona maravilhas porque você pode fazer algo assim:e ap**/jav**/user<Tab>
e ele concluirá todos os caminhos incompletos e fornecerá uma lista de caminhos correspondentes e funciona super bem.:b
, Para abrir buffers existentes. Isso é realmente poderoso, porque aceita parciais por padrão, para que você possa fazer algo assim:b usr*man<Tab>
e ele completará o nome do arquivo se já tiver sido carregado na lista de buffers. Isso é especialmente bom porque é quase instantâneo e muito rápido. Também uso muito as sessões do vim, com a ajuda do tpope / vim-obsession e dhruvasagar / vim-prosession , que mantém todos os arquivos que eu abro na lista de buffers e eles estão disponíveis mesmo que eu exista o vim e volte a ele a partir do diretório diretório do projeto.fonte
/u*/s*/m*/m*/<Tab>
é como eu costumava trabalhar com o bash. Não substitui o zsh por uma milha./usr/**/man<Tab>
é terrivelmente lento quando você tem todo o sistema de arquivos aberto, mas pode ser útil para pequenos projetos. A menos que eu entenda mal:b
, não é para abrir novos arquivos.**
é terrivelmente lento, mas funciona bem para projetos regulares.:b
é para o buffer aberto existente, é por isso que o uso de sessões ajuda.O vim-zsh-path-complete pretende fazer exatamente o que você está pedindo (a primeira parte, pelo menos), mas eu nunca tentei. (Eu nem tinha ouvido falar dele até que o romainl estava vinculado a uma resposta do SO por seu autor , embora sua documentação também mencione várias limitações.
Além disso, existem vários localizadores de arquivos difusos que alcançam algo semelhante para abrir arquivos.
Meu plugin preferido para isso é CtrlP . Quando usado para abrir arquivos, ele procura por arquivos cujos caminhos completos contenham os caracteres digitados na ordem correta - você não precisa digitar partes de todos os componentes do caminho (e todos os separadores de caminho) conforme necessário. tem no seu exemplo, mas funciona perfeitamente bem se você o fizer. Ele também usa a mesma interface para abrir arquivos usados recentemente, buffers atualmente abertos e muito mais.
Por padrão, ele mapeia
<c-p>
no modo normal para abrir o prompt CtrlP. O prompt exibe uma lista de arquivos, que é reduzida à medida que você digita caracteres. Você pode pressionar Entera qualquer momento para abrir o arquivo selecionado no momento ou usar<c-k>
e<c-j>
para mover a seleção para cima e para baixo na lista de arquivos correspondentes no momento.Outra alternativa popular é o Command-T , mas eu sou a favor do CtrlP porque é implementado no VimScript; O Command-T possui um componente Ruby.
fonte