Vim usa codificação errada ao invocar comandos no terminal

Vim usa codificação errada ao invocar comandos no terminal

Estou usando o Vim (GVim, para ser mais preciso) no Windows 8 e quero compilar com o usual :!g++ %, mas o nome do diretório onde meu arquivo está armazenado tem acentos e o Vim parece ter problemas com eles.

Aqui está o resultado da invocação :!g++ "%"(o Vim não parece adicionar aspas ao redor do caminho do arquivo atual nem escapa de espaços):

O comando de invocação usa codificação errada

Para maior clareza, o caminho completo para o arquivo mostrado éE:\Programación\Problemas algoritmos\(ns) ACM-ICPC Live Archive 2088 - Entropy.cpp

Quando eu uso o Vim (em vez do GVim), os acentos parecem ser tratados corretamente, mas ele ainda adiciona um \before (e ), então o comando invocado se parece com

g++ "E:\Programación\Problemas algoritmos\\(ns\) ACM-ICPC Live Archive 2088 - Entropy.cpp"

Executando esses comandos

:set encoding?
:set termencoding?

Nos programas do Vim

encoding=latin1
termencoding=cp850

Mas nos programas GVim

encoding=latin1
termencoding=

Como eu poderia resolver isso?

EDITAR:

Já tentei com as seguintes linhas em _vimrc:

set encoding=latin1
set termencoding=cp850

Parece que o verdadeiro problema não está nos acentos, mas nos parênteses. Por exemplo, funciona com, áéíóú.cppmas não com(a).cpp

Responder1

Acho que a maneira correta de resolver isso seria definir seu termencoding em seu .vimrc. No entanto, se você realmente não conseguir fazer isso funcionar, talvez seja possível contornar isso do outro lado. Você pode definir a codificação do seu shell cmd.exe usando o chcpcomando. Por exemplo, isso pode funcionar, mas não testei:

:!chcp cp1252 & g++ "%"

Codepage 1252 é um superconjunto de ISO-8859-1 (latin1) que seu Vim aparentemente está usando para codificação.

informação relacionada