Crie um arquivo sob o cursor no Vim

10

Eu tenho uma lista de arquivos

file1.ext
file2.ext
...

Como faço para criar um arquivo com nome file2.ext se meu cursor estiver dentro de file2.ext. Tipo como gf apenas para criar novos arquivos (essa é uma situação hipotética, que pode ser útil algum dia).

    
por Alex 29.04.2011 / 07:40

2 respostas

17

A primeira coisa que me vem à mente é usar o comando touch passando para ele o nome do arquivo sob o cursor.

map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>

Mas há uma solução interna da Vim que deve ser portável plataformas. A função writefile grava uma lista em uma linha de arquivo por linha. Quando a lista de entrada está vazia, cria um arquivo vazio. (Vejo :help writefile para detalhes.)

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>

Observe que a extração de nome de arquivo pode ser ajustada usando diferentes expand padrões (consulte :help expand() ).

A propósito, se você gostaria de não criar um arquivo, mas abrir um para edição, você pode definir gf -like mapping

map <leader>gf :e <cfile><cr>

em que :e pode ser substituído por :tabe ou por algo semelhante.

    
por 29.04.2011 / 09:43
2

Eu peguei a excelente resposta do ib acima e a expandi da seguinte forma. Meu objetivo era usar o vim para criar novos arquivos de remarcação, conforme necessário para um wiki (neste caso, um wiki da Gollum)

Eu tentei pela primeira vez:

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>' 

acima funciona como afirmado na resposta. No entanto, no começo eu pensei que não estava funcionando porque eu realmente não vi a abertura do arquivo no vim. Usando o segundo bit de código abaixo irá abrir um novo arquivo - isso é mais o que eu estava procurando. Então eu os combinei e tentei:

map <leader>cf :e <cfile><cr>

mas isso não funciona para um wiki porque quando você tenta criar um novo arquivo no wiki usando sintaxe como [[the-new-file]] , a sintaxe do wiki não permite a extensão do arquivo entre colchetes. No entanto, o Vim precisa conhecer a extensão ao criar um novo arquivo para que isso funcione. Neste caso eu usei:

    map <leader>cf :e <cfile>.md<cr>

para poder criar novos arquivos de remarcação. Há maneiras de personalizar ainda mais isso (por exemplo, não codificando a extensão), mas o acima funciona bem para as minhas necessidades. Se eu precisar de outra extensão (por exemplo, para salvar um arquivo .wiki) provavelmente irei pegar a rota simples e criar outro mapa como:

    map <leader>cwf :e <cfile>.wiki<cr>

Como benefício secundário, você pode usar o mesmo comando para abrir o arquivo markdown já existente (o comando gf padrão não funcionará aqui porque a extensão do arquivo está ausente).

    
por 29.12.2011 / 21:47

Tags