Решил детально поисследовать редактор Sublime Text 2, который в последнее время стал сильно популярен в интернетах. В целом программа хорошая, вполне вполне сгодится как профессиональный текстовый редактор. Отлично подойдёт для программиста-на-всём (код раскрашивает, скобки подсвечивает).
Начальная конфигурация вполне удобная, хоткеи отторжения не вызывают, но требуют привыкания после Eclipse, например. Впрочем, все хоткеи настраиваемые.
Огромные возможности по настройке — всё делается через текстовые конфиги прямо в самом редакторе. Можно писать расширения на питоне. И этих расширений уже настрогал огромное количество.
Это была вводная часть, а сейчас про мой опыт работы и настройки редактора (будет расширяться со временем).
Расширения¶
В самом начале нужно поставить «главное расширение» Package Control (инструкция по ссылке), потом через него можно ставить другие, включать/отключать и так далее.
Ниже список расширений, которые не входят в начальную поставку, но весьма полезны.
- SyncedSideBar
- Синхронизует текущий открытый файл с деревом файлов в панели слева.
- Sublime Linter
- Проверка синтаксиса в реальном времени, подсвечивает места в коде, содержашие (потенциальные) ошибки и прочие «плохие» места. Использует внешние программы для собственно проверки, например, для XML использует
xmllint
, для Java —javac -Xlint
. - CommentsAwareEnter
- «Умный» Enter внутри комментария, позволяет писать, например, многострочные комментарии автоматически, просто нажимая на Enter. Работает с комментариями типа
//
, но не с/* */
. - DocBlockr
- Упрощает работу с комментариями, автоматически расширяет
/** */
-блоки, например. - All Autocomplete
- Включает поиск для автодополнения по всем открытым в редакторе файлам, а не только в текущем.
А вот эти расширения я пробовал, но отказался от них из-за большого количества багов.
- 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. Дальше в официальной документации читайте.
Ниже идёт конфиг, который я использую, в нём частично хоткеи из еклипса, частично мои собственные.
:::javascript
// eclipse-like key bindings, for sublime text v.2
// author: Sergei Stolyarov <[email protected]>
[
{ "keys": ["ctrl+f3"], "command": "unbound" },
{ "keys": ["ctrl+shift+f3"], "command": "unbound" },
// find selected text
{ "keys": ["ctrl+k"], "command": "find_under" },
{ "keys": ["ctrl+shift+k"], "command": "find_under_prev" },
// delete word before cursor
{ "keys": ["ctrl+w"], "command": "delete_word", "args": { "forward": false } },
// delete line
{ "keys": ["ctrl+d"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Line.sublime-macro"} },
// auto completion
{ "keys": ["ctrl+p"], "command": "auto_complete" },
{ "keys": ["ctrl+space"], "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": "Packages/Default/Add Line.sublime-macro"} },
{ "keys": ["ctrl+shift+p"], "command": "move_to", "args": {"to": "brackets"} },
// jump to line
{ "keys": ["ctrl+g"], "command": "unbound" },
{ "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": ["ctrl+shift+f"], "command": "unbound" },
// use Ctrl+F both for searching and replacing
{ "keys": ["ctrl+f"], "command": "show_panel", "args": {"panel": "replace"} },
// case convertions
{ "keys": ["alt+up"], "command": "upper_case" },
{ "keys": ["alt+down"], "command": "lower_case" }
]
Настройка¶
Preferences.sublime-settings¶
Главные настройки хранятся в файле ~/.config/sublime-text-2/Packages/User/Preferences.sublime-settings
, там внутри обычный текст. Настройки из него перекрывают файл с настройками по умолчанию (он хранится в ~/.config/sublime-text-2/Packages/Default/Preferences.sublime-settings
). Ниже конфиг с моими настройками :
:::javascript
{
"color_scheme": "Packages/Color Scheme - Default/Mac Classic.tmTheme",
// включаем подсветку строки с курсором
"highlight_line": true,
// ставим любимый шрифт
"font_face": "Liberation Mono",
// и размер шрифта
"font_size": 10,
// отключить автоматическое появление меню autocomplete
"auto_complete": false,
// меняем символы-сепараторы слов
"word_separators": "./\\()\"'-:,.;<>~!@#%^&*|+=[]{}`~?",
// использовать отступы пробелами по умолчанию
"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,
"ignored_packages":
[
"Vintage"
]
}
Работа с проектами¶
В sublimetext хорошо организована работа с проектами, между ними легко переключаться с сохранением открытых файлов. У каждого проекта есть свои собственные настройки, они хранятся в файле, который можно открыть из меню Project → Edit project, это точно такой же json, как и файл с настройками программы или хоткеев. Главный элемент этого конфига — объект folders
, в нём для каждой папки проекта создаётся отдельный объект, элемент path
задаёт путь к папке.
Помимо path
там могут находиться и другие элементы, например, name
(строкового типа) задаёт отображаемое имя каталога в дереве проекта. Другие полезные элементы — списки file_exclude_patterns
и folder_exclude_patterns
. Вот простейший пример проектного конфига:
:::javascript
{
"folders":
[
{
"path": "/home/user/projects/pyrone",
"file_exclude_patterns": ["*.in", "*.pyc"],
"folder_exclude_patterns": ["pyrone.egg-info", "storage", "data"]
}
]
}
Недостатки¶
Самая главная проблема — автодополнение кода, оно крайне примитивно и очень быстро стандартного автодополнения становится мало. Нормальных плагинов, которые бы эту проблему решали, пока нет.