All autocomplete sublime text 3: evandrocoan/AllAutocomplete: Extend Sublime autocompletion to find matches in all open files of the current window

Использование 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" } ]

Главные настройки хранятся в файле ~/. &*|+=[]{}`~?", // использовать отступы пробелами по умолчанию "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" ] }

В sublimetext хорошо организована работа с проектами, между ними легко переключаться с сохранением открытых файлов. У каждого проекта есть свои собственные настройки, они хранятся в файле, который можно открыть из меню Project → Edit project, это точно такой же json, как и файл с настройками программы или хоткеев. Главный элемент этого конфига — объект 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 ).

Например, это может выглядеть следующим образом на основе примера в вашем вопросе:

 
    
]]>
    Вставить DIV с классом столбца
    столбец
    text.html

 

Фрагменты отформатированы в формате XML, и все, что находится между ![CDATA[ и ]] вставляется в буфер (не удаляйте

CDATA , даже если вы считаете, что он вам не нужен; если вы это сделаете, Sublime проигнорирует фрагмент).

TabTrigger указывает текст, который вы хотите использовать для запуска фрагмента, область действия указывает, в каких файлах должен запускаться фрагмент, а описание будет отображаться рядом с фрагментом в автоматическом режиме. — панель завершения.

Во фрагменте 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 символ в триггере ключ.

В дополнениях вы указываете область только один раз вверху, а не каждый раз, но есть некоторые функциональные различия между дополнениями и фрагментами.

  1. В файле sublime-snippet может быть только один фрагмент, но файл sublime-completes может содержать множество дополнений в одном файле; ключ завершений представляет собой массив, поэтому вы можете поместить более одного завершения в один и тот же файл.

  2. Завершения представляют собой JSON, поэтому содержимое, состоящее из нескольких строк или содержащее специальные символы JSON, такие как символ " , труднее вводить; дополнения лучше подходят для более коротких последовательностей, а фрагменты лучше подходят для более сложных вещей.

  3. Когда срабатывает автозаполнение, если есть завершение и фрагмент , которые могут быть автозаполнены, фрагменты всегда «выигрывают» и вставляются, в то время как завершение повторяется. Это означает, что, например, в этом конкретном примере вам нужно нажать Вкладка дважды, потому что col также является именем тега.

  4. Фрагменты автоматически появляются в палитре команд (когда они применяются), а завершения — нет. В палитре команд фрагменты отображаются в виде таких команд, как 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. Чтобы исправить это нежелательное автозаполнение, вам нужно отключить собственное автозаполнение вашего расширения.

Проблема с проблемой: Есть два отдельных выделения синтаксиса, (вероятно) ни один из которых вам не нужен.

  1. Собственное автозаполнение Markdown — это даст вам предложение любого слова во всем открытом документе.
  2. Автозаполнение 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 имеет лота файлов настроек, и они обычно работают следующим образом: глобальное значение по умолчанию переопределяется глобальным пользователем, которое переопределяется языковым значением по умолчанию, которое переопределяется языковым пользователем. Обычно вы получаете доступ к языковым настройкам через «Настройки» -> «Настройки» — «Специфический синтаксис».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *