Como crio automaticamente chaves correspondentes no vim?
Esse problema não é trivial, como você verá. A resposta simples é: Use um plugin, como autoclose ou smartinput . Apenas remapeando ingenuamente (as teclas [.. apresentarão algumas bordas em algumas linhas, é por isso que esses plugins são feitos e por que eles geralmente são bastante complexos (se são bons).
Então usei o UltiSnips para inserir a chave de fechamento
Você pode tentar fazer isso (que é diferente da minha sugestão original):
inoremap ( ()<CR>=UltiSnips_Anon('$1)$0', ')')<CR>
Onde o UltiSnips dividirá a linha em (
vez de incluir main
na partida. O problema com o uso de um plug-in de snippet para isso é que eles (geralmente) não suportam aninhamento; portanto, esquecerão todas as posições de salto quando o próximo snippet (aninhado) for inserido.
Para pular para fora do par de chaves, a combinação Ctrl-jé usada.
Você pode remapear Ctrl-jpara o UltiSnips ou o plugin conflitante. Se os mapeamentos não estiverem listados na documentação, você pode usar :map/imap/nmap <key>
para mostrar o mapeamento. Se você deseja Ctrl-jescolher e executar o trabalho de ambos os plugins, está solicitando:
- algo muito mais avançado do que eu imagino que você possa pensar
- algo que eu suspeito que você realmente não quer
Considere este loop bash:
while (( ${arr1[i]} < ${arr2[i<CURSOR>]} )); do
[next_snippet_position_marker]
done
Nesse caso, você precisará pressionar Ctrl-j5 vezes para chegar ao corpo do loop. Usar as chaves de fechamento para pular para fora de um par correspondente oferece muito mais controle sobre onde você realmente deseja que o cursor se mova. Você pode implementar uma pilha para acompanhar os pares inseridos e usá Ctrl-j-los para mover e mover, mas depois terá problemas se começar a excluir manualmente os aparelhos sem removê-los da pilha. Então você começará a resolver problemas que os plug-ins estão tentando resolver. É uma roda difícil de reinventar.
Expandindo isso, você pode obter o que solicitou inicialmente, usando Ctrl-jpara pular de chaves e trechos. Se você usar algum valor fictício para representar as posições dos trechos e empurrá-los para a pilha, além das chaves de fechamento, com o remapeamento dinâmico de Ctrl-jpara corresponder à entrega de trechos ou chaves. Mas você precisará implementar algumas heurísticas bastante avançadas para descobrir qual mágica deve acontecer, já que você está enfrentando dois problemas ao mesmo tempo, que estão sendo resolvidos pelos criadores dos plug-ins de inserção de trechos e plug-ins de correspondência separadamente, e resolvendo esses problemas novamente, além de suas soluções, para obter comodidade e, bem, mágica.
Tudo se resume ao controle versus conveniência. Eu acho que o controle irá atendê-lo melhor nesse caso, o que significa que você deve manter esses problemas e seus plugins e chaves associados separados. Se você ainda quer conveniência, é factível, mas é difícil.
)
, remapearc-j
para isso pode funcionar.