Acabei de fazer um breve teste:
$ echo vim test > vimtest
$ ls -i vimtest
35149 vimtest
$ vim vimtest
<dG, :wq>
$ ls -i vimtest
35148 vimtest
Note que vimtest
tem um inode-number diferente depois de editá-lo, e é, portanto, um arquivo diferente (embora com o mesmo nome do arquivo antigo).
Então, quando você edita o arquivo com o vim, ele apaga o arquivo antigo e cria um novo com o mesmo nome. O problema que você está vendo é causado pelo fato de o Apache ainda estar gravando no arquivo antigo (excluído) (você pode verificar isso com lsof
).
Se você realmente deseja truncar um arquivo de log, considere truncate -s 0 /path/to/file.log
(que parece truncar no local)