在 Vim 中在光标下创建一个文件

在 Vim 中在光标下创建一个文件

我有一份文件列表

file1.ext
file2.ext
...

如果我的光标位于 file2.ext 内,我该如何创建名为 file2.ext 的文件。有点像gf只用于创建新文件(这是一个假设的情况,只是觉得将来可能会有用)。

答案1

我想到的第一件事是使用touch带有光标下的文件名作为参数的命令:

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

但是有一个纯 Vim 解决方案,可以跨平台移植。内置函数将writefile列表的内容逐行写入文件。当然,当输入列表为空时,它会创建一个空文件。(:help writefile()有关详细信息,请参阅。)我们可以利用这个副作用:

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

请注意,可以使用不同的模式来调整文件名提取expand(请参阅:help expand())。

顺便说一句,如果不想创建文件,而只是打开它进行编辑,可以定义一个更简单的gf映射:

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

其中该命令可以被或类似的命令:e替换。:tabe

答案2

我采纳了上面 ib 的优秀答案,并对其进行了如下扩展。我的目标是使用 vim 根据 wiki(在本例中为 Gollum wiki)的需要创建新的 markdown 文件

我首先尝试:

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

上述方法确实有效,正如答案中所述。但是,起初我以为它不起作用,因为我实际上没有看到文件在 vim 中打开。使用下面的第二段代码将打开一个新文件 - 这更符合我的要求。所以我将它们组合起来并尝试:

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

但这对于 wiki 不起作用,因为当您尝试使用类似[[the-new-file]]wiki 的语法在 wiki 中创建新文件时,语法不允许在括号中使用文件的扩展名。但是,Vim 需要在创建新文件时知道扩展名才能正常工作。在这种情况下,我使用了:

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

这样我就可以创建新的 markdown 文件。有办法进一步自定义它(例如,不对扩展进行硬编码),但上面的方法可以满足我的需求。如果我需要另一个扩展(例如,保存 .wiki 文件),我可能会采取简单的方法并制作另一个地图,如下所示:

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

作为一个附带好处,您可以使用相同的命令来打开已经存在的 markdown 文件(标准gf命令在这里不起作用,因为缺少文件扩展名)。

相关内容