vim:应用autocmd时,新文件的目录与当前工作目录不匹配

时间:2014-10-07 11:00:38

标签: vim autocmd

我开始使用vim编辑我的python代码,我希望vim根据不同的后缀保存代码到不同的文件夹中,例如' .py'。

所以,我把它添加到我的gvimrc文件中(我确实使用了MacVim,但vim上出现了同样的问题)

au BufWritePre *.py :cd /Users/username/Documents/folder

我认为每次将代码保存到' .py&#39之前,这会将工作目录更改为 / Users / username / Documents / folder ;

当我进入MacVim时,打开一个新文件,输入类似

的内容
print("Hello")

并通过

保存
:w hello_world.py

名为 hello_world.py 的文件出现在 / Users / username / Documents / folder 中,因为我祝愿。 ":pwd" vim中的命令也返回" / Users / username / Documents / folder "。但是当我在vim中检查 hello_world.py 的文件名时

:!echo %

它返回

/Users/username/hello_world.py

而不是预期的文件名

/Users/username/Documents/folder/hello_world.py # expected filename

此外,当我尝试升级像

这样的代码时
print("Hello")
print("World")

并通过

保存
:w

/ Users / username / Documents / folder 下的 hello_world.py 中的内容保持不变。 但是 / Users / username 中出现了一个具有相同 hello_world.py 名称的新文件,这是一致的用vim中的文件名。

我想我的gvimrc中的autocmd脚本在保存' .py'之前确实更改了工作目录。文件,但我试图找出文件名与工作目录不一致的原因,以及如何保存我的' .py'将文件存入特定文件夹。

1 个答案:

答案 0 :(得分:0)

对我来说(在Ubuntu 14.04上使用Vim 7.4.52),文件始终在CWD中创建,因此autocmd对文件放置没有影响,但会更改目录。在内部,文件的最终目录是在创建缓冲区时确定的(由:ls证明),而不是在缓冲区的第一次写入或命名期间。

我只是设法通过

接近你想要的东西
:au BufWritePost *.py file /Users/username/Documents/folder/%:t

仍会在CWD中创建初始文件。

如果您认为Vim应该处理此问题(更好),您可以尝试在vim_dev mailing list上提出问题。