Gostaria de executar um autocmd nos seguintes cenários ao iniciar o Vim:
- Sem nenhum nome de arquivo especificado.
- Quando o arquivo é novo.
- Quando o arquivo existe, mas está completamente em branco.
Nos três casos acima, eu gostaria de executar um autocmd; especificamente, gostaria de iniciar o modo de inserção automaticamente apenas para os cenários acima (e não quando estou abrindo um arquivo que já existe e não está em branco).
ATUALIZAR:
Eu tentei colocar o seguinte no meu _vimrc
, mas sem sorte (além disso, não tenho certeza se existe uma função no vim que conte o número de caracteres em um arquivo (para ver se é zero) antes de abri-lo:
if @% == "" || filereadable(@%)
autocmd BufRead,BufNewFile * startinsert
endif
vimrc
insert-mode
autocmd
John Sonderson
fonte
fonte
normal
vez deexec
.if
instrução não deve estar ao redor do autocmd, se estiver dentro do autocmd, para que seja executada toda vez que o autocmd for acionado.Respostas:
Isso funciona para todos os três casos para mim:
Provavelmente, isso pode ser condensado apenas na última verificação de um arquivo vazio, já que nenhum nome de arquivo ou arquivo que não existe geralmente inicia como buffers vazios. No entanto, provavelmente é possível que algum outro plug-in preencha algumas coisas em um dos dois primeiros casos (como alguns plug-ins de modelo), portanto, é melhor verificar os três.
O primeiro teste que você já teve.
O segundo teste precisa verificar
filereadable
o valor de zero (não existe) para decidir se é novo (oposto ao que você tinha).O último teste verifica se o número da última linha do arquivo é 1 (que também é a primeira linha, o que significa que há apenas uma linha) e o número da coluna do final da linha (coluna após o último caractere em a linha) é 1, o que significa que existem 0 caracteres. Se houver apenas 1 linha com 0 caracteres, o arquivo deverá estar vazio.
Uma observação final: a maneira como você coloca suas declarações na pergunta pode resultar em alguns resultados surpreendentes. Ou seja, você está definindo
BufRead
eBufNewFile
somente se as condições forem atendidas na inicialização, mas esses comandos automáticos existem para o restante da sua sessão. Portanto, se você iniciar um arquivo vazio, que define esses comandos, todos os arquivos subseqüentes abertos (novos ou não, vazios ou não) serão iniciados no modo de inserção.O comando automático
VimEnter
é executado no final da inicialização do Vim e apenas uma vez durante toda a sessão. Dessa forma, seus testes só são executados quando você inicia o Vim e não em nenhum outro momento.fonte