Использование Sublime Text 3 — Expertus metuit
Когда-то я писал о личном опыте использвания Sublime Text 2, а после выхода Sublime Text 3 решил начать новую статью, ориентированную именно на версию 3 с небольшим акцентом на миграцию с 2 на 3.
Sublime Text — это профессиональный программерский текстовый редактор. Он завоевал очень большую популярность благодаря проработанности интерфейса, кроссплатформенности, удобной и простой расширяемости плагинами. Мои впечатления со времён написания первой статьи не особо изменились, поэтому я второй раз их переписывать не буду.
В самом начале нужно поставить «главное расширение» Package Control, потом через него можно ставить другие, включать/отключать и так далее. Процесс установки описан здесь.
Ниже список расширений, которые не входят в начальную поставку, но весьма полезны (они все ставятся через Package Control).
- SyncedSideBar
- Синхронизует текущий открытый файл с деревом файлов в панели слева.
- Sublime Linter
- Проверка синтаксиса в реальном времени, подсвечивает места в коде, содержашие (потенциальные) ошибки и прочие «плохие» места. Использует внешние программы для собственно проверки, например, для XML использует
xmllint
, для Java —javac -Xlint
. - CommentsAwareEnter
- «Умный» Enter внутри комментария, позволяет писать, например, многострочные комментарии автоматически, просто нажимая на Enter. Работает с комментариями типа
//
, но не с/* */
. - DocBlockr
- Упрощает работу с комментариями, автоматически расширяет
/** */
-блоки, например. - All Autocomplete
- Включает поиск для автодополнения по всем открытым в редакторе файлам, а не только в текущем. Я для себя этот проект форкнул и немного подредактировал, чтобы исправить несколько надоедливых багов (https://github.com/sigsergv/SublimeAllAutocomplete).
А вот эти расширения я пробовал, но отказался от них из-за большого количества багов.
- Sublime CodeIntel
- Более удобная работа с кодом: переход по символам (Alt+Click), подсказки с аргументами функций, более качественное автодополнение. Заявлена поддержка вот этого зоопарка: PHP, Python, RHTML, JavaScript, Smarty, Mason, Node.js, XBL, Tcl, HTML, HTML5, TemplateToolkit, XUL, Django, Perl, Ruby, Python3
В Sublime Text очень активно используется клавиатура, очень много хоткеев на все случаи, но они часто отличаются от хоткеев из других редакторов. Посмотреть текущие можно через меню Preferences → Key Bindings — Default, откроется таб конфигом текущих системных хоткеев. Можно эти хоткеи менять на свои, но лучше это делать через пользовательский конфиг хоткеев, он открывается из меню Preferences → Key Bindings — User
Ниже идёт конфиг, который я использую, в нём частично хоткеи из еклипса, частично мои собственные.
// eclipse-like key bindings, for sublime text v.3 (macos) // author: Sergey Stolyarov <[email protected]> [ // disable some hotkeys { "keys": ["ctrl+f3"], "command": "unbound" }, { "keys": ["ctrl+shift+f3"], "command": "unbound" }, { "keys": ["ctrl+g"], "command": "unbound" }, { "keys": ["ctrl+q"], "command": "unbound" }, // find selected text { "keys": ["super+k"], "command": "find_under" }, { "keys": ["super+shift+k"], "command": "find_under_prev" }, // delete word before cursor { "keys": ["super+w"], "command": "delete_word", "args": { "forward": false } }, // delete line (default ctrl+shift+k) { "keys": ["ctrl+d"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"} }, // auto completion { "keys": ["super+p"], "command": "auto_complete" }, // open files list overlay { "keys": ["ctrl+3"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} }, // add line { "keys": ["shift+enter"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Add Line. sublime-macro"} }, { "keys": ["ctrl+shift+p"], "command": "move_to", "args": {"to": "brackets"} }, { "keys": ["super+shift+p"], "command": "move_to", "args": {"to": "brackets"} }, // jump to line { "keys": ["super+l"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} }, { "keys": ["ctrl+l"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} }, // use Ctrl+H for searching in files { "keys": ["ctrl+h"], "command": "show_panel", "args": {"panel": "find_in_files"} }, { "keys": ["super+h"], "command": "show_panel", "args": {"panel": "find_in_files"} }, { "keys": ["ctrl+shift+f"], "command": "unbound" }, { "keys": ["super+shift+f"], "command": "unbound" }, // use Ctrl+F both for searching and replacing { "keys": ["ctrl+f"], "command": "show_panel", "args": {"panel": "replace"} }, { "keys": ["super+f"], "command": "show_panel", "args": {"panel": "replace"} }, // expand selection to complete line { "keys": ["super+shift+l"], "command": "expand_selection", "args": {"to": "line"} }, { "keys": ["ctrl+shift+l"], "command": "expand_selection", "args": {"to": "line"} }, // case conversions { "keys": ["alt+up"], "command": "upper_case" }, { "keys": ["alt+down"], "command": "lower_case" }, // close all opened tabs {"keys": ["shift+ctrl+w"], "command": "close_all"}, // open methods lookup { "keys": ["ctrl+r"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"} }, { "keys": ["f3"], "command": "find_next" } ]
Главные настройки хранятся в файле В sublimetext хорошо организована работа с проектами, между ними легко переключаться с сохранением открытых файлов. У каждого проекта есть свои собственные настройки, они хранятся в файле, который можно открыть из меню Project → Edit project, это точно такой же json, как и файл с настройками программы или хоткеев. Главный элемент этого конфига — объект Помимо Самая главная проблема — автодополнение кода, оно крайне примитивно и очень быстро стандартного автодополнения становится мало. Нормальных плагинов, которые бы эту проблему решали, пока нет. Правильный способ сделать что-то подобное — использовать фрагменты или дополнения. Хотя есть некоторые различия, в целом они оба работают одинаково, и какой из них вы выберете, зависит от того, сколько таких элементов вы хотите создать и насколько сложными они должны быть. Используя фрагмент, вы должны выбрать Например, это может выглядеть следующим образом на основе примера в вашем вопросе: Фрагменты отформатированы в формате XML, и все, что находится между TabTrigger ~/. &*|+=[]{}`~?",
// использовать отступы пробелами по умолчанию
"translate_tabs_to_spaces": true,
// файлы для игнора в разных списках
"file_exclude_patterns": [
"build/*",
"*.pyc"
],
// включаем перенос по словам
"word_wrap": true,
// скрываем кнопки закрывания табов, пользуемся нажатием на колесо для этого
"show_tab_close_buttons": false,
// делаем табы с несохранёнными изменениями более заметными
"highlight_modified_tabs": true,
// отключаем переключение табов колесом мыши
"mouse_wheel_switches_tabs": false,
// отключаем плавную прокрутку
"scroll_speed": 0,
// всегда показывать текующую позицию в минимапе
"always_show_minimap_viewport": true,
// включаем автоматическую синхронизацию для плагина SyncedSideBar
"reveal-on-activate": true,
// отключаем «схлапывание» табов
"enable_tab_scrolling": false,
// включаем показ кодировки в статусбаре
"show_encoding": true,
// при поиске подставлять выделенный текст в поле поиска
"find_selected_text": true,
// позволяет прокручивать текст за пределы конца файла
"scroll_past_end": true,
"ignored_packages":
[
"Vintage"
]
}
указывает текст, который вы хотите использовать для запуска фрагмента, область действия folders
, в нём для каждой папки проекта создаётся отдельный объект, элемент path
задаёт путь к папке.path
там могут находиться и другие элементы, например, name
(строкового типа) задаёт отображаемое имя каталога в дереве проекта. Другие полезные элементы — списки file_exclude_patterns
и folder_exclude_patterns
. Вот простейший пример проектного конфига:{
"folders":
[
{
"path": "/home/user/projects/pyrone",
"file_exclude_patterns": ["*.in", "*.pyc"],
"folder_exclude_patterns": ["pyrone.egg-info", "storage", "data"]
}
]
}
html — Как добавить автозаполнение Sublime Text 3
Инструменты > Разработчик > Новый фрагмент...
из меню и заполнить шаблон фрагмента, а затем сохранить его как файл sublime-snippet
в местоположении, которое Sublime использует по умолчанию (это ваш пакет User
).
![CDATA[
и ]]
вставляется в буфер (не удаляйте CDATA
, даже если вы считаете, что он вам не нужен; если вы это сделаете, Sublime проигнорирует фрагмент).
указывает, в каких файлах должен запускаться фрагмент, а описание
будет отображаться рядом с фрагментом в автоматическом режиме. — панель завершения.
Во фрагменте tabTrigger
, scope
и description
являются необязательными. Если вы не укажете tabTrigger
, вы можете развернуть фрагмент только из палитры команд или с помощью команды insert_snippet
(например, в привязке клавиш). Без области
сниппет применяется везде, а без описания
у него нет описания в панели.
Если у вас много таких элементов, для которых вы хотите добавить фрагменты, вы также можете вместо этого использовать дополнения. Они хранятся в файлах JSON с расширением 9.0005 sublime-completions
User
(используйте Preferences > Browse Packages. ..
, если вы не знаете, где это находится.Пример такого файла:
{ "область": "text.html", "доработки": [ { "trigger": "col\tInsert DIV с классом столбца", "contents": "" }, ] }В этом формате триггер
всегда является текстом для запуска, а описание (все еще необязательное) отделяется от триггера цифрой 9.0005\t символ в
триггере
ключ.В дополнениях вы указываете область только один раз вверху, а не каждый раз, но есть некоторые функциональные различия между дополнениями и фрагментами.
В файле
sublime-snippet
может быть только один фрагмент, но файлsublime-completes
может содержать множество дополнений в одном файле; ключзавершений
представляет собой массив, поэтому вы можете поместить более одного завершения в один и тот же файл.Завершения представляют собой JSON, поэтому содержимое, состоящее из нескольких строк или содержащее специальные символы JSON, такие как символ
"
, труднее вводить; дополнения лучше подходят для более коротких последовательностей, а фрагменты лучше подходят для более сложных вещей.Когда срабатывает автозаполнение, если есть завершение
и фрагмент
, которые могут быть автозаполнены, фрагменты
всегда «выигрывают» и вставляются, в то время как завершение повторяется. Это означает, что, например, в этом конкретном примере вам нужно нажать Вкладка дважды, потому что
col
также является именем тега.Фрагменты автоматически появляются в палитре команд (когда они применяются), а завершения — нет. В палитре команд фрагменты отображаются в виде таких команд, как
Snippet: Something
, гдеSomething
— этоописание
, если оно существует, и имя файла, если его нет.В любом случае вы можете сделать так, чтобы фрагмент/дополнение применялись только к определенным типам файлов, применив
объем
; чтобы определить соответствующую область, поместите курсор в файле в соответствующее место и выберитеИнструменты > Разработчик > Показать имя области. ..
; чем большую часть отображаемой области вы используете, тем более конкретной она становится. Как правило, достаточно верхнего уровня, напримерtext.html
, если только вы не делаете что-то особенное.Исправление автозаполнения в синтаксисе Sublimetext Markdown — River Writes
Эта страница выглядит лучше всего с включенным JavaScript
Этот пост является попыткой сделать решение проблемы, на решение которой я потратил более двух часов, более заметным. Возможно, копирование приведенного ниже фрагмента кода json в настройки Sublime для плагина
SublimeCodeIntel
решит вашу проблему; если так, отлично! Если нет, вот подборка контекста, который, надеюсь, поможет вам отладить вашу проблему.Проблема: При использовании подсветки синтаксиса Markdown (например, MarkdownEditing) при вводе текста отображается нежелательное автозаполнение. (Это произошло потому, что я начал писать контент для этого блога. )
Обычное решение: Как правило, эту проблему можно решить, установив
auto_complete: false
в настройках синтаксиса. Возможно, это решит вашу проблему.Проблема с обычным решением: Есть некоторые расширения, которые имеют свои собственные функции автозаполнения, которые работают отдельно от встроенного в Sublime
auto_complete
. У меня естьSublimeCodeIntel
, и пока я искал проблемы, я также видел упоминание оДжедай
иCodeComplice
. Если вы пытаетесь проверить, есть ли у вас такой пакет, вы можете проверить метку автозаполнения в Package Control. Чтобы исправить это нежелательное автозаполнение, вам нужно отключить собственное автозаполнение вашего расширения.Проблема с проблемой: Есть два отдельных выделения синтаксиса, (вероятно) ни один из которых вам не нужен.
- Собственное автозаполнение Markdown — это даст вам предложение любого слова во всем открытом документе.
- Автозаполнение Markdown — это , а также , показывающее автозаполнение HTML внутри синтаксиса Markdown. В целом это имеет смысл, а также, если вы проверите текущую область (сочетание клавиш по умолчанию — ctrl+alt+shift+P), вы можете сказать, что область считается HTML, в частности
text.html.markdown
илиtext.html.markdown. gfm
или что-то в этом роде.Фактическое решение: Итак, вариант 1 — просто отключить любое автозаполнение, которое у вас есть. Но допустим, вы хотите сохранить его. В SublimeCodeIntel вам нужно будет добавить следующее:
1 2 3 4 5 6 7 8 9 10 11 12 "codeintel_live_disabled_languages": [ "разметка", "уценка", "html", ], "codeintel_enabled_languages": [ «JavaScript», «SCSS», «Питон», «Ruby», «Python3», «XML», «Sass», «HTML5», «Perl», «CSS», «Twig», «Less», «Node. js», «TemplateToolkit», «PHP» ],Языки, которые у вас есть, могут различаться, важная часть — отключить разметку И уценку, а также УДАЛИТЬ html из включенных языков. Параметр включенных языков перезаписывает список отключенных языков.
Обратите внимание, что вы можете на самом деле захотеть сохранить автозаполнение HTML, поскольку эти предложения более полезны, чем все предложения по уценке/увеличению, которые представляют собой «буквально любое слово на всей странице».
Дополнительная информация: В связи с этим, MarkdownEditing хранит свои настройки в очень странном месте . Sublime имеет лота файлов настроек, и они обычно работают следующим образом: глобальное значение по умолчанию переопределяется глобальным пользователем, которое переопределяется языковым значением по умолчанию, которое переопределяется языковым пользователем. Обычно вы получаете доступ к языковым настройкам через «Настройки» -> «Настройки» — «Специфический синтаксис».