在vimscript中创建目录

时间:2018-03-02 19:55:04

标签: vim

我想创建一个目录来存储我.vimrc中的Vim交换文件。我找到了几种方法,例如:

call mkdir($HOME . "/.vim/swap", "p", 0700)
silent! call system('install -dm 700 ~/.vim/swap')

哪种方式更好,为什么?

1 个答案:

答案 0 :(得分:1)

前者:

call mkdir($HOME . "/.vim/swap", "p", 0700)

比后者更好:

call system('install -dm 700 ~/.vim/swap')

内置mkdir()更好的一些原因:

  • 更高效:从Vim调用内置的mkdir()函数将使Vim只需使用mkdir()系统调用直接创建目录。那是非常简单和便宜的。另一方面,调用system()意味着Vim将不得不产生一个单独的进程,在大多数情况下是一个Shell,然后它必须解释命令行,然后exec()来编译外部二进制文件(在install),以便它可以为您创建目录。

  • 更便于移植:内置mkdir()的Vim可以在非Unix / Linux或类似Unix的系统上使用,尤其是Windows。 (在这种情况下,由于目录上的.vim名称,可能会使Windows出现问题,但要指出的是,Vim内置函数将在非Unix / Linux平台上运行。)可移植性的原因在于后者取决于可用的install二进制文件,而在准系统上可能不是这种情况。另外,某些系统具有诸如install之类的二进制文件,这些二进制文件采用不同的非标准命令行选项,并且可能无法识别您所使用的二进制文件。考虑到Vim可以在其上运行的各种平台的多样性,对此进行测试非常困难。

  • 更安全:运行外部shell命令需要正确地转义参数,由于正常情况(无空格或特殊的元字符)通常无需特殊的预防措施就可以正常运行,这很难做到。内置mkdir()并不是问题,它使用目录名作为单个参数,并且不会出现空格或元字符的问题。

  • 更好的错误处理::在您的示例中,您已经使用silent!生成外部命令的情况(大概在运行命令时跳过所有“按Enter”提示) ...但这意味着如果出现问题(例如,权限设置受到阻止,无法创建目录),您将不会看到错误消息让您知道。另一方面,如果内置mkdir()失败,则应该有清晰的错误消息,指出发生了什么以及为什么。