如何从脚本路径运行Vim shell?
搜索结果中有很多问答,我不知道怎么更好地表达这个问题,所以如果这是重复的问题请见谅:
我在用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 的评论。