Se você está bem em fazer uma pequena função em vez de uma pequena macro, eu proporia o seguinte:
function! AppendString(string)
if getline('.') !~ a:string.'$'
let original_cursor_position = getpos('.')
exec("s/$/".a:string."/")
call setpos('.', original_cursor_position)
endif
endfunction
A posição do cursor é obtida usando getpos()
e depois é recuperada com setpos()
.
Esta função pode acrescentar qualquer string que você queira. Também verifica se a linha já tem a string desejada no final, caso em que não faz nada.
Você pode definir mapas de teclado que usam essa função que são úteis para idiomas diferentes:
" in ftplugin/cpp.vim
nnoremap <silent> <LocalLeader>; :call AppendString(";")<CR>
ou
" in ftplugin/python.vim
nnoremap <silent> <LocalLeader>: :call AppendString(":")<CR>