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}^n
muito e não haja outras variações. Digitar um pouco mais do que um dedo, talvez você queira apenas digitar 01n
ou myvalue
expandi-lo para {0,1}^n
, mas apenas quando 01n
ou 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}^n
para 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.
:abbreviate
. Por exemplo, emita o:ab 01n {0,1}^n
comando. Então, toda vez que você digitar01n
como uma palavra independente no modo Inserir, ela será expandida para{0,1}^n
.