Mac OSX下Sublime Text安装Package Control并解决插件安装报错和无响应的问题
次访问
Sublime Text是一款非常受欢迎的编辑器。在Windows、Mac OSX、Linux平台上都可以使用。Sublime Text最大的特点之一就是可扩展性,有丰富的插件可控用户安装,来实现各种功能的扩展。但是我在Mac的OSX系统上尝试给Sublime Text安装插件时却不太顺利,这里整理一下遇到的问题和解决办法。
安装插件管理器Package Control
Package Control是Sublime Text插件中特殊的一个,它是所有插件的管理器。其他插件的安装和配置,由Package Control控制。安装Package Control有以下两种方式,可以任选其一进行安装。
自动安装
打开Sublime Text,按 control+` 快捷键,或通过菜单栏中的View -> Show Console选项,打开Console界面
按照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已经安装成功,可以进行其他插件的安装了。
手动下载安装
由于网络等因素影响,自动安装在某些情况下可能会遇到问题,也可以选择手动下载安装文件,放在相关路径下,完成安装。
从官方站点下载packagecontrol.io下载安装文件Package Control.sublime-package (由于这个网站被qiang,需要特殊技术手段才能访问)
打开Sublime Text的Preferences -> Browse Packages
在弹出的Finder(访达)窗口中,退回到上一层路径,并进入Installed Packages文件夹,将Package Control.sublime-package安装文件放到此文件夹下,重启Sublime Text,就完成安装了。
安装其他插件
装上Package Control之后,就可以利用它给Sublime Text安装其他插件了。主要是在这一块,可能会遇到一些问题。
用Package Control安装插件
在Sublime Text中输入快捷键Shift+Command+P,或选择菜单栏Tools -> Command Palette
在弹出的命令面板中输入Install Package,选择下方的Package Control: Install Package
稍等片刻,在新弹出的命令面板中输入要安装的插件名称,按回车或从下方选择相应的插件,正常情况下等待安装完成就可以了。
如果需要对已安装插件进行更新或删除操作,只需要在命令面板里输入Upgrade Package或Remove Package,再选择要操作的插件,就可以了。
安装插件时报错
在安装插件时,可能会遇到如下报错:弹窗显示错误信息为Unable to download或者No such Plugins等,
打开Console控制台,可以看到更多错误信息,有类似如下的异常信息:
1 | 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. |
这种错误是因为Package Control默认情况下使用urllib从指定插件路径下载文件时,在处理ssl证书时存在某些问题,导致下载中段。这种情况下,可以通过修改Package Control的设置来解决。
选择Preferences -> Package Settings -> Package Control -> Settings - User
在弹出的设置文件中,添加以下内容:
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"
]
},效果如下:
这段内容的作用是配置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:代理监听端口", |
效果如下:
由于我们使用的ss客户端一般配置的是Socksv5代理,所以这里代理地址以socks5://开头,如果是配置的http或https代理,可以将对应内容改为http://或https://
保存配置文件之后,重启Sublime Text,应该就可以正常使用Package Control安装插件了。