Completar código de forma Bash no vim?

3

Atualmente, estou usando o superTab para finalizações no Vim. No entanto, eu gostaria que as conclusões fossem mais como bash. Por exemplo, se eu estiver digitando

st

e as possíveis conclusões são

struct, string

Eu gostaria que ele fosse concluído para str se eu pressionar a guia e, idealmente, exibir um menu de possíveis conclusões.

Plugins estão OK.

    
por Alexander Duchene 29.03.2013 / 05:42

3 respostas

2

Eu acho que o seguinte plugin faz o que você está pedindo: YouCompleteMe

A partir da descrição:

YouCompleteMe is a fast, as-you-type, fuzzy-search code completion engine for Vim. It has two completion engines: an identifier-based engine that works with every programming language and a semantic, Clang-based engine that provides semantic code completion for C/C++/Objective-C/Objective-C++ (from now on referred to as “the C-family languages”).

    
por 01.04.2013 / 06:23
1

Colocando %código% acaba por fazer o truque, principalmente. Infelizmente, digitando mais texto, pressione a guia novamente para fazer uma conclusão completa, em vez de dar o próximo prefixo comum mais longo.

    
por 29.03.2013 / 05:55
0

Com base na resposta de Alexander, eu tenho algo parecido com essas linhas no meu .vimrc

"unix like completion - longest substring
set completeopt+=longest
"add command to retrigger longest substring
"Naive version... see below
inoremap <C-m> <C-e><C-n>

Assim, o bit "mais longo" faz a maior parte do trabalho, no entanto, as pressões subsequentes de <C-n> começarão a percorrer as opções. Se você pressionar <C-e> (e), o preenchimento automático, acionando-o novamente com <C-n> , corresponde à próxima subcadeia mais longa ... adicionar um atalho para isso impede que você tenha que pressionar duas teclas ....

Você não deseja vincular isso a <C-n> , pois isso fará com que você pare de pedalar de maneira familiar

Eu escolhi M como está ao lado de N e a verificação ( :h insert-index ) é padronizada apenas para same as <CR> .... porque isso é vim e nada é fácil, acontece que isso significa que vim não é possível distinguir entre os dois pressiona as teclas !

Se você não se importa em usar <C-m> , escolha outra coisa, caso contrário, leia ...

Com base nessa outra postagem, adaptei a resposta na parte inferior e limpei um pouco a sintaxe (com base no )

Acabei com isso:

"add command to retrigger longest substring
inoremap <expr> <C-M> pumvisible() ? "\<C-e><C-n>" : "\<C-m>"

pumvisible () retorna um sinalizador que diz se o menu pop-up está aberto. Isso nos impede de alterar o comportamento da tecla enter no modo de inserção quando o menu pop-up não está aberto.

Infelizmente não consigo encontrar nenhuma documentação para o? e: e por que temos que passar strings.

    
por 01.12.2017 / 17:51