Você pode usar o seguinte mapeamento:
cnoremap <expr> <CR> getcmdtype() == '/' ? '<CR>zz' : '<CR>'
O que pode ser explicado assim:
cnoremap Crie um mapeamento no modo de linha de comando
<expr> O mapeamento avaliará uma expressão (permitindo usar condições)
<CR> A chave para remapear ( Enter)
getcmdtype() Retorna um caractere indicando qual modo de linha de comando é usado
== '/' Será que getcmdtype()retornou /que significa que estamos em modo de pesquisa?
'<CR>zz' Se estivermos no modo de busca, execute zzapós pressionar<CR>
'<CR>' Senão executar apenas <CR>
Tópicos de ajuda relacionados:
EDITAR Observe que seria interessante criar um mapeamento que funcionasse com a pesquisa para frente e para trás, ou seja, quando getcmdtype()retornar /ou ?. Aqui está o mapeamento para fazer isso:
cnoremap <expr> <CR> (getcmdtype() == '?' \|\| getcmdtype() == '/') ? '<CR>zz' : '<CR>'
Observe o escape dos |caracteres: se eles não forem escapes, o vim entenderá cnoremap <expr> <CR> (getcmdtype() == '?'como o primeiro comando a ser executado, seguido pelo getcmdtype() == '/') ? '<CR>zz' : '<CR>'qual não faz sentido e cria um erro.
EDIT 2 @Antony sugeriu uma solução mais legível, graças a ele:
cnoremap <expr> <CR> getcmdtype() =~ '[/?]' ? '<CR>zz' : '<CR>'
getcmdtype() =~ '[?/]'fosse um pouco mais fácil.