Sublime Text 3: как выделить несколько слов и вставить их в одну строку, разделенную запятыми?

Когда вы выбираете несколько слов в Sublime (удерживая нажатой клавишу Ctrl) и вставляете их в одно место, по умолчанию каждое слово отделяется от следующего символом \n. Я хотел бы изменить это на запятую и, при желании, поставить кавычки вокруг каждого слова. Мне интересно, есть ли простой способ сделать это. Любая помощь приветствуется.


person mahin    schedule 27.05.2014    source источник
comment
Просто предложение; после вставки вы можете нажать Ctrl+h и выполнить поиск REGEX для \n и заменить на "," в своем выборе. Вам просто нужно добавить " в начале и в конце строки.   -  person Jongosi    schedule 27.05.2014
comment
Я делаю это достаточно часто, чтобы ярлык сэкономил мне много времени. И я понял, что я не могу быть единственным в этой ситуации.   -  person mahin    schedule 27.05.2014


Ответы (1)


Вот что я бы сделал с некоторыми встроенными ярлыками:

  1. каким-то образом выберите строки, которые вы только что вставили (например, expand_selection_to_paragraph, который можно сопоставить)
  2. ctrl+shift+l, чтобы сделать их мультикурсорными
  3. ctrl+j для соединения строк
  4. переместите курсор в конец каждого выделения, двигаясь вправо, вставьте запятую, которая будет стоять между каждым выделением.

Если вы хотите написать плагин, чтобы упростить его (и настроить в соответствии с вашими потребностями). Вот очень грубый, который я использую, чтобы сделать выбор в объект списка Python. Не стесняйтесь изменять и сопоставлять ключ.

import sublime, sublime_plugin

class PythonListifyCommand(sublime_plugin.TextCommand):
    """Change a selected text into a Python list structure.

    Basically this is done by replacing space, comma, tab with comma.  
    Then Python list brackets are attached to both start and end to make 
    a Python list.

    If ther are multiple selections, then multiple lists will be created.
    If any selection is of zero length, then that particular line will 
    be listified.  There will always be a comma at the end of each line, 
    this is to make sure multiple line list can connect up.  Python does 
    not mind extra comma at the end of a list inside bracket.
    """
    def listify(self,line):
        import re
        no_leading = re.sub('^[ ,\t]+','',line)
        no_leading = re.sub('\n[ ,\t]+','\n',no_leading)
        in_line = re.sub('[ ,\t]+',',',no_leading)
        end_line_comma = re.sub('\n',',\n',in_line)
        return end_line_comma

    def run(self, edit):
        sel = self.view.sel()
        view = self.view

        for s in sel:
            if s.a == s.b:
                r = view.line(s)
            else:
                r = s
            rep = '[' + self.listify(view.substr(r)) + ']'
            if rep[-1] is ']' and rep[-2] is '\n':
                rep = rep[:-2] + ']\n'
            view.replace(edit, r, rep)
person Angus Yeh    schedule 28.05.2014