Créer un fichier sous le curseur dans Vim

10

J'ai une liste de fichiers

file1.ext
file2.ext
...

Comment créer un fichier avec le nom file2.ext si mon curseur se trouve dans file2.ext. Un peu comme gfpour la création de nouveaux fichiers (c'est une situation hypothétique, il pourrait être utile de penser un jour).

Alex
la source

Réponses:

17

La première chose qui me vient à l'esprit est d'utiliser la touchcommande en lui passant le nom de fichier sous le curseur.

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

Mais il existe une pure solution Vim portable sur toutes les plateformes. La fonction intégrée writefileécrit une liste dans un fichier, ligne par ligne. Naturellement, lorsque la liste d'entrée est vide, elle crée un fichier vide. (Voir :help writefilepour plus de détails.) Nous pouvons profiter de cet effet secondaire:

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

Notez que l'extraction du nom de fichier peut être ajustée en utilisant un expandmodèle différent (voir :help expand()).

Soit dit en passant, si l'on souhaite ne pas créer un fichier, mais simplement l'ouvrir pour le modifier, on peut définir un gfmappage de type:

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

où la :ecommande peut être remplacée par :tabeou une commande similaire.

Communauté
la source
1
+1 pour l' enseignement au <cfile>lieu de<C-r><C-f>
sehe
2

J'ai pris l'excellente réponse de ib ci-dessus et je l'ai développée comme suit. Mon objectif était d'utiliser vim pour créer de nouveaux fichiers de démarque au besoin pour un wiki (dans ce cas, un wiki Gollum)

J'ai d'abord essayé:

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

ce qui précède fonctionne comme indiqué dans la réponse. Cependant, au début, je pensais que cela ne fonctionnait pas car je n'avais pas réellement vu l'ouverture du fichier dans vim. L'utilisation du deuxième bit de code ci-dessous ouvrira un nouveau fichier - c'est plus ce que je cherchais. Je les ai donc combinés et j'ai essayé:

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

mais cela ne fonctionne pas pour un wiki car lorsque vous essayez de créer un nouveau fichier dans le wiki en utilisant une syntaxe comme [[the-new-file]]la syntaxe wiki ne permet pas l'extension du fichier entre crochets. Cependant, Vim doit connaître l'extension lors de la création d'un nouveau fichier pour que cela fonctionne. Dans ce cas, j'ai utilisé:

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

afin que je puisse créer de nouveaux fichiers de démarque. Il existe des moyens de personnaliser davantage cela (par exemple en ne codant pas en dur l'extension), mais ce qui précède fonctionne bien pour mes besoins. Si jamais j'ai besoin d'une autre extension (par exemple pour enregistrer un fichier .wiki), je vais probablement prendre le chemin simple et créer une autre carte comme:

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

Comme avantage secondaire, vous pouvez utiliser la même commande pour ouvrir le fichier de démarque déjà existant (la gfcommande standard ne fonctionnera pas ici car l'extension de fichier est manquante).

Snap Shot
la source
gffonctionne si set suffixesadd=.wiki. Une version améliorée de votre cfserait celle qui respecte suffixesadd, au moins dans le cas où elle ne contient qu'un seul élément.
hjdivad