Crea un file sotto il cursore in Vim


10

Ho un elenco di file

file1.ext
file2.ext
...

Come posso creare un file con nome file2.ext se il mio cursore si trova all'interno di file2.ext. Un po 'come gfsolo per la creazione di nuovi file (questa è una situazione ipotetica, pensavo che un giorno potesse essere utile).

Risposte:


17

La prima cosa che mi viene in mente è usare il touchcomando passandogli il nome del file sotto il cursore.

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

Ma esiste una soluzione Vim pura portatile su più piattaforme. La funzione integrata writefilescrive un elenco in un file, riga per riga. Naturalmente, quando l'elenco di input è vuoto, crea un file vuoto. (Vedi :help writefileper i dettagli.) Possiamo sfruttare questo effetto collaterale:

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

Si noti che l'estrazione del nome file può essere regolata utilizzando un expandmodello diverso (vedere :help expand()).

A proposito, se si desidera non creare un file, ma solo aprirlo per la modifica, è possibile definire un gfmapping simile:

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

dove il :ecomando può essere sostituito con :tabeo un comando simile.


1
+1 per insegnare <cfile>invece di<C-r><C-f>
vedere il

2

Ho preso l'eccellente risposta di ib sopra e l'ho ampliata come segue. Il mio obiettivo era usare vim per creare nuovi file markdown secondo necessità per un wiki (in questo caso un wiki di Gollum)

Ho provato per la prima volta:

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

quanto sopra funziona come indicato nella risposta. Tuttavia, all'inizio ho pensato che non funzionasse perché in realtà non ho visto il file aprirsi in vim. Usando il secondo bit di codice qui sotto si aprirà un nuovo file - questo è più quello che stavo cercando. Quindi li ho combinati e ho provato:

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

ma questo non funziona per un wiki perché quando provi a creare un nuovo file nel wiki usando la sintassi come [[the-new-file]]la sintassi wiki non consente l'estensione del file tra parentesi. Tuttavia, Vim deve conoscere l'estensione durante la creazione di un nuovo file affinché funzioni. In questo caso ho usato:

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

così ho potuto creare nuovi file markdown. Esistono modi per personalizzare ulteriormente questo aspetto (ad esempio non codificando in modo rigido l'estensione) ma quanto sopra funziona bene per le mie esigenze. Se avessi mai bisogno di un'altra estensione (ad esempio per salvare un file .wiki) probabilmente prenderò semplicemente il percorso e creerò un'altra mappa come:

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

Come vantaggio collaterale puoi usare lo stesso comando per aprire il file markdown già esistente (qui il gfcomando standard non funzionerà perché manca l'estensione del file).


gffunziona se set suffixesadd=.wiki. Una versione migliorata del tuo cfsarebbe quella che rispetta suffixesadd, almeno nel caso in cui contenga solo un oggetto.
hjdivad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.