Подтвердить что ты не робот

Могу ли я добавить дату времени для возвышенного фрагмента?

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

<snippet>
    <content><![CDATA[
/**
 * Author:      $1
 * DateTime:    $2
 * Description: $3
 */

]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>/header</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <scope>source.css,source.js,source.php</scope>
</snippet>
4b9b3361

Ответ 1

Инструменты > Новый плагин

Вставьте это:

import datetime, getpass
import sublime, sublime_plugin
class AddDateCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.run_command("insert_snippet", { "contents": "%s" %  datetime.date.today().strftime("%d %B %Y (%A)") } )

class AddTimeCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.run_command("insert_snippet", { "contents": "%s" %  datetime.datetime.now().strftime("%H:%M") } )

Сохраните его как ~/Library/Поддержка приложений /Sublime Text 2/Пакеты/Пользователь/add_date.py

Затем в разделе "Настройки" > "Ключевые привязки" - "Пользователь" добавьте:

{"keys": ["ctrl+shift+,"], "command": "add_date" },
{"keys": ["ctrl+shift+."], "command": "add_time" },

Вы можете настроить аргумент, переданный strftime по своему усмотрению.

Ответ 2

Nachocab, это был БОЛЬШОЙ ответ - и очень помог мне. Я создал немного другую версию для себя

~/Library/Поддержка приложений /Sublime Text 2/Пакеты/Пользователь/datetimestamp.py:

import datetime, getpass
import sublime, sublime_plugin

class AddDateTimeStampCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.run_command("insert_snippet", { "contents": "%s" %  datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") } )

class AddDateStampCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.run_command("insert_snippet", { "contents": "%s" %  datetime.datetime.now().strftime("%Y-%m-%d") } )

class AddTimeStampCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.run_command("insert_snippet", { "contents": "%s" %  datetime.datetime.now().strftime("%H:%M:%S") } )

Настройки > Ключевые привязки - Пользователь:

{"keys": ["super+alt+ctrl+d"], "command": "add_date_time_stamp" },
{"keys": ["super+alt+d"], "command": "add_date_stamp" },
{"keys": ["super+alt+t"], "command": "add_time_stamp" }

Я бы не смог сделать это без вашей помощи! Я просмотрел Google около часа и, наконец, был украшен вашим ответом! Большое спасибо!

Ответ 4

Вы можете использовать плагин SMART Snippets для Sublime Text 2.

С помощью SMART Snippets вы можете теперь использовать Python для динамического создания фрагменты

Я провел некоторое исследование для другого question, и я уверен, что этот плагин может решить ваш вопрос.

Ответ 5

Я просто реализую эту функцию (в sublime3) с помощью простого плагина и файла метаданных (файл .tmPreference), но я не знаю, насколько это эффективно. Есть способ,

1. создайте файл .tmPreference, поместите некоторые переменные, которые вы хотите использовать, во фрагменты. Вот пример, вы можете сохранить котент в Packages/User/Default.tmPreference

<plist version="1.0">
<dict>
    <key>name</key>
    <string>Global</string>
    <key>scope</key>
    <string />
    <key>settings</key>
    <dict>
        <key>shellVariables</key>
        <array>
            <dict>
                <key>name</key>
                <string>TM_YEAR</string>
                <key>value</key>
                <string>2019</string>
            </dict>
            <dict>
                <key>name</key>
                <string>TM_DATE</string>
                <key>value</key>
                <string>2019-06-15</string>
            </dict>
            <dict>
                <key>name</key>
                <string>TM_TIME</string>
                <key>value</key>
                <string>22:51:16</string>
            </dict>
        </array>
    </dict>
</dict>
</plist>

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

import sublime, sublime_plugin
import time
from xml.etree import ElementTree as ET

# everytime when plugin loaded, it will update the .tmPreferences file.
def plugin_loaded():
    # res = sublime.load_resource('Packages/User/Default.tmPreferences')
    # root = ET.fromstring(res)
    meta_info = sublime.packages_path() + '\\User\\Default.tmPreferences'
    tree = ET.parse(meta_info)
    eles = tree.getroot().find('dict').find('dict').find('array').findall('dict')

    y = time.strftime("%Y", time.localtime())
    d = time.strftime("%Y-%m-%d", time.localtime())
    t = time.strftime("%H:%M:%S", time.localtime())

    for ele in eles:
        kvs = ele.getchildren()
        if kvs[1].text == 'TM_YEAR':
            if kvs[3].text != y:
                kvs[3].text = y
                continue
        elif kvs[1].text == 'TM_DATE':
            if kvs[3].text != d:
                kvs[3].text = d
                continue
        elif kvs[1].text == 'TM_TIME':
            if kvs[3].text != t:
                kvs[3].text = t
                continue

    tree.write(meta_info)

3. используйте переменную оболочки, которую вы определили в файле .tmPreference.

<snippet>
    <content><![CDATA[
/**
  ******************************************************************************
  * \brief      ${1:}
  * \file       $TM_FILENAME
  * \date       $TM_DATE
  * \details    
  ******************************************************************************
  */

${0:}

/****************************** Copy right $TM_YEAR *******************************/
        ]]></content>
    <!-- Optional: Tab trigger to activate the snippet -->
    <tabTrigger>cfc</tabTrigger>
    <!-- Optional: Scope the tab trigger will be active in -->
    <scope>source.c, source.c++</scope>
    <!-- Optional: Description to show in the menu -->
    <description>c file comment</description>
</snippet>

Ответ 6

Решено в https://github.com/ngocjr7/sublime-snippet-timestamp

Скопируйте все файлы в каталог Packages/User возвышенного текста.

Настройте файл sublime-snippet так, как вам нужно (cpp_template.sublime-snippet для c++ и py_template.sublime-snippet для python)

Теперь вы можете создать простой фрагмент, и дата будет обновляться каждый раз, когда вы нажимаете команду + s. Команда + s по-прежнему имеет функцию сохранения файлов.

Explaination

Поскольку фрагмент не поддерживает динамическую переменную, я использую статическую переменную DATE define в Default.tmPreferences и обновляю эту переменную, когда мы хотим создать фрагмент.

Я использую плагин (команду) updatetm для обновления DATE в Default.tmPreferences.

Я хочу, чтобы дата и время обновлялись автоматически или хотя бы пассивно. Поэтому я добавил функцию, называемую командой updatetm, для клавиш + команда. Для этого я использую другой плагин chain.py для вызова нескольких команд на карте ключей (как команды updatetm, так и команды по умолчанию (сохранить). Карта ключей определена в файле Default (OSX).sublime-snippet.

Ответ 7

Это сообщение на официальном форуме ST отвечает на ваш вопрос и дает близкую альтернативу.

Итак, нет, вы не можете вставлять datetime из фрагмента ST.