如何在 textmate 包中创建片段子文件夹
How to create snippet subfolders in textmate bundle
我刚刚发现了 textmate,我很喜欢它。我很想用它来存储我自己的片段。我知道如何在 textmate 中执行此操作,但因为我想添加大量片段,所以我不希望它们变得杂乱无章。我想将它们添加到相关包下的有组织的子文件夹中。例如,在 shell 脚本包下,我想添加一个文件夹,将我所有的网络片段保存在一起。我无法在任何地方找到如何做到这一点,但我知道它可以完成,因为一些捆绑包是这样组织的......帮助
我通过大量的试验和错误设法解决了这个问题,并从这个超级用户开始 answer。
在 TextMate 2.0 中执行此操作的唯一方法是手动编辑捆绑包的 info.plist
文件。我建议在捆绑包的导出副本上执行此操作并将其重新加载到 textmate 中。要导出包,请在包编辑器中右键单击包,然后单击 Export Bundle...
。
首先在 plist 文件的顶层添加一个 mainMenu
部分:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>mainMenu</key>
<dict>
</dict>
</dict>
</plist>
据我所知,mainMenu
字典支持 3 个键:excludedItems
、items
和 submenus
。 excludedItems
和 items
是包含捆绑项(片段、命令等)或子菜单的 UUID 列表的数组。您可以通过在 textmate 中打开并找到 uuid
键来获取命令或片段的 UUID;它看起来像:
<key>uuid</key>
<string>0A2DB1AC-3049-4BD5-8931-641E716990F9</string>
获得项目的 UUID 后,您可以将它们列在 items
中,以按照您希望的顺序填充捆绑菜单,例如:
<key>items</key>
<array>
<string>409b0e74-9ab5-4d35-b957-9ddf23a71c0c</string>
<string>------------------------------------</string>
<string>d2c991dc-a00e-4247-8479-f2d29f387319</string>
</array>
如果您使用一系列 -
字符代替 UUID,它将在菜单中创建一个分隔符。同样,如果您不想在捆绑菜单中显示某些片段,您可以将它们添加到 excludedItems
.
要创建子菜单,您必须在 submenus
中定义它们,如下所示:
<key>submenus</key>
<dict>
<key>71BE58B2-E486-4B21-93F1-C208D4914099</key>
<dict>
<key>items</key>
<array>
<string>6D0B2B9D-62C7-4842-BA28-F3379E887D93</string>
<string>CADC55BD-0D0A-48C8-B296-35FA7AAE09CA</string>
</array>
<key>name</key>
<string>C++ Snippets</string>
</dict>
</dict>
每个子菜单都需要在 <key>...</key>
内有一个关联的 UUID。我从在线 UUID generator 创建了一个。然后,您可以将子菜单的 UUID 添加到顶级 items
数组,以将子菜单添加到您的捆绑包的菜单中。
最后,当您将捆绑包加载到 textmate 时,您必须首先从以下位置删除捆绑包的所有缓存实例:
~/Library/Application Support/Avian/Bundles
~/Library/Application Support/Avian/Pristine Copy/Bundles
如果不这样做,textmate 有时会忽略新加载的包。不确定是否有更简洁的方法来重新加载捆绑包,但删除它对我有用。
有关完整示例,请参阅我 Github 上的 ROS 包中的 this commit。
关于上述出色答案的一些额外信息
从 TM2 rc23 开始,您可以通过在捆绑编辑器中右键单击现有项目来访问它的 UUID window(使用 cntrl-option-command-B
访问)
您可以在 terminal.app
中使用命令 uuidgen
创建一个 UUID(如果您经常使用此命令,也可以将其设为命令)
TM2 不需要清除缓存 - 它会监视 plist 中的更改。
@user96157 对此很清楚,但请注意,您还必须将新的子菜单添加到主菜单。所以:
<key>mainMenu</key>
<dict>
<key>items</key>
<array>
<string>COPY-UUID-FOR-YOUR-NEW-SUB-MENU-HERE!</string>
我刚刚发现了 textmate,我很喜欢它。我很想用它来存储我自己的片段。我知道如何在 textmate 中执行此操作,但因为我想添加大量片段,所以我不希望它们变得杂乱无章。我想将它们添加到相关包下的有组织的子文件夹中。例如,在 shell 脚本包下,我想添加一个文件夹,将我所有的网络片段保存在一起。我无法在任何地方找到如何做到这一点,但我知道它可以完成,因为一些捆绑包是这样组织的......帮助
我通过大量的试验和错误设法解决了这个问题,并从这个超级用户开始 answer。
在 TextMate 2.0 中执行此操作的唯一方法是手动编辑捆绑包的 info.plist
文件。我建议在捆绑包的导出副本上执行此操作并将其重新加载到 textmate 中。要导出包,请在包编辑器中右键单击包,然后单击 Export Bundle...
。
首先在 plist 文件的顶层添加一个 mainMenu
部分:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>mainMenu</key>
<dict>
</dict>
</dict>
</plist>
据我所知,mainMenu
字典支持 3 个键:excludedItems
、items
和 submenus
。 excludedItems
和 items
是包含捆绑项(片段、命令等)或子菜单的 UUID 列表的数组。您可以通过在 textmate 中打开并找到 uuid
键来获取命令或片段的 UUID;它看起来像:
<key>uuid</key>
<string>0A2DB1AC-3049-4BD5-8931-641E716990F9</string>
获得项目的 UUID 后,您可以将它们列在 items
中,以按照您希望的顺序填充捆绑菜单,例如:
<key>items</key>
<array>
<string>409b0e74-9ab5-4d35-b957-9ddf23a71c0c</string>
<string>------------------------------------</string>
<string>d2c991dc-a00e-4247-8479-f2d29f387319</string>
</array>
如果您使用一系列 -
字符代替 UUID,它将在菜单中创建一个分隔符。同样,如果您不想在捆绑菜单中显示某些片段,您可以将它们添加到 excludedItems
.
要创建子菜单,您必须在 submenus
中定义它们,如下所示:
<key>submenus</key>
<dict>
<key>71BE58B2-E486-4B21-93F1-C208D4914099</key>
<dict>
<key>items</key>
<array>
<string>6D0B2B9D-62C7-4842-BA28-F3379E887D93</string>
<string>CADC55BD-0D0A-48C8-B296-35FA7AAE09CA</string>
</array>
<key>name</key>
<string>C++ Snippets</string>
</dict>
</dict>
每个子菜单都需要在 <key>...</key>
内有一个关联的 UUID。我从在线 UUID generator 创建了一个。然后,您可以将子菜单的 UUID 添加到顶级 items
数组,以将子菜单添加到您的捆绑包的菜单中。
最后,当您将捆绑包加载到 textmate 时,您必须首先从以下位置删除捆绑包的所有缓存实例:
~/Library/Application Support/Avian/Bundles
~/Library/Application Support/Avian/Pristine Copy/Bundles
如果不这样做,textmate 有时会忽略新加载的包。不确定是否有更简洁的方法来重新加载捆绑包,但删除它对我有用。
有关完整示例,请参阅我 Github 上的 ROS 包中的 this commit。
关于上述出色答案的一些额外信息
从 TM2 rc23 开始,您可以通过在捆绑编辑器中右键单击现有项目来访问它的 UUID window(使用 cntrl-option-command-B
访问)
您可以在 terminal.app
中使用命令 uuidgen
创建一个 UUID(如果您经常使用此命令,也可以将其设为命令)
TM2 不需要清除缓存 - 它会监视 plist 中的更改。
@user96157 对此很清楚,但请注意,您还必须将新的子菜单添加到主菜单。所以:
<key>mainMenu</key>
<dict>
<key>items</key>
<array>
<string>COPY-UUID-FOR-YOUR-NEW-SUB-MENU-HERE!</string>