Conclusão de guias parecidas com Zsh

11

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 :eou :cd?

Existem outros recursos úteis relacionados ao caminho no zsh, como usar cd foo barpara mover para um caminho equivalente com foosubstituído por bar(ou seja, /blah/foo/baz/yadatorna-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.

muru
fonte
11
Não estou ciente de nada que atinja exatamente o que você está perguntando, mas existem vários localizadores de arquivos difusos que permitem abrir arquivos de maneira semelhante. Eu sou a favor do CtrlP, mas também há o Command-T e tenho certeza que há outros dos quais estou esquecendo o nome.
Rich
11
@ Rich Desde que eu não tenha que esmagar Tab uma dúzia de vezes, ficaria feliz.
muru
Já existe uma pergunta semelhante no SO.
Romainl

Respostas:

6

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:

  1. :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 /usre 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.
  2. :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.
Dhruva Sagar
fonte
11
/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.
Muni
@muru, você está certo, não é um substituto para o zsh, mas ainda é melhor do que ter que digitar tudo sozinho, é tornar mais fácil, **é terrivelmente lento, mas funciona bem para projetos regulares. :bé para o buffer aberto existente, é por isso que o uso de sessões ajuda.
Dhruva Sagar
5

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.

Rico
fonte