Как переключать комментарии в столбце 1 в Sublime Text 3
В возвышенном тексте 3 Edit->Comment->Toggle Comment
(команда-/ на Mac) закомментирует текущий выбор (или текущую строку) или раскомментирует его, в зависимости от его текущего состояния. Это делается путем вставки пробела и начального символа (символов) комментария в начале текущей строки, в столбце, в котором начинается текущая строка, сохраняя начальные пробелы. Например, комментируя четвертую строку этого:
#***************************************************************************
sub invoke
{
my($self) = @_;
приведет к этому:
#***************************************************************************
sub invoke
{
# my($self) = @_;
Мне бы очень понравилось, если бы он выровнял по левому краю символ комментария, например так:
#***************************************************************************
sub invoke
{
# my($self) = @_;
Есть ли способ сделать это? Спасибо!
1 ответ
Предупреждение:
Для этого нужно возиться с одним из основных файлов Sublime. Не продолжайте, если вам это неудобно.
Тем не менее, изменения, которые вы будете вносить, не столь значительны и легко обратимы. Не волнуйся, я сделаю это легко.
Первое, что вам нужно сделать, это установить Package Control, если вы еще этого не сделали. Затем установите PackageResourceViewer
, Откройте палитру команд, введите prv
воспитывать PackageResourceViewer:
варианты и выберите PackageResourceViewer: Open Resource
, Прокрутите немного вниз, выберите Default
, затем прокрутите еще немного и выберите comment.py
открыть файл в Sublime. Теперь вы можете нажать Esc, чтобы закрыть командную палитру. Первые два определения функций выглядят так:
import sublime, sublime_plugin
def advance_to_first_non_white_space_on_line(view, pt):
while True:
c = view.substr(pt)
if c == " " or c == "\t":
pt += 1
else:
break
return pt
def has_non_white_space_on_line(view, pt):
while True:
c = view.substr(pt)
if c == " " or c == "\t":
pt += 1
else:
return c != "\n"
Сначала закомментируйте все строки advance_to_first_non_white_space_on_line()
кроме финала return
заявление:
def advance_to_first_non_white_space_on_line(view, pt):
# while True:
# c = view.substr(pt)
# if c == " " or c == "\t":
# pt += 1
# else:
# break
return pt
Продолжая на has_non_white_space_on_line()
закомментируйте все строки:
def has_non_white_space_on_line(view, pt):
# while True:
# c = view.substr(pt)
# if c == " " or c == "\t":
# pt += 1
# else:
# return c != "\n"
Затем создайте новую строку после return
введите отступ в 4 пробела и вставьте следующее:
return view.substr(pt) != "\n"
чтобы все это выглядело так:
def has_non_white_space_on_line(view, pt):
# while True:
# c = view.substr(pt)
# if c == " " or c == "\t":
# pt += 1
# else:
# return c != "\n"
return view.substr(pt) != "\n"
И это все! Сохраните файл, и просто для удовольствия попробуйте закомментировать некоторые строки в нем - вы увидите все #
символы комментария находятся в столбце 1.
Теперь это, очевидно, изменит поведение для всех языков, не только для Python, так что будьте к этому готовы. Чтобы отменить изменения, просто замените два определения функций на определения из первого блока кода выше. О, чтобы снова попасть в файл, вам не нужно проходить через PackageResourceViewer. Вместо этого выберите Preferences -> Browse Packages...
(или же Sublime Text -> Preferences -> Browse Packages...
если вы на OS X), чтобы открыть Packages
папку в файловом менеджере вашей операционной системы (Windows Explorer, Finder, Nautilus и т. д.). В Packages/Default
ты найдешь comment.py
Так же, как вы изменили это. Если вы хотите вернуться к тому, что было раньше, просто удалите этот файл, и все будет готово (оригинал хранится в другом месте, но перезаписывается, когда файл с одинаковым именем существует в Packages
).
Если вы действительно любите приключения, вы можете клонировать файл, переименовать его и изменить его, добавив логику, чтобы сделать такой отступ только для определенных языков, но это выходит за рамки этого ответа. Спросите на переполнение стека, если вы хотите знать, как это сделать.
Чтобы достичь всех языков без отмены каких-либо основных команд, вы можете просто создать файл с именем
disable_comment_indent.tmPreferences
(важно только расширение файла, а не само базовое имя) в вашем
Packages/User/
папка (т.е. где
Packages
относится к папке, открытой при переходе в меню "Настройки" -> "Обзор пакетов") со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>scope</key>
<string>source</string>
<key>settings</key>
<dict>
<key>shellVariables</key>
<array>
<dict>
<key>name</key>
<string>TM_COMMENT_DISABLE_INDENT</string>
<key>value</key>
<string>yes</string>
</dict>
</array>
</dict>
</dict>
</plist>