Sublimetext3 如何使用右键单击菜单复制当前文件的完整路径而不使用文件名? 导入升华 导入升华插件 导入操作系统 类copypathCommand(升华插件.WindowCommand): def运行(自我,编辑): #视图=升华。活动窗口()。活动视图() vars=self.window.extract_variables() 工作目录=vars['file\u path'] base\u name=os.path.basename(工作目录) 升华。设置剪贴板(基本名称) 打印(“获取剪贴板”+升华。获取剪贴板())

Sublimetext3 如何使用右键单击菜单复制当前文件的完整路径而不使用文件名? 导入升华 导入升华插件 导入操作系统 类copypathCommand(升华插件.WindowCommand): def运行(自我,编辑): #视图=升华。活动窗口()。活动视图() vars=self.window.extract_variables() 工作目录=vars['file\u path'] base\u name=os.path.basename(工作目录) 升华。设置剪贴板(基本名称) 打印(“获取剪贴板”+升华。获取剪贴板()),sublimetext3,sublime-text-plugin,Sublimetext3,Sublime Text Plugin,上下文菜单 [ { "caption": "copypath", "command": "copypath"}, ] 这个脚本不起作用。 当我使用ctrl-v时,它会粘贴“working_dir”。 我认为问题在于sublime\u plugin.WindowCommand参数或self.window.extract\u variables(),因为我只更改了其他工作脚本的这两行。 您的插件包含多个错误以

上下文菜单

[
    { "caption": "copypath",  "command": "copypath"},
]
这个脚本不起作用。 当我使用ctrl-v时,它会粘贴“working_dir”。 我认为问题在于
sublime\u plugin.WindowCommand
参数或
self.window.extract\u variables()
,因为我只更改了其他工作脚本的这两行。

您的插件包含多个错误以及代码可以改进的地方

  • 使用
    import os
    不会自动导入
    os.path
    类。您需要使用
    导入os.path

  • 您的类名
    class copypathCommand
    必须以大写字母
    C
    开头才能创建
    copypath
    命令,即
    class copypathCommand
    ,请参阅

  • 您继承了
    sublime\u plugin.WindowCommand
    ,但随后在
    run()
    方法中使用了
    edit
    参数,该参数只能在继承自
    sublime\u plugin.TextCommand
    的类中使用。最好对此插件使用
    TextCommand
    ,因为它已经将活动视图设置为
    self.view
    。这就给出了
    类copypath命令(sublime\u plugin.TextCommand)

  • 无需使用
    extract\u variables()
    获取文件路径。在
    view
    类中提供
    file\u name()
    方法,如果视图/缓冲区未保存(即没有要返回的文件路径),则返回完整的文件路径或
    None
    。因此,只需一次调用
    file\u path=self.view.file\u name()
    即可检索完整路径

  • 您使用的是
    os.path.basename()
    ,但您的问题标题说您需要“当前文件完整路径,不带文件名”,这需要使用
    os.path.dirname()
    。这就是这两种方法在返回内容方面的不同之处:

  • os.path.basename(“/full/path/to/folder/filename”)-->“filename”
    dirname(“/full/path/to/folder/filename”)-->“/full/path/to/folder”
    
    将所有这些放在一起组成一个工作插件,可以得到以下代码:

    #保存在ST config文件夹中:../Packages/User/CopypathToClipboard.py
    导入操作系统路径、升华、升华插件
    类CopypathCommand(升华插件.TextCommand):
    def运行(自我,编辑):
    file\u path=self.view.file\u name()
    如果不是文件路径:
    升华状态信息(“当前缓冲区未保存”)
    返回
    dir\u path=os.path.dirname(文件路径)
    升华。设置剪贴板(目录路径)
    升华状态消息(“已将文件夹复制到剪贴板:“+dir\u路径”)
    #is_enabled()仅当视图包含保存的文件时才启用插件。
    #如果返回false,“copypath”命令将不可用,
    #例如,命令选项板标题隐藏,关联菜单标题变灰。
    def已启用(自):
    如果self.view.file_name()为False,则返回True
    
    您的
    上下文没有问题。升华菜单
    code-尽管添加
    id
    行,正如我在下面所做的那样,意味着命令的标题
    Copy Folder Path
    将显示在右键单击上下文菜单中的
    Copy File Path
    相同的菜单部分

    //保存在ST config文件夹中:../Packages/User/Context.submite-menu
    [
    {“标题”:“-”,“id”:“文件”},
    {“标题”:“复制文件夹路径”,“命令”:“复制路径”}
    ]
    
    谢谢,这对我来说是个很好的答案。还有一个问题:有时按钮会变成灰色。上下文菜单中的“command”值应该是小写。对吗?要在没有可用路径时使上下文菜单中的命令变灰,需要实现
    已启用()
    方法-请参阅上面我编辑的插件。是,上下文菜单中的
    “command”
    值应为小写,所有升华文本命令均为小写,请参阅。另一个问题是,有时我会按照您的代码添加
    if语句,当我删除时,菜单立即变为灰色,按钮再次变为黑色,功能恢复正常。
    if语句是否有问题
    Re:“另一个问题”-我不理解你的问题。请让英语说得好的人帮你写另一条评论,解释你的意思。Sry由于评论格式的限制,我对这个问题不是很清楚,我在问题描述中更新了gif!请随时检查!