Corrigir “Não é possível abrir o arquivo para gravação” no Vim

Aprendi essa dica assistindo Sean Griffin em Hands-On Backbone.js on Rails .

O erro

Edite um novo arquivo em um diretório que ainda não exista, como app/views/application:

:e app/views/application/index.html.erb

Tente salvar o arquivo:

:x

Um erro será exibido:

"app/views/application/index.html.erb" E212: Can't open file for writing
Press ENTER or type command to continue

O erro significa que não foi possível salvar o arquivo porque app/views/applicationele não existe. Então, temos que criá-lo.

Fazendo o diretório no shell

Eu costumava suspender o Vim:

Ctrl+Z

Em seguida, crie o diretório a partir do shell:

mkdir app/views/application

Em seguida, traga o Vim de volta ao primeiro plano:

fg

Fazendo o diretório no Vim

O que Sean faz no Hands-On Backbone.js on Rails é criar o diretório direto do Vim:

:!mkdir -p %:h

Muito mais rapido!

Como funciona

%é o arquivo atual no Vim. é o diretório no qual o arquivo atual está localizado. Portanto, ao editar , o comando se expande para .%:happ/views/application/index.html.erbmkdir -p app/views/application

Bônus!

Para a abordagem mais rápida ainda, use vim-mkdir para criar automaticamente o diretório quando ele não existir, sem necessidade de intervenção manual.

Respostas relacionadas:

Comandos básicos do Vim – para começar