Crie um arquivo sob o cursor no Vim


10

Eu tenho uma lista de arquivos

file1.ext
file2.ext
...

Como crio um arquivo com o nome file2.ext se meu cursor estiver dentro de file2.ext. Como gfapenas para criar novos arquivos (esta é uma situação hipotética, apenas pensei que poderia ser útil um dia).

Respostas:


17

A primeira coisa que me vem à mente é usar o touchcomando passando o nome do arquivo sob o cursor.

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

Mas há uma solução interna do Vim que deve ser portátil entre plataformas. A função writefilegrava uma lista em um arquivo linha por linha. Quando a lista de entrada está vazia, ela cria um arquivo vazio. (Veja :help writefilepara detalhes.)

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

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

A propósito, se você não quiser criar um arquivo, mas abrir um para edição, poderá definir o gfmapeamento semelhante

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

onde :epoderia ser substituído por :tabeou com algo semelhante.


1
+1 para ensinar em <cfile>vez de<C-r><C-f>
veja

2

Peguei a excelente resposta de 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 Gollum)

Eu tentei pela primeira vez:

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

o acima funciona como indicado na resposta. No entanto, no começo, pensei que não estava funcionando porque na verdade não vi o arquivo sendo aberto no vim. Usar o segundo bit de código abaixo abrirá um novo arquivo - é 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 uma sintaxe como [[the-new-file]]a sintaxe do wiki não permite a extensão do arquivo entre colchetes. No entanto, o Vim precisa saber a extensão ao criar um novo arquivo para que isso funcione. Nesse caso, usei:

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

para que eu pudesse criar novos arquivos de remarcação. Existem maneiras de personalizar ainda mais isso (por exemplo, não codificando a extensão), mas as opções acima funcionam bem para minhas necessidades. Se eu precisar de outra extensão (por exemplo, para salvar um arquivo .wiki), provavelmente pegarei a rota simples e farei outro mapa como:

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

Como um benefício colateral, você pode usar o mesmo comando para abrir o arquivo de remarcação já existente (o gfcomando padrão não funcionará aqui porque está faltando a extensão do arquivo).


gffunciona se set suffixesadd=.wiki. Uma versão melhorada cfseria uma que respeite suffixesadd, pelo menos no caso em que contenha apenas um item.
Hjdivad 28/10
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.