如何从脚本路径运行Vim shell?

2 投票
3 回答
565 浏览
提问于 2025-04-17 00:35

搜索结果中有很多问答,我不知道怎么更好地表达这个问题,所以如果这是重复的问题请见谅:

我在用Vim运行一个Python脚本。这个脚本的路径是 ~/path/to/my/script.py,而在同一个路径下还有一个样式表文件。

代码的内容是打开这个文件:

f = open('./stylesheet.css', 'r')
s = f.read()
f.close()

但是当我在Vim中这样运行我的代码 :!python % 时,它会返回:IOError: [Errno 2] No such file or directory: 'stylesheet.css'

所以看起来Vim并不是从代码所在的位置来运行我的代码,而是从/home或者根目录来运行的?

我该怎么做才能让它在执行时使用代码的路径作为根路径呢?

3 个回答

0

在vim这个编辑器里,想要操作当前打开的文件,可以用一个快捷键%,所以你不用输入:!python $,只需要输入:!python %就可以了。

1

要在和你的脚本在同一个文件夹里打开一个文件,可以试试下面这样的写法:

import os

script_dir = os.path.dirname(__file__)
target_file = os.path.join(script_dir, 'stylesheet.css')

with open(target_file, 'r') as f:
  s = f.read()
5

你可以使用这个命令 :lcd %:p:h | !python %

简单解释一下,lcd 是用来切换到当前正在编辑的文件所在的目录 - http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file

然后它会在这个文件上执行 python 命令。

这个命令的一个问题是,你的当前目录会变成(根据你的例子) ~/path/to/my/。你需要再输入一次 :lcd 来回到你原来的目录。我没有找到办法把这些都合并成一个命令在 vim 里。也许其他人能做到。

编辑 - 如何再切换回去

(我删掉了我复杂的方法)

简单的解决方案可以参考下面 ib 的评论。

撰写回答