Crea un archivo debajo del cursor en Vim

10

Tengo una lista de archivos

file1.ext
file2.ext
...

¿Cómo creo un archivo con el nombre file2.ext si mi cursor está dentro de file2.ext? Algo así como gfsolo para crear nuevos archivos (esta es una situación hipotética, solo que podría ser útil algún día).

Alex
fuente

Respuestas:

17

Lo primero que se me ocurre es usar el touchcomando que le pasa el nombre del archivo debajo del cursor.

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

Pero hay una solución Vim pura portátil en todas las plataformas. La función incorporada writefileescribe una lista en un archivo, línea por línea. Naturalmente, cuando la lista de entrada está vacía, crea un archivo vacío. (Consulte :help writefilepara más detalles.) Podemos aprovechar este efecto secundario:

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

Tenga en cuenta que la extracción del nombre de archivo podría ajustarse utilizando un expandpatrón diferente (ver :help expand()).

Por cierto, si a uno no le gustaría crear un archivo, sino solo abrirlo para editarlo, puede definir una gfasignación similar:

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

donde el :ecomando se puede reemplazar con :tabeun comando similar.

Comunidad
fuente
1
+1 para enseñar en <cfile>lugar de<C-r><C-f>
sehe
2

Tomé la excelente respuesta de ib arriba y la expandí de la siguiente manera. Mi objetivo era usar vim para crear nuevos archivos de rebajas según sea necesario para una wiki (en este caso, una wiki de Gollum)

Primero probé:

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

lo anterior funciona como se indica en la respuesta. Sin embargo, al principio pensé que no estaba funcionando porque en realidad no vi el archivo abrirse en vim. El uso del segundo bit de código a continuación abrirá un nuevo archivo; esto es más de lo que estaba buscando. Entonces los combiné e intenté:

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

pero eso no funciona para una wiki porque cuando intentas crear un nuevo archivo en la wiki usando una sintaxis como [[the-new-file]]la sintaxis wiki no permite la extensión del archivo entre paréntesis. Sin embargo, Vim necesita conocer la extensión al crear un nuevo archivo para que esto funcione. En este caso usé:

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

para poder crear nuevos archivos de rebajas. Hay formas de personalizar aún más esto (por ejemplo, sin codificar la extensión), pero lo anterior funciona bien para mis necesidades. Si alguna vez necesito otra extensión (por ejemplo, para guardar un archivo .wiki), probablemente solo tome la ruta simple y haga otro mapa como:

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

Como beneficio adicional, puede usar el mismo comando para abrir el archivo Markdown ya existente (el gfcomando estándar no funcionará aquí porque falta la extensión del archivo).

Snap Shot
fuente
gffunciona si set suffixesadd=.wiki. Una versión mejorada de su cfsería una que respeta suffixesadd, al menos en el caso de que solo contenga un elemento.
hjdivad