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


10

我有文件清单

file1.ext
file2.ext
...

如果我的光标位于file2.ext内,如何创建一个名为file2.ext的文件。有点像gf仅用于创建新文件(这是一种假设情况,只是有一天可能会有所帮助)。

Answers:


17

我想到的第一件事是使用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或类似命令。


1
+1 <cfile>代替教学<C-r><C-f>
sehe 2011年

2

我在上面的ib中得到了一个很好的答案,并将其扩展如下。我的目标是根据需要使用vim创建新的markdown文件(在本例中为Gollum Wiki)

我首先尝试:

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>

因此我可以创建新的降价文件。有一些方法可以进一步自定义此内容(例如,通过不对扩展名进行硬编码),但是上面的方法可以很好地满足我的需求。如果我需要其他扩展名(例如,保存.wiki文件),则可能会选择简单的路线并制作另一个地图,例如:

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

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


gf如果set suffixesadd=.wiki。至少在仅包含一项的情况下,您的改进版本才是值得cf尊重的版本suffixesadd
hjdivad 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.