3
votes

En .vimrc, fonction lorsque le curseur entre crochets / accolades et entrée est enfoncé

La question décrit en quelque sorte ce que j'essaie de faire. J'utilise actuellement

inoremap {{}

Pour placer le curseur entre les crochets. La prochaine chose que j'essaie d'obtenir est que si le curseur est entre et que vous appuyez sur Entrée, le résultat devrait être:

{ | <-curseur }

On dirait que ça devrait être simple, mais après quelques recherches sur Google, je n'ai pas trouvé de solution. (encore très novice en scripts vim)

vim

0 commentaires

3 Réponses :


1
votes

Vous pouvez enregistrer une macro ...

ii<esc>y"A$

Pour laisser la macro en mode insertion, vous pouvez l'ajouter à la macro

qai{<cr><cr>}<esc>ki<tab><esc>q

@a

Vous pouvez également essayer quelque chose comme ultisnips .


2 commentaires

Merci pour la suggestion. Je ne suis pas très familier avec les macros et leur enregistrement, donc j'essaye de m'en tenir au fichier .vimrc. En ce moment, j'utilise inoremap ko pour déclencher le résultat souhaité chaque fois que j'en ai besoin.


Une autre façon de faire est d'utiliser une carte normale: nnoremap {i { } ki . Ultisnips est cependant votre meilleur pari.



3
votes

Je déteste répondre à ma propre question, mais j'ai finalement compris:

inoremap <expr> <CR> pumvisible() ? "\<CR>" : "\<Esc>:call Checkcursor()\<CR>"
function! Checkcursor()
  let b:letters = strcharpart(getline('.')[col('.') - 1:], 0, 2)
  if b:letters == '{}'
    call feedkeys("li\<CR>\<Esc>\ko", "n")
  else
    call feedkeys('o')
  endif
endfunction


0 commentaires

3
votes

Ce que j'ai dans lh-brackets pourrait être résumé comme

inoremap <expr> <cr> getline(".")[col(".")-2:col(".")-1]=="{}" ? "<cr><esc>O" : "<cr>" 


1 commentaires

Beau et fait exactement quand j'avais besoin ... ET n'interfère pas avec omni-complet!