GoLint / GoType GoSublime не работает (без дубликатов)
Возникла проблема с включением / обнаружением 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 (не установлен) - еще одна интересная вещь, на которую, как я признаю, я раньше не обращал внимания в других системах.
Так что это проблема с конфигурацией плагина Linter, которая проксируется из плагина GoSublime, я бы мог представить? Я полагаю, что он настроен правильно, так как я копирую и вставляю каталоги, и они работают в терминале (сообщая, что нет typeo).
# GoSublime.sublime-settings (User)
{
"env": {
"GOROOT": "/usr/local/go",
"GOPATH": "$HOME/go",
"PATH": "$PATH:$GOROOT/bin:$GOPATH/bin"
}
}
Марго не жалуется, что больше не может найти ГОПАТУ; Итак, я правильно установил, и это обнаружено.
Я даже порылся в прекрасных настройках 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
Но все же я продолжаю получать эти ошибки, как уже упоминалось в начале.
Заранее спасибо!
1 ответ
Я починил это. Проблема была в незнании bash
конфигурационные файлы. Я нашел подробности на странице SublimeLinter для устранения неисправностей пользовательских линтеров.
http://www.sublimelinter.com/en/latest/troubleshooting.html
Включив Debug, я увидел, что расширенный PATH, который использовал SublimeLinter, не включал в себя какие-либо из моих пользовательских настроек PATH.
Короткий ответ:
- переместить все ваши
GO
переменные к.bash_profile
файл - переместить все ваши
PATH
переменные к тому же.bash_profile
файл - добавить строку в ваш
.bashrc
файл для выполнения.bash_profile
файл для интерактивных терминалов
(Более длинный ответ ниже, для пользователей Linux)
При запуске терминала это "интерактивная" оболочка bash. Баш читает .bashrc
только файл, который я правильно настроил. У меня не было .bash_profile
Как мой .bashrc
отлично работал для интерактивных оболочек со всеми моими настройками.
Но из SublimeLinter он загружает оболочку bash "login", которая не является интерактивной. В Linux это только загружает .bash_profile
файл - не .bashrc
файл.
Исправление:
Добавьте это к вершине вашего
.bashrc
файл:источник ~/.bash_profile
Переместите переменные GO и изменения PATH (и FYI, ВСЕ ДРУГИЕ записи пути, которые вы изменили в этом файле.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