我正在尝试在我的vim配置中包含基于搜索的设置。这导致[i
、[i
、[d
、]d
等cmds无法按预期工作。此外,当运行:checkpath!
查看包含的文件时,它也不像预期的那样工作。你能帮帮我吗?让我知道我做错了什么&我能做些什么来解决这个问题。
venv
dir的条目,只是为了保持条目列表的小。
>树-I "build|dist|*egg*|__pycache__“-L 2。美国化学文摘社( MANIFEST.in README.md├──acs_ datamodels -0.0.1-py3- .│.├──ai_core-0.0.1-py3- )金融服务中心( __init__.py│):set path?
看起来就像
path=datamodels,venv/lib/python3.7/site-packages/*/**2:set include?
看起来就像
^\s*(from|import)\s*\zs(\S+|\S+\s*import{1}\s*\S+)\ze($|\s*as|,):set includeexpr?
看起来就像
includeexpr=PyInclude(v:fname)~/.vim/after/ftplugin/python.vim
的内容如下
设置shiftwidth=4 tabstop=4 softtabstop=4扩展选项卡,自动缩进智能定位器setlocal wildignore=*.pyc,bin,*tabstop=4*,__pycache__/*,build,dist setlocal \)函数!PyInclude(fname)回显"fname:“a:fname let parts = split(a:fname,‘import ')回声”部件“部分:”部件允许l=部件“(1)日志记录(2) ai_core.commons (3) datamodels.literals if len( parts ) >1 let r= parts1”(1) datamodels (2) datetime let = join(l,r,’. '.')“datetime.datetime,ai_core.commons.decode_token让fp =替代(连接,'.','/','g')。'.py‘“datetime/datetime,ai_core/parts/decode_token= glob(fp,1)回声"parts > 1”如果len( found )返回被发现的endif endif让kp =替代(l,'.','/','g')。< 1“kp返回kp”ai_core/commons.py,datamodels/alals.py尾函数setlocal includeexpr=PyInclude(v:fname):checkpath!
的输出如下。请注意,输出还包含我添加的一些调试消息。如果您看到from typing import Dict
和import logging
是从venv
dir中识别出来的,但是其他库:虽然它们在venv
dir中也存在,但我从轮转文件中安装的from ai_core.commons import decode_token
是不被识别的。另外,当前文件的相对路径import datamodels.literals
中的另一个模块无法识别。
fname:键入导入venv/lib/python3.7/site-packages/pip/_internal/utils/typing.py部件:‘键入’,' Dict‘部件>1部件<1 typing.py decode_token fname: ai_core.commons导入decode_token部件:’aicore.commons‘,' decode_token‘parts >1部件<1 ai_core/commons.py ai_core.commons导入decode_token未找到fname:日志部件:“日志”部件<1 logging.py logging.py fname: datamodels.literals部件:“datamodels.literals”部件<1 datamodels/alals.py datamodels.literals logging发布于 2021-07-25 08:39:11
&path
是用于搜索文件的目录的白名单。基本上,您可以将搜索看作是将文件名附加到&path
中列出的每个目录中,并查看该路径是否指向某项内容(它并不是这样工作的,但对于当前的问题来说,这是一个足够好的心智模型)。
例如,如果文件名为quux
,而&path
为foo,bar,baz
,那么Vim将搜索以下文件:
foo/quux
bar/quux
baz/quux
在这里,文件名是datamodels/literals.py
,您的&path
是datamodels,venv/lib/python3.7/site-packages/*/**2
,所以Vim将搜索:
datamodels/datamodels/literals.py
venv/lib/python3.7/site-packages/*/**/datamodels/literals.py
venv/...
而且失败的原因很明显。
有两种方法可以避免这种情况:
&path
准备.,,
,它告诉Vim在当前文件的目录和工作目录中搜索文件。您的&path
应该是这样的:
.、datamodels、venv/lib/python3.7/site-packages/*/**2
它应该让Vim轻松地找到datamodels/literals.py
:
datamodels/alals.py <--宾果!.=‘#en0#3’> venv/lib/python3.7/site-packages/*/**/datamodels/literals.py venv/.&includeexpr
返回literals.py
,它可以在当前&path
中找到,而不是datamodels/literals.py
:
datamodels/alals.py <--宾果!venv/lib/python3.7/site-packages/*/**/literals.py venv/.海事组织,你应该两者兼得。
发布于 2021-07-25 13:00:15
是:set path=.,,venv/lib/python3/site-packages/**2
做的魔术吗?更正是**2
,用2层深度来表示子项目,而不是我最初的文章中的*/**2
。是的,正如@romail所指出的,我确实尝试将includeexpr
中的每个文件名追加到path
中的dir列表中。谢谢。
https://stackoverflow.com/questions/68516511
复制相似问题