Na documentação de ajuda do Vim:
help :call
--snip--
When a range is given and the function doesn't handle it
itself, the function is executed for each line in the range,
with the cursor in the first column of that line. The cursor
is left at the last line (possibly moved by the last function
call). The arguments are re-evaluated for each line.
Parece que, como você está selecionando (realçando) um bloco de linhas e pressionando C-P, sua função é executada várias vezes para esse bloco, uma vez para cada linha selecionada.
Eu imagino que você precisará implementar a manipulação de faixas dentro de sua função para evitar a execução múltipla fornecida (!) pela função: call.
O restante da documentação de ajuda da função de chamada discute como lidar com intervalos e evitar esse problema.