Informação básica
O Vim não mostra a nova linha mais recente no buffer, mas na verdade o vim sempre coloca o EOL no final do arquivo quando você o escreve, porque é padrão para arquivos de texto nos sistemas Unix. Você pode encontrar mais informações sobre isso aqui . Em resumo, você não precisa se preocupar com a ausência de novas linhas no final do arquivo no vim.
Experiência 1
Você pode fazer este pequeno experimento para verificar esse comportamento. No terminal, execute:
$vim test_test
digite, por exemplo, apenas caractere 1
e salve o arquivo :w.
Você tem apenas um caractere no arquivo, certo? Na verdade não :) Agora você tem em seu arquivo 1
e LF
caracteres. Vamos verificar, com o utilitário hexdump:
$hexdump test_test
resultado:
0000000 31 0a
0000002
31
é código ASCII para caractere 1
e 0a
é código ASCII para LF
caractere não imprimível que, para o UNIX, como você já deve saber o código para final de linha.
Experiência 2
Mas e se abrirmos o arquivo que não possui eol
símbolo no final do arquivo. Vamos verificar também. Vamos criar um arquivo sem eol no final, por exemplo:
$echo -n "1" > test_without_eol
e então, novamente, vamos olhar para dentro com hexdump
$hexdup test_without_eol
a saída será:
000000 31
0000001
Portanto, não há eol
caracteres aqui. Vamos abrir este arquivo no vim:
$vim test_without_eol
Na parte inferior do editor, você verá:
"test_without_eol" [noeol] 1L, 1C
E se você salvar esse arquivo, o eol
caractere será colocado automaticamente.
O que podemos fazer sobre isso?
Se você realmente precisa ver o final do arquivo. Tente usar este comando:
:set listchars=eol:$
mostrará todos os eol
caracteres como $
sinal.
:set listchars=eol:$
O Vim omite o EOL apenas se o arquivo for aberto
'binary'
e a'endofline'
opção for redefinida (quando o arquivo binário não tiver um EOL ao abrir ou você redefinir explicitamente a opção). Em outras palavras, o Vim apenas honra um EOL ausente para arquivos binários. Para arquivos de texto, ele sempre grava com um EOL (adicionado). (É por isso que você precisa de soluções como o meu plugin PreserveNoEOL para manter arquivos de texto sem o EOL.) Você pode encontrar todos os detalhes em:help 'endofline'
.Portanto, você só precisa garantir a abertura do arquivo como não-binário para que o Vim grave automaticamente um EOL.
fonte
Como Alexander mencionou, o Vim não mostra EOL na EOF, é por isso que é tão confuso (especialmente com a nova linha vazia / em branco que é outra coisa), portanto, na verdade, ele grava todas as vezes no salvamento de arquivos.
Aqui está um teste simples de como testar se isso funciona:
Observe como o prompt do shell se comporta quando não há EOL (ele se mistura com a próxima linha). Ao salvar novamente o arquivo com o Vim, ele é adicionado.
Usando
wc
podemos contar linhas, palavras e caracteres antes de salvar e depois, para que possamos ver que ele realmente muda.Por que isso é tão importante? Para manter nossos arquivos compatíveis com POSIX .
fonte