Pergunta

Recentemente comecei a usar o Vim como meu editor de texto e atualmente estou trabalhando em minhas próprias personalizações.

Suponho que os mapeamentos de teclado possam fazer praticamente qualquer coisa, mas por enquanto estou usando-os quase exclusivamente como uma espécie de recurso de snippets.

Então, por exemplo, se eu digitar def{TAB} (:imap def{TAB} def ():<ESC>3ha), ele se expande para:

def |(): # '|' represents the caret

Isso funciona como esperado, mas acho irritante quando o Vim espera por um comando completo enquanto digito uma palavra contendo "def" e não estou interessado em expandi-lo.

  • Existe uma maneira de evitar isso ou usar essa função de forma mais eficaz para esse fim?
  • Algum outro recurso do Vim é mais adequado para isso?

Depois de dar uma rápida olhada SnippetsEmu, parece que é a melhor opção e muito mais fácil de personalizar do que eu pensava.

Para continuar com o exemplo anterior:

:Snippet def <{}>():

Uma vez definido, você pode expandir seu snippet digitando def{TAB}.

Foi útil?

Solução

SnippetsEmu é um plugin de snippets útil.

Outras dicas

Snipmate - como texmate :)http://www.vim.org/scripts/script.php?script_id=2540

vídeo:http://vimeo.com/3535418

snippet def 
     """ ${1:docstring} """
     def ${2:name}:
         return ${3:value}

Como outra sugestão (embora um pouco diferente) usando a funcionalidade integrada do vim:

:iabbrev def def(): #<LEFT><LEFT><LEFT><LEFT><LEFT>

Agora, sempre que você digitar def seguido por um espaço ou outro caractere que não seja de palavra, ele será expandido para o mesmo que você forneceu como saída de SnippetsEmu (o espaço vem do espaço que você inseriu para acionar a conclusão).

Essa abordagem não sofre o problema de "atraso" que você encontrou ao usar :inoremap e está integrada ao vim.Para obter mais informações sobre esse recurso, consulte :help abbrev.

Você pode estar preocupado com o fato de ser acionado por espaço e não por guia, ele será acionado desnecessariamente, mas em geral o vim é bastante inteligente sobre quando acioná-lo.O problema também pode ser mitigado ativando a abreviação apenas para determinados tipos de arquivo (por exemplo, python):

au filetype python :iabbrev ... etc

Snip[ets] (Manager|Emu|Mate|.vim) também é, obviamente, uma solução perfeita, mas é bom estar ciente das alternativas (especialmente quando elas estão integradas).

Se o SnippetsEmu for muito pesado ou ambicioso para o que você precisa (era para mim), escrevi um plugin que gerencia snippets com base no tipo de arquivo.Ele ainda possui preenchimento de guia ao escolher o snippet!:)

Venha aqui: trechos.vim

Acabei de instalar UltiSnips.Há um bom artigo que explica por que você pode escolher o UltiSnips: Por que UltiSnips?

Não usei nenhum dos outros plug-ins de snippet;Decidi arriscar com um que parecesse completo e fosse capaz de me acomodar à medida que eu ganhasse mais habilidades no Vim e quisesse fazer coisas mais sofisticadas.

Conforme observado pelo MDCore, SnippetsEmu é um script Vim popular que faz exatamente isso e muito mais.Se você precisar apenas expandir (sem mover o cursor para trás), poderá usar o padrão :ab[breviate] comando.

:ab[breviate] [<expr>] {lhs} {rhs}
        add abbreviation for {lhs} to {rhs}.  If {lhs} already
        existed it is replaced with the new {rhs}.  {rhs} may
        contain spaces.
        See |:map-<expr>| for the optional <expr> argument.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top