Sublime Text 3 安裝 BracketHighlighter

一杯熱咖啡AAA發表於2019-07-10

1 概述

由於最近在Sublime Text 3安裝 BracketHighlighter遇到不少問題,其中踩了不少坑,因此總結下來,形成部落格,希望能幫助更多的人

2 電腦環境

windows 10

Sublime Text 3 Version 3.2.1,Build 3207 已註冊

PS:

如果不知道自己Sublime Text 3版本的小夥伴可以 通過 Help-> About Sublime Text

Sublime Text 3 安裝 BracketHighlighter

3 安裝BracketHighlighter

① 按照正常流程,我們會首先安裝 Package control,如果不清楚的小夥伴,可以百度隨意搜一搜,網上教程很多,我就不重複造輪子了,我預設大家已經安裝好 Package control 並且知道如何使用它並安裝相應外掛

②安裝 BracketHighlighter,大家的第一選擇肯定是線上安裝,我自己也是選擇的線上安裝,可是立馬就遇到了問題

第一個坑  ctrl+` 開啟控制檯,會發現有如下錯誤

Package Control: The dependency 'python-jinja2' is not currently installed;             
Package Control: The dependency 'python-jinja2' is not available
Package Control: The dependency 'python-jinja2' could not be installed or updated

這是因為 python-jinja2這個依賴包是放在bitbucket上而非Github上,目前Sublime Text 3線上安裝,如果需要bitbucket上的依賴,基本上都會失敗。估計是bitbucket那邊的問題,具體原因我也不清楚,目前社群正在處理這個問題,如果感興趣的朋友可以去github上看https://github.com/facelessuser/BracketHighlighter/issues/528

③既然線上安裝已經行不通了,那就只有走離線安裝了,安裝BracketHighlighter總共需要6個外掛,其中有兩個外掛在bitbucket上,我們必須手動下載下來,然後再通過線上安裝。

https://bitbucket.org/teddy_beer_maniac/sublime-text-dependency-jinja2 將解壓過後的安裝包更名為python-jinja2

https://bitbucket.org/teddy_beer_maniac/sublime-text-dependency-markupsafe -> 將解壓過後的安裝包更名為markupsafe

Sublime Text 3 安裝 BracketHighlighter

第二個坑 網上很多教程包括官網說離線安裝包 放到 Packages 下,而安裝目錄剛好有一個Packages

Sublime Text 3 安裝 BracketHighlighter

因此我就將 markupsafepython-jinja2放在該packages下,可是問題依舊沒有解決,Sublime Text 3還是沒有安裝BracketHighlighter這個外掛

④經過我一番研究,終於發現問題的解決之道。

Sublime Text 3預設會在 C:\Users\使用者名稱\AppData\Roaming下 建立 Sublime Text 3資料夾

我自己的電腦路徑是C:\Users\ASUS\AppData\Roaming\Sublime Text 3

Sublime Text 3 安裝 BracketHighlighter

markupsafepython-jinja2放在C盤下的Sublime Text 3/Packages,然後再開啟Sublime,進行線上安裝,問題得以解決,成功安裝上BracketHighlighter這個外掛。

於是我打算關閉電腦,準備睡覺,螢幕面前剛好有一個JS檔案,我就隨意點了點,但是好像括號不起效果,於是我就上網查了查,大家都說BracketHighlighter需要一些配置,於是我就按照網上相關教程進行配置,可是居然配置了一個小時都沒有成功!!!我真的是驚呆了

第三個坑

直覺告訴我,應該是外掛出問題了,於是乎我點開Quick Start Guide 和 Support Info

Sublime Text 3 安裝 BracketHighlighter

果不其然,Quick Start Guide 點開是一個空檔案,Support Info中 外掛資訊不完整,有的外掛有版本資訊,有的外掛沒有版本資訊 PS:BracketHighlighter需要6個外掛依賴

於是乎,我立馬重新回到官網http://facelessuser.github.io/BracketHighlighter/installation/,從頭開始重新操作一遍。

①下載6個外掛,並且按照官網要求更改解壓包目錄名,然後將檔案放到Package下

Sublime Text 3 安裝 BracketHighlighter

②在github上下載BracketHighlighter並按照官網要求更改解壓包目錄,然後將檔案放到Package下

Sublime Text 3 安裝 BracketHighlighter

③按照官網要求在Package包下建立00-dependencies資料夾並且在該資料夾下建立檔案00-dependencies.py,然後將下列程式碼,複製到該檔案中。

import sys
import os
from os.path import dirname

if os.name == 'nt':
    from ctypes import windll, create_unicode_buffer

import sublime


if sys.version_info >= (3,):
    def decode(path):
        return path

    def encode(path):
        return path

    if os.path.basename(__file__) == 'sys_path.py':
        pc_package_path = dirname(dirname(__file__))
    # When loaded as a .sublime-package file, the filename ends up being
    # Package Control.sublime-package/Package Control.package_control.sys_path
    else:
        pc_package_path = dirname(__file__)
    st_version = u'3'

else:
    def decode(path):
        if not isinstance(path, unicode):
            path = path.decode(sys.getfilesystemencoding())
        return path

    def encode(path):
        if isinstance(path, unicode):
            path = path.encode(sys.getfilesystemencoding())
        return path

    pc_package_path = decode(os.getcwd())
    st_version = u'2'


st_dir = dirname(dirname(pc_package_path))


def add(path, first=False):
    """
    Adds an entry to the beginning of sys.path, working around the fact that
    Python 2.6 can't import from non-ASCII paths on Windows.

    :param path:
        A unicode string of a folder, zip file or sublime-package file to
        add to the path

    :param first:
        If the path should be added at the beginning
    """

    if os.name == 'nt':
        # Work around unicode path import issue on Windows with Python 2.6
        buf = create_unicode_buffer(512)
        if windll.kernel32.GetShortPathNameW(path, buf, len(buf)):
            path = buf.value

    enc_path = encode(path)

    if os.path.exists(enc_path):
        if first:
            try:
                sys.path.remove(enc_path)
            except (ValueError):
                pass
            sys.path.insert(0, enc_path)
        elif enc_path not in sys.path:
            sys.path.append(enc_path)


def remove(path):
    """
    Removes a path from sys.path if it is present

    :param path:
        A unicode string of a folder, zip file or sublime-package file
    """

    try:
        sys.path.remove(encode(path))
    except (ValueError):
        pass

    if os.name == 'nt':
        buf = create_unicode_buffer(512)
        if windll.kernel32.GetShortPathNameW(path, buf, len(buf)):
            path = buf.value
        try:
            sys.path.remove(encode(path))
        except (ValueError):
            pass


def generate_dependency_paths(name):
    """
    Accepts a dependency name and generates a dict containing the three standard
    import paths that are valid for the current machine.

    :param name:
        A unicode string name of the dependency

    :return:
        A dict with the following keys:
         - 'ver'
         - 'plat'
         - 'arch'
    """

    packages_dir = os.path.join(st_dir, u'Packages')
    dependency_dir = os.path.join(packages_dir, name)

    ver = u'st%s' % st_version
    plat = sublime.platform()
    arch = sublime.arch()

    return {
        'all': os.path.join(dependency_dir, 'all'),
        'ver': os.path.join(dependency_dir, ver),
        'plat': os.path.join(dependency_dir, u'%s_%s' % (ver, plat)),
        'arch': os.path.join(dependency_dir, u'%s_%s_%s' % (ver, plat, arch))
    }


def add_dependency(name, first=False):
    """
    Accepts a dependency name and automatically adds the appropriate path
    to sys.path, if the dependency has a path for the current platform and
    architecture.

    :param name:
        A unicode string name of the dependency

    :param first:
        If the path should be added to the beginning of the list
    """

    dep_paths = generate_dependency_paths(name)

    for path in dep_paths.values():
        if os.path.exists(encode(path)):
            add(path, first=first)


add_dependency('pygments')
add_dependency('backrefs')
add_dependency('markupsafe')
add_dependency('python-markdown')
add_dependency('python-jinja2')
add_dependency('mdpopups')

最後看一下檔案目錄:
Sublime Text 3 安裝 BracketHighlighter

Sublime Text 3 安裝 BracketHighlighter

④重啟Sublime

4 成功

最終終於成功了!!!

Sublime Text 3 安裝 BracketHighlighter

然後我們再點選 Quick Start Guide 和 Support Info

Sublime Text 3 安裝 BracketHighlighter

Quick Start Guide 相應Markdown檔案 能夠正常顯示

Support Info 所有外掛顯示正常

Sublime Text 3 安裝 BracketHighlighter

5 自定義配置

這個時候我們也可以自定義相應的配置,比如我不想要下劃線顯示,而是高亮顯示

Sublime Text 3 安裝 BracketHighlighter

找到大概在686行左右,將style中的underline改成highlight

Sublime Text 3 安裝 BracketHighlighter

PS:這裡有兩種修改方法

①直接在左面檔案及外掛預設配置檔案中進行修改,如果後期想要恢復最初的配置,那就得看你的記憶力好不好了。

②在右邊檔案中進行修改,這種方式是最好的,及複製左邊的檔案內容到右邊,在右邊及使用者檔案中進行修改,這樣不會影響外掛預設配置檔案,Sublime Text 3 優先讀取使用者自定義檔案。

如果大家還需要其他的配置,可以認真看這個配置檔案,註釋資訊寫的挺齊全的,當然如果英語不好或者時間緊迫的小夥伴,可以通過google、百度獲取相關配置資訊

6 總結

一:原因

​ 這次遇到安裝BracketHighlighter外掛問題的主要原因,是因為bitbucket伺服器有問題,導致無法下載python-jinja2markupsafe兩個依賴,社群目前正在處理這個問題。

二:自己的問題

其實如果按照官網離線下載,一步一步走下來,完全沒有問題,而自己通過 離線安裝+線上安裝,及自己下載python-jinja2markupsafe兩個無法線上下載的依賴,提前放到安裝包下,然後通過Package control 下載 BracketHighlighter,它會線上下載其餘4個依賴,結果看似是成功了,可是問題一大堆,BracketHighlighter無法識別python-jinja2markupsafe,相當於這個外掛僅僅是一個半成品。

三:剩餘問題

​ 雖然通過離線成功安裝了BracketHighlighter,可是還是有一些問題


Sublime Text 3 安裝 BracketHighlighter


Sublime Text 3 安裝 BracketHighlighter


Sublime Text 3 安裝 BracketHighlighter

四:思考

如果要使用離線安裝,那麼最好就不再安裝Package Control,後期等社群處理好 markupsafepython-jinja2這兩個依賴包問題,自己還是要使用Package Control 重新下載 BracketHighLighter

請尊重作者勞動成果,轉載請註明出處。以上內容若有侵權,請聯絡作者,立即刪除

相關文章