A partir das questões de comentário, mesmo que a pergunta indique que "a codificação está definida para utf-8", parece que a codificação do Vim NÃO está definida para utf-8. Ainda é latin1 (ISO-8859-1). Isso significa que o Vim não sabe como representar esses caracteres especiais na memória, nem os salva em um arquivo.
Para o Vim escrever corretamente caracteres "especiais", ele precisa de duas coisas:
- Uma configuração de 'codificação' que pode representar esse caractere na memória, geralmente utf-8
- Um valor vazio ou uma configuração que pode representar esse caractere em disco para "codificação de arquivo". Geralmente isso também é utf-8 ou vazio.
Para corretamente ler um arquivo contendo esses caracteres, o Vim novamente precisa dessas duas coisas. O Vim pode detectar automaticamente o valor adequado para 'codificação de arquivo', se a opção 'codificações de arquivo' estiver definida corretamente.
'fileencodings' é uma lista separada por vírgula que diz ao Vim (em ordem) quais codificações tentar. "ucs-bom" como nos comentários em sua pergunta detectará unicode, mas somente se houver uma BOM (marca de ordem de byte). Além disso, como a "codificação" do seu Vim ainda é "latin1", não faria bem a você de qualquer maneira se o Vim DID detectasse unicode.
Observe que tanto a 'codificação' quanto as 'configurações de arquivo' devem estar muito próximas da parte superior do seu .vimrc, antes de qualquer mapeamento, menu, opção de string ou configuração de registro. Caso contrário, o texto existente nessas áreas será mal interpretado pelo Vim.
Veja a ajuda para cada uma destas opções, e a página wiki em configurando o Vim para Unicode , para detalhes.
Se o Vim não detectar corretamente a codificação em alguns arquivos, mesmo com as configurações corretas, você poderá:
- Definir manualmente, como
:e ++enc=utf-8 myfile.txt
- Instale um plug-in do Vim que detectará automaticamente a codificação de arquivos