Редактор Atom: несколько фрагментов

Это такой простой вопрос, но я не могу найти никакой документации помимо readme.

Как я могу иметь несколько пользовательских фрагментов в Atom Editior:

Например, у меня есть это в моем snippets.cson прямо сейчас

'.source.js':
  'Normal Comment Block':
    'prefix': 'cmm'
    'body': """
      //**********************************************************************************
      //
      //**********************************************************************************
    """

'.source.js':
  'Dashed Comment Block':
    'prefix': 'c--'
    'body': """
      //----------------------------------------------------------------------------------
      //
      //----------------------------------------------------------------------------------
    """

Но cmm не работает, я могу использовать только последний элемент в snippets.cson. Есть какие нибудь идеи как это починить? У меня есть около десятка различных фрагментов, которые я бы хотел использовать, но я не могу понять, как правильно их включить.

Ответ 1

Формат файла конфигурации называется CSON, обозначение объекта CoffeeScript. Подобно JSON (JavaScript Object Notation), это текстовый формат для описания простых объектов. Из-за чего, когда вы указываете ключ дважды, например .source.js в вашем примере, второй экземпляр перезаписывает первый. Если у вас просто один .source.js все будет нормально работать:

'.source.js':
  'Normal Comment Block':
    'prefix': 'cmm'
    'body': """
      //**********************************************************************************
      // $1
      //**********************************************************************************
      $0
    """
  'Dashed Comment Block':
    'prefix': 'c--'
    'body': """
      //----------------------------------------------------------------------------------
      // $1
      //----------------------------------------------------------------------------------
      $0
    """

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

Ответ 2

В дополнение к объяснению @Lee, вот пример, если вы не собираетесь настраивать несколько фрагментов, организованных языком программирования:

# HTML Snippets
'.text.html':
  'HTML Comment':
    'prefix': '<!'
    'body': '<!-- $1 -->'

# Sass Snippets
'.source.scss':
  'Section Comment':
    'prefix': 'sc'
    'body': """
      /*=================================================
      $1
      =================================================== */
    """
  'Sub Section Comment':
    'prefix': 'ssc'
    'body': """
      /* $1
      =================================================== */
     """

# JavaScript Snippets
'.source.js':
  'jQuery - Bind Event':
    'prefix': 'bind'
    'body': """
       $( $1 ).on( '$2', '$3', function( $4 ) {
         $5
       });
    """

В этом примере я включил HTML, Sass и Javascript, но вы могли бы включить другие, такие как CSS,...

Надеюсь, это было полезно.

Ответ 3

Нашел странную ошибку с несколькими фрагментами в Atom. Я надеюсь, что этот ответ может помочь кому-то с той же проблемой (я использую Mac-версию Atom). Поэтому я пошел добавить новый фрагмент файла snippets.cson, и я скопировал старый фрагмент и вставил его ниже в качестве шаблона, подобного этому, и сохранил их, хотя они были тем же, что и '.source.php': 'Debug': 'prefix': 'prepr' 'body': """ echo "<pre>",print_r($_POST, 1),"</pre>"; die(); """ 'Debug': 'prefix': 'prepr' 'body': """ echo "<pre>",print_r($_POST, 1),"</pre>"; die(); """ После сохранения этого я отредактировал второй имеют другой заголовок и префикс и код тела '.source.php': 'Debug': 'prefix': 'prepr' 'body': """ echo "<pre>",print_r($_POST, 1),"</pre>"; die(); """ 'different': 'prefix': 'different' 'body': """ echo "different"; """ Я сохранил снова, отредактировав второй фрагмент. На этот раз вкладка expand для второго фрагмента не будет работать, однако первый из них все еще работает. После долгих раздумий с ним, убедившись, что у меня есть правильный синтаксис, я попытался догадаться, что, может быть, потому, что я сохранил с двумя дублирующими фрагментами, которые каким-то образом перепутались с выходом cson. Затем я удалил второй фрагмент, затем сохранил его только с первым, затем дублировал первый, затем изменил его, затем он сохранил его. После всего этого оба отрывка работали нормально.

Я несколько раз использовал несколько фрагментов и никогда не сталкивался с этой проблемой до сих пор. Настолько странно, но это так.

Ответ 4

Запуск следующего фрагмента с запятой, сопровождаемый новой строкой, создавая ту же структуру, что и первая работа для меня.

'.source.php':
'var dump':
'prefix': 'vd'
'body': """
    echo "<pre>";
    var_dump($);
    echo "</pre>";
""",

'this->db':
'prefix': 'trans'
'body': """
    $this->db->trans_start();
""",

'comment block':
'prefix': 'cm'
'body': """
    /****************************************
    *
    *
    ****************************************/
"""

Ответ 5

У меня была та же проблема, вот исправление:

'.source.js':
  'First function':
    'prefix': 'first'
    'body': """
    function $1() {
      var overall = true;
      if (overall)
      {
        var result = {};
        result.test1 = "";
        return test2(result);
      }
      return catched("");
    } """,

  'Next function':
    'prefix': 'next'
    'body': """
    function $1(result) {
      var overall = true;
      if (overall)
      {
        result.test1 = "";
        return test2(result);
      }
      return catched("");
    } """,

  'Next next function':
    'prefix': 'pz'
    'body': """
    function $1(result) {
      var overall = true;
      if (overall)
      {
        result.test1 = "";
        return test2(result);
      }
      return catched("");
    } """

Обратите внимание, что вам нужно сделать пару вещей:

  1. Добавьте запятую (,) после каждого "" ".
  2. Начните следующее определение в той же самой строке начала prev! Я действительно не понимал, почему это так. Но.. это так.
  3. Используйте '.source.PROGRAM LANGUAGE': только один раз для каждого языка.

Домой это помогает :)