Sem entrar nas complexidades das capacidades do terminal e dos códigos de escape, confirmo o que você já descobriu: o terminal está tentando fornecer uma maneira de distinguir entre uma tecla de entrada modificada e não modificada.
Edit: Correção, parece que quando o Vim coloca o terminal Mintty em um modo "raw" ele vê Shift + Digite como um byte nulo e o exibe como ^@
quando você o preceder com Controle + v , mas de outra forma o trata como uma nova linha. p>
Existem várias maneiras de resolver esse problema. Uma é usar o Mintty do Cygwin, que não envia nada de especial com Shift + Enter . Tem outras vantagens sobre o terminal de estoque também.
No entanto, uma solução "rápida e suja" é simplesmente adicionar algo assim ao seu ~/.vimrc
na máquina remota:
:imap <esc>[13;2u <CR>
A desvantagem disso é que, a partir desse ponto, toda vez que você pressionar "sair", ele não sairá do modo de inserção até você começar a usar comandos de movimento ou o intervalo de tempo limite do mapa expirar. Veja " :help 'timeout'
" e as seguintes entradas relacionadas.
A outra solução pode não ser viável (e pode não resolver o problema de fato), mas é para garantir que sua variável TERM esteja configurada corretamente em seu shell Cygwin antes de você ssh, e no shell remoto depois de ssh, e que eles combinam, ou eles são suficientemente semelhantes. (Você nunca deve ter uma configuração TERM=<anything>
incondicional nos arquivos de configuração do shell.)