GoSublime GoLint / GoType не работает (нет дубликатов)

Возникла проблема с включением / обнаружением GoSublime + Linters при тестировании Debian в Sublime 3. Я делал это полдюжины раз на компьютерах с OSX и Windows без сбоев.

Консоль ST говорит:

SublimeLinter: debug mode: off 
SublimeLinter: annotations activated: <builtin> 
SublimeLinter: WARNING: golint deactivated, cannot locate 'golint' 
SublimeLinter: WARNING: gotype deactivated, cannot locate 'gotype' 
SublimeLinter: WARNING: govet deactivated, cannot locate 'go'

Интересно, как он говорит, что не может найти go, поскольку я не замечал этого раньше при настройке с предыдущими ошибками (которые я исправил). Go есть, как показывает GoSublime:

GoSblime r13.12.26-3 sh: load env vars ['/bin/bash', '--login', '-c', 'echo "..."']: go version: ['/usr/local/go/bin/go', 'version'] -> `go version go1.3.1 linux/amd64
` -> `go1.3.1`: 0.043s
GoSublime r13.12.26-3: init mod(mg9)
SublimeLinter: debug mode: off 
SublimeLinter: json activated: <builtin> 
SublimeLinter: annotations activated: <builtin> 

** 2014-09-18 08:48:11.608847 **:
GoSublime init r13.12.26-3 (0.001s)
|   install margo: no
|   install state: done
| sublime.version: 3065
| sublime.channel: stable
|       about.ann: a14.02.25-1
|   about.version: r13.12.26-3
|         version: r13.12.26-3
|        platform: linux-x64
|            ~bin: ~/.config/sublime-text-3/Packages/User/GoSublime/linux-x64/bin
|       margo.exe: ~bin/gosublime.margo_r13.12.26-3_go1.3.1.exe (ok)
|          go.exe: /usr/local/go/bin/go (ok)
|      go.version: go1.3.1
|          GOROOT: /usr/local/go
|          GOPATH: ~/go
|           GOBIN: (not set) (should usually be `(not set)`)
|       set.shell: ['/bin/bash', '--login', '-c', '$CMD']
|       env.shell: /bin/bash
|       shell.cmd: ['/bin/bash', '--login', '-c', '${CMD}']
--------------------------------

GOBIN (not set) — еще один интересный параметр, на который, признаюсь, я раньше не обращал внимания в других системах.

Я так понимаю, это проблема с конфигурацией плагина Linter, которая проксируется из плагина GoSublime? Я считаю, что я установил его правильно, так как я копирую и вставляю каталоги, и они работают в терминале (говоря мне, что нет typeo).

# GoSublime.sublime-settings (User)
{
    "env": { 
        "GOROOT": "/usr/local/go",
        "GOPATH": "$HOME/go",
        "PATH": "$PATH:$GOROOT/bin:$GOPATH/bin"
    }
}

MarGo также не жалуется, что больше не может найти GOPATH; Итак, у меня есть правильный набор, и он обнаружен.

Сегодня я даже покопался в замечательных настройках GoSublime, чтобы попытаться решить эту проблему, и нашел самородок о настройке команды оболочки, которую я могу указать для bash; Итак, у меня сейчас есть это:

"shell": ["/bin/bash", "--login", "-c", "$CMD"],
"env": { 
    "GOROOT": "/usr/local/go",
    "GOPATH": "$HOME/go",
    "PATH": "$PATH:$GOROOT/bin:$GOPATH/bin"
},

Но и это не помогло.

Используя следующее:

Debian Testing (all updated packages)
i3 Window Manager (though I don't think this worked with Gnome)
Go 1.3.1 (built from source release, located at /usr/local/go)
SublimeText 3 3065 (registered)
GoSublime (latest as of posting)
go get github.com/golang/lint (and working in terminal) 
go get code.google.com/p/go.tools/cmd/gotype (works in terminal)
go vet (working in terminal)

Все пути настроены правильно.

# i3wm
exec GOPATH="$HOME/go"
exec GOROOT="/usr/local/go"
exec PATH="$PATH:$GOROOT/bin:$GOPATH/bin"

# .bashrc
export GOPATH="$HOME/go"
export GOROOT="/usr/local/go"
PATH="$PATH:$GOROOT/bin:$GOPATH/bin"

Они отлично работают, и я могу запускать команды Go, устанавливать пакеты и т. Д. Как с терминала, так и с i3 (написание некоторых пользовательских статусбаров в Go).

GoType и GoLint также установлены, и я могу запустить их из bash.

Общий SublimeLinter загружен правильными линтерами.

reloading plugin SublimeLinter-annotations.linter
SublimeLinter: annotations linter loaded 
reloading plugin SublimeLinter-contrib-golint.linter
SublimeLinter: golint linter loaded 
reloading plugin SublimeLinter-contrib-gotype.linter
SublimeLinter: gotype linter loaded 
reloading plugin SublimeLinter-contrib-govet.linter
SublimeLinter: govet linter loaded 
reloading plugin SublimeLinter-json.linter
SublimeLinter: json linter loaded 
reloading plugin sublimelint.commands
reloading plugin sublimelint.sublimelint

Но тем не менее, я продолжаю получать эти ошибки, как упоминалось в начале.

Заранее спасибо!


person eduncan911    schedule 18.09.2014    source источник


Ответы (1)


Я починил это. Проблема заключалась в незнании bash конфигурационных файлов. Я нашел подробности на странице SublimeLinter для устранения неполадок пользовательских линтеров.

http://www.sublimelinter.com/en/latest/troubleshooting.html#special-considerations-for-bash

Включив отладку, я увидел, что расширенный PATH, который использовал SublimeLinter, не включает ни одну из моих пользовательских настроек PATH.

Краткий ответ:

  • переместите все ваши переменные GO в файл .bash_profile
  • переместите все ваши переменные PATH в тот же файл .bash_profile
  • добавьте строку в файл .bashrc для выполнения файла .bash_profile для интерактивных терминалов

(Длинный ответ ниже для пользователей Linux)

При запуске терминала это «интерактивная» оболочка bash. bash читает только файл .bashrc, который я правильно настроил. У меня не было .bash_profile, так как мой .bashrc отлично работал для интерактивных оболочек со всеми моими настройками.

Но изнутри SublimeLinter это загружает оболочку bash для входа в систему, которая не является интерактивной. В Linux загружается только файл .bash_profile, а не файл .bashrc.

Исправление:

  • Добавьте это в начало файла .bashrc:

    источник ~/.bash_profile

  • Переместите свои переменные GO и изменения PATH (и, к вашему сведению, ВСЕ ДРУГИЕ записи пути, которые вы изменили в этом файле .bashrc) в новый файл .bash_profile. Обязательно удалите их из .bashrc.

Готово. Закройте Sublime и снова откройте. Путь теперь подобран правильно.

Это работает, потому что файл source ~/.bash_profile читается на каждом интерактивном терминале, который вы открываете, потому что там используется файл .bashrc. Но для сеансов только для входа, например, из SublimeLinter, используется только .bash_profile — ваш .bashrc не выполняется.

Итак, вы хотите указать свои пользовательские переменные GO (GOROOT, GOPATH и т. д.) только в вашем .bash_profile, а не в .bashrc. Но чтобы прочитать этот файл .bash_profile из интерактивных оболочек (например, терминалов), вы должны выполнить этот файл .bash_profile. Мы делаем это с первой строкой, которую нужно добавить вверху вашего файла .bashrc: source ~/.bash_profile. Это запускает сценарий профиля, который всасывает ваши пользовательские переменные GO, а также все ваши пользовательские переменные PATH.

(для OSX) См. первую ссылку выше в этом комментарии.

Подробнее о файлах bash можно прочитать здесь: http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html

person eduncan911    schedule 08.10.2014