How do I automatically create matching braces in vim?
Esse problema não é trivial, como você verá. A resposta simples é: use um plug-in, como autoclose ou smartinput . Apenas ingenuamente remapeando as teclas (.. .. irá apresentá-lo com edgicases em um par de linhas, é por isso que esses plugins são feitos, e porque eles geralmente são bastante complexos (se eles são bons).
So I used UltiSnips to insert the closing brace
Você pode tentar isso (que é diferente da minha sugestão original):
inoremap ( ()<CR>=UltiSnips_Anon('$1)$0', ')')<CR>
Onde o UltiSnips dividirá a linha em (
em vez de incluir main
na correspondência. O problema com o uso de um plugin de snippet para isso é que eles (geralmente) não suportam aninhamento, então eles irão esquecer qualquer posição de salto quando o próximo snippet (aninhado) for inserido.
To jump out of the brace pair the combination Ctrl-j is used.
Você pode remapear Ctrl-j para o UltiSnips ou o plugin conflitante. Se os mapeamentos não estiverem listados na documentação, você poderá usar :map/imap/nmap <key>
para mostrar o mapeamento. Se você quiser Ctrl-j para escolher e fazer o trabalho de ambos os plugins, você está pedindo:
- algo muito mais avançado do que suspeito que você possa pensar
- algo que eu suspeito que você realmente não quer
Considere este loop do bash:
while (( ${arr1[i]} < ${arr2[i<CURSOR>]} )); do
[next_snippet_position_marker]
done
Nesse caso, você precisará pressionar Ctrl-j 5 vezes para chegar ao corpo do loop. Usar as chaves de fechamento para saltar de um par correspondente dá a você muito mais controle de onde você quer que o cursor se mova. Você poderia implementar uma pilha para manter o controle dos pares inseridos e usar Ctrl-j para abrir e mover, mas você terá problemas se começar a excluir manualmente as chaves sem removê-las da pilha. Então você vai começar a resolver problemas que os plugins estão tentando resolver. Esta é uma roda dura para reinventar.
Expandindo isso, você pode obter o que inicialmente pediu, usando Ctrl-j para pular fora das chaves e . Se você usar algum valor fictício para representar posições de trechos e empurrá-los para a pilha além das chaves de fechamento, com o remapeamento dinâmico de Ctrl-j para corresponder ao trecho de trechos ou chaves. Mas você precisará implementar algumas heurísticas razoavelmente avançadas para descobrir qual mágica deve acontecer, já que você está essencialmente assumindo dois problemas de uma só vez, o que está sendo resolvido pelos criadores de plugins de inserção de trechos e suporta os plugins correspondentes separadamente. re-resolvendo estes problemas novamente, em cima de suas soluções, para conseguir conveniência e, bem, magia.
Tudo depende do controle versus conveniência. Eu acho que o controle irá atendê-lo melhor neste caso, o que significa que você deve manter esses problemas e seus plugins e mapeamentos associados separados. Se você ainda quer conveniência, é factível, mas é difícil.