28

我想创建一个将添加文件注释的片段,但我希望该片段自动创建 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>
4

7 回答 7

101

工具 > 新插件

粘贴这个:

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/Application Support/Sublime Text 2/Packages/User/add_date.py

然后,在 Preferences > Key Bindings - User 中,添加:

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

strftime 您可以根据自己的喜好自定义传递给的参数。

于 2012-12-14T16:40:23.173 回答
13

Nachocab,这是一个很好的答案——对我帮助很大。我为自己创建了一个稍微不同的版本

~/Library/Application Support/Sublime Text 2/Packages/User/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" }

如果没有您的帮助,我将无法做到这一点!我在谷歌上搜索了大约一个小时,终于被你的回答所感动!非常感谢!

于 2013-01-28T17:34:17.557 回答
5

您可能需要检查 InsertDate 包:https ://github.com/FichteFoll/InsertDate

在自述文件中,您可以找到如何使用宏将时间戳插入片段的示例。

于 2013-08-15T18:33:37.233 回答
4

我只是通过一个简单的插件和元数据文件(.tmPreference 文件)来实现这个功能(在sublime3上),但我不知道这是否有效。有办法,

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 文件中的shell 变量。

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 文件中定义的 shell 变量。

<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>
于 2019-06-15T15:25:15.940 回答
2

您可以使用 Sublime Text 2 的SMART Snippets插件。

借助 SMART Snippets,您现在可以使用 Python 动态创建片段

我对另一个问题做了一些研究,我很确定这个插件可以解决你的问题。

于 2012-10-07T13:17:25.447 回答
0

它在https://github.com/ngocjr7/sublime-snippet-timestamp中解决了

将所有文件复制到 sublime text 的 Packages/User 目录。

根据需要配置 sublime-snippet 文件(cpp_template.sublime-snippet 用于 c++ 和 py_template.sublime-snippet 用于 python)

现在您可以创建一个简单的代码段,并且每次按 command + s 时都会更新日期。command + s 还有保存文件的功能。

解释

因为片段不支持动态变量,所以我使用 Default.tmPreferences 中定义的静态变量 DATE 并在我们想要创建片段时更新此变量。

我使用插件(命令)updatetm 来更新 Default.tmPreferences 中的 DATE。

我希望日期和时间自动更新或至少是被动更新。所以我为keystrockes command + s添加了一个名为updatetm command的函数。为此,我使用另一个插件是 chain.py 来调用键盘映射上的多个命令(updatetm 命令和默认命令(保存)。在 Default (OSX).sublime-snippet 文件中定义的键盘映射。

于 2019-10-08T16:22:04.623 回答
-4

官方 ST 论坛上的这篇文章回答了您的问题并提供了一个接近的选择。

总之,不,您目前不能从 ST 片段插入日期时间。

于 2012-08-10T00:02:52.287 回答