Sublime Text是一款非常受欢迎的编辑器。在Windows、Mac OSX、Linux平台上都可以使用。Sublime Text最大的特点之一就是可扩展性,有丰富的插件可控用户安装,来实现各种功能的扩展。但是我在Mac的OSX系统上尝试给Sublime Text安装插件时却不太顺利,这里整理一下遇到的问题和解决办法。

安装插件管理器Package Control

​ Package Control是Sublime Text插件中特殊的一个,它是所有插件的管理器。其他插件的安装和配置,由Package Control控制。安装Package Control有以下两种方式,可以任选其一进行安装。

自动安装

  1. 打开Sublime Text,按 control+` 快捷键,或通过菜单栏中的View -> Show Console选项,打开Console界面

    打开Console

  2. 按照Sublime的不同版本,将以下代码复制粘贴到Console的输入框中,按回车键执行

    Sublime Text3:

    1
    import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

    Sublime Text2:

    1
    import urllib2,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')

等待代码执行完毕,当Preference菜单中出现Package Control和Package Settings选项,表示Package Control已经安装成功,可以进行其他插件的安装了。

Package Control安装成功

手动下载安装

​ 由于网络等因素影响,自动安装在某些情况下可能会遇到问题,也可以选择手动下载安装文件,放在相关路径下,完成安装。

  1. 从官方站点下载packagecontrol.io下载安装文件Package Control.sublime-package (由于这个网站被qiang,需要特殊技术手段才能访问)

  2. 打开Sublime Text的Preferences -> Browse Packages

    Browse Packages

  3. 在弹出的Finder(访达)窗口中,退回到上一层路径,并进入Installed Packages文件夹,将Package Control.sublime-package安装文件放到此文件夹下,重启Sublime Text,就完成安装了。

    上层路径

    installed packages

安装其他插件

​ 装上Package Control之后,就可以利用它给Sublime Text安装其他插件了。主要是在这一块,可能会遇到一些问题。

用Package Control安装插件

  1. 在Sublime Text中输入快捷键Shift+Command+P,或选择菜单栏Tools -> Command Palette

  2. 在弹出的命令面板中输入Install Package,选择下方的Package Control: Install Package

    Install Package

  3. 稍等片刻,在新弹出的命令面板中输入要安装的插件名称,按回车或从下方选择相应的插件,正常情况下等待安装完成就可以了。

    安装某个插件

  4. 如果需要对已安装插件进行更新或删除操作,只需要在命令面板里输入Upgrade Package或Remove Package,再选择要操作的插件,就可以了。

安装插件时报错

​ 在安装插件时,可能会遇到如下报错:弹窗显示错误信息为Unable to download或者No such Plugins等,

弹窗报错

​ 打开Console控制台,可以看到更多错误信息,有类似如下的异常信息:

1
2
Package Control: Error downloading package. HTTP exception InvalidCertificateException (Host 127.0.0.1:1087 returned an invalid certificate ([SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:548))) downloading https://xxx.
error: Package Control

​ 这种错误是因为Package Control默认情况下使用urllib从指定插件路径下载文件时,在处理ssl证书时存在某些问题,导致下载中段。这种情况下,可以通过修改Package Control的设置来解决。

  1. 选择Preferences -> Package Settings -> Package Control -> Settings - User

  2. 在弹出的设置文件中,添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    "downloader_precedence":
    {
    "linux":
    [
    "curl",
    "urllib",
    "wget"
    ],
    "osx":
    [
    "urllib"
    ],
    "windows":
    [
    "wininet"
    ]
    },

    效果如下:

Settings1

​ 这段内容的作用是配置Package Control下载插件的方式,在OSX下优先使用curl进行下载,保存配置文件后重启Sublime Text,就可以解决弹窗提示无法下载的问题了。

Install Package无反应

​ 在按照上述修改配置之后,不再弹出无法下载的提示框,但有可能遇到新的问题,在命令面板输入Install Package命令后无反应。

​ 打开Console控制台后,会发现类似如下的错误信息:

1
Package Control: Trying to execute command /usr/bin/curl --connect-timeout 30 -sSL --tlsv1 --dump-header /var/folders/pq/_v6v64952f7d5qx6zk_mk96m0000gn/T/tmphgt67b --user-agent 'Package Control v3.3.0' --header 'If-Modified-Since: Fri, 07 Jun 2019 10:00:03 GMT' --header 'Accept-Encoding: bzip2,gzip,deflate' --header 'If-None-Match: "5cfa35a3-54853"' --cacert '/Users/sayers/Library/Application Support/Sublime Text 3/Packages/User/Package Control.merged-ca-bundle' -v https://packagecontrol.io/channel_v3.json

​ 这是由于Package Control在执行插件安装时,要首先通过之前配置指定的curl下载https://packagecontrol.io/channel_v3.json,从这个json文件中读取所有的插件信息,而这个站点被qiang了。即使我们已经在ss客户端中设置全局代理,但curl并不会自动走代理进行访问,所以就会出现下载失败的情况。

​ 解决方案是在Package Control的配置文件中指定代理IP和端口。如上一步一样,打开配置文件,添加如下内容:

1
"http_proxy": "socks5://代理IP:代理监听端口",

效果如下:

setting2

​ 由于我们使用的ss客户端一般配置的是Socksv5代理,所以这里代理地址以socks5://开头,如果是配置的http或https代理,可以将对应内容改为http://或https://

​ 保存配置文件之后,重启Sublime Text,应该就可以正常使用Package Control安装插件了。