如何在Vim中创建新目录和文件

113

当使用Vim作为文本编辑器时,是否有一种在文本编辑模式下创建新目录和文件的方法?而不是返回到命令行并创建新目录和文件。


一种跨网络重复的排序方式:http://superuser.com/questions/285500/how-to-run-unix-commands-from-within-vim - Two-Bit Alchemist
你是在寻找一行代码来创建还不存在的子目录中的文件,还是不知道你可以在不退出vim的情况下运行shell命令呢? :) - Two-Bit Alchemist
此外,这个问题的答案描述了如何使用vim的系统调用来实现这一点。如果您想在.vimrc中拥有这样的命令,这将非常有用。 - Petr
6个回答

119

如果您处于文件浏览器模式下,您可以使用以下方法:

d 创建文件夹

% 创建新文件

您可以通过输入 :Sexplore:Vexplore 命令进入浏览器模式

无需使用 ! 调用外部命令


4
在vim中打开资源管理器模式,使用命令:Sexplore:Vexplore - Sukma Saputra
这个很好用。我只希望有一种批量处理的方法。即使是 vidir 也没有为我的使用情况提供方便的方式。 - Sridhar Sarnobat

78
假设您在运行一个shell,我建议使用以下任意一条命令。通过Esc键进入命令模式,然后执行以下操作:

假设您在运行一个shell,我建议使用以下任意一条命令。通过Esc键进入命令模式,然后:

:! touch new-file.txt
:! mkdir new-directory

一个非常适合这些操作的插件是vim-eunuch,它为您提供了用于shell命令的语法糖。以下是使用vim-eunuch的后一个示例:


:Mdkir new-directory

这个答案确实是正确的,但它假设运行一个 shell。请查看下面我提供的纯 Vim 解决方案。 - Ondřej Kolín
我喜欢这种方法,但是如何使用当前路径呢?如果你在 vim ~/some/path 中输入 :! mkdir new_dir,那么它会创建 ~/new_dir 而不是 /some/path/new_dir - young_souvlaki

64

切换到文件浏览模式

:Ex,如果不起作用,请使用:Explore

然后按下

d

并添加新目录名称。


1
不存在 - Pedro Luz
3
@PedroLuz,您能否更具体地说明哪些方面出了问题?“Ex”是“Explore”的缩写,请在vim帮助中查看help :Explore - bonyiii

47

假设您刚刚在不存在的目录中打开了一个新文件:

vim new_dir/new_file.txt

当您尝试使用:w时,您将收到“E212:无法打开写入文件”
要创建新目录和文件,请使用以下命令:


要创建新目录和文件,请使用以下命令:
:!mkdir -p %:h

3
完美地运作,特别是如果您添加一个快捷方式/功能。 - Yuri Pozniak
12
我想知道 %:h 到底是什么意思:% 表示文件名(作为 vim 的参数),而 :h 则表示除了最后一个部分之外的所有内容。具体内容可以在这里找到:https://vim.fandom.com/wiki/Get_the_name_of_the_current_file。 - Bodo Thiesen

10
为了完整起见:
- 使用Shell命令,例如:!mkdir my_dir:!touch foo.txt(如Jake在这里的答案中提到)将在当前工作目录中创建目录和文件。当前工作目录是指在开始当前vim进程时所处的目录,但不一定是你正在编辑的文件所在的相同目录,也不一定是你的:Explore浏览器当前查看的相同目录。如果有疑问,请始终使用:!pwd来检查当前的工作目录,并在必要时使用相对路径。 - 因此,如果您的项目包含多个子目录,则更方便的方法是: 1. 首先键入:Explore以进入资源管理器模式, 2. 然后您可以通过键入up-arrowdown-arrow(或jk)移动光标,键入Enter进入子目录,键入-返回上一级目录。(请注意,所有这些导航都不会更改您的当前工作目录); 3. 现在,您可以键入d提示输入目录名,或键入%提示输入文件名,然后它们将在当前屏幕显示的目录中创建。PS:这些键实际上在内置帮助文档 F1 中有提到。

1
这是正确的答案,你可以在 Vim 中使用 shell 命令,也可以只用纯 Vim。 - Sam

4

您可以使用:e .进入资源管理器模式,然后按下d键创建新目录。虽然这个答案比较简短,但可能更好理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接