【问题标题】:vim: new file's directory did not match the current working directory when autocmd was appliedvim:应用 autocmd 时新文件的目录与当前工作目录不匹配
【发布时间】:2014-10-07 11:00:38
【问题描述】:

我开始使用 vim 来编辑我的 python 代码,我希望 vim 根据不同的后缀(如 '.py')将代码保存在不同的文件夹下。

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

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

我认为每次保存以“.py”结尾的代码之前,都会将工作目录更改为 /Users/username/Documents/folder

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

print("Hello")

并保存它

:w hello_world.py

一个名为 hello_world.py 的文件出现在 /Users/username/Documents/folder 中,因为我希望。 vim 中的 ":pwd" 命令也返回 "/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

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

我猜我在 gvimrc 中的 autocmd 脚本在保存 '.py' 文件之前确实更改了工作目录,但我试图弄清楚为什么文件名与工作目录不一致以及如何保存我的 '.py ' 文件到特定文件夹中。

【问题讨论】:

    标签: vim autocmd


    【解决方案1】:

    对我来说(在 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 上提出这个问题。

    【讨论】:

    • 感谢您的回复,这很好,您的回答澄清了我的困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2011-03-07
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2016-03-22
    相关资源
    最近更新 更多