Могу ли я добавить дату времени для возвышенного фрагмента?
Я хочу создать фрагмент, который добавит комментарий к файлу, но я хочу, чтобы фрагмент автоматически создавал 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>
Ответы
Ответ 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 около часа и, наконец, был украшен вашим ответом! Большое спасибо!
Ответ 3
Возможно, вы захотите проверить пакет InsertDate: https://github.com/FichteFoll/InsertDate
В readme вы можете найти пример того, как вы можете использовать макросы чтобы вставить временные метки в фрагменты.
Ответ 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.