Ins-conclusão de WORDs

13

<C-p>e <C-n>permitir a conclusão das palavras encontradas no documento atual.

Estou fazendo algumas anotações e escrevendo digamos {0,1}^ne (E,D)muitas vezes. Estas são PALAVRAS constituídas por várias palavras.

Existe uma maneira de concluir WORDs com <C-p>e <C-n>(ou outro ins-completioncomando relacionado )?

Gonçalo Ribeiro
fonte
1
Você pode estar melhor usando :abbreviate. Por exemplo, emita o :ab 01n {0,1}^ncomando. Então, toda vez que você digitar 01ncomo uma palavra independente no modo Inserir, ela será expandida para {0,1}^n.
200_success
@ 200_success, obrigado. Eu tinha pensado em abreviações, mas ainda queria saber se era possível ins-completion.
Gonçalo Ribeiro

Respostas:

5

Conclusão do modo de inserção com Ctrl-n

Não sei se você poderia concluir o WORD fora de escrever sua própria função (como onifuncional). No entanto, se você não se importa em expandir o que uma palavra corresponde aos seus caracteres, pode adicioná-los a 'iskeyword'

Por exemplo, meu 'iskeyword' é padronizado como

iskeyword=@,48-57,_,192-255

Em seguida, defino-o assim como os caracteres adicionais acima

:set iskeyword=@,48-57,_,192-255,{,},,,(,),^

Isso adiciona {, }, ,, (, ), e ^para os personagens que compõem uma palavra (para além do que já fez)

Depois disso, a digitação é {Ctrl-nconcluída em {0,1}^n(em um arquivo que contém apenas os dois exemplos que você deu)

Nota: Seria melhor fazer um :set iskeyword+=com apenas o material adicional, da seguinte maneira:

:set iskeyword+={,},,,(,),^

Dessa forma, você deixa quaisquer outras coisas que compõem uma palavra-chave anexando os novos caracteres à configuração existente.

Expansão com abreviações

Embora não faça parte da pergunta original, outra funcionalidade semelhante (ish) é usar a funcionalidade de abreviação do nvi ou do Vim. Ao contrário da conclusão da palavra-chave, as abreviações não precisam se parecer com o texto final. Além disso, diferentemente da conclusão de palavras-chave, as abreviações se expandem automaticamente, e não apenas quando você as solicita. Dependendo da sua meta e uso, isso pode economizar bastante digitação e digitar muito texto sem a interrupção da solicitação de conclusão.

As abreviações são boas para um pequeno conjunto de palavras-chave e quando você pode defini-las com antecedência (elas não são descobertas no seu texto, como ocorre com a conclusão de palavras).

A idéia básica por trás das abreviações é que você associe uma WORD a algum outro texto, e sempre que o editor detectar que você digitou essa WORD (ou seja, o texto digitado é cercado por espaço em branco, onde a ação de conclusão é adicionar o espaço em branco após a palavra-chave ou sair do modo de inserção), é substituída por esse outro texto.

Digamos que seu arquivo contenha {0,1}^nmuito e não haja outras variações. Digitar um pouco mais do que um dedo, talvez você queira apenas digitar 01nou myvalueexpandi-lo para {0,1}^n, mas apenas quando 01nou myvalueé uma palavra por si só (ou seja, se aparecer em outra palavra, não mude).

Em nvi, você pode fazer :abbrev 01n {0,1}^n. Você pode fazer o mesmo no Vim, mas recomendo usar :iabbrev 01n {0,1}^npara restringir a expansão ao modo de inserção.

Então, se você tiver algum texto (onde |representa o cursor)

We find that the value 01n|

E então você pressiona Escou Spaceou Tabmove os cursores, o texto é substituído e você tem (exemplo para usar o espaço)

We find that the value {0,1}^n |

e você pode continuar digitando sem interrupção.

Isso geralmente é usado para corrigir automaticamente erros de digitação comuns (por exemplo, alterar 'teh' para 'the'), mas pode ser igualmente útil para seu caso de uso, assumindo novamente que você não se importa em configurar os mapeamentos antes do tempo.

John O'M.
fonte
Para mim, parece que :set iskeyword+={,},,,(,),^funciona como esperado.
Karl Yngve Lervåg
1
De fato faz. Quando tentei pela última vez, o Vim continuou me dizendo que era um erro de sintaxe. Deve ter sido em outro lugar. Atualizando minha resposta.
John O'M.
@ JohnO'M. você poderia adicionar uma referência sobre como abbreviatepoderia ser mais adequado para este trabalho?
Gonçalo Ribeiro
@ GonçaloRibeiro feito. Espero que ajude.
John O'M.