VS里的 代码片段(Code snippet)

基本结构

一个代码片段通常由以下部分组成:

  • Header:包含代码片段的名称、作者、描述和快捷方式。
  • Code:实际的代码内容。
  • Tab Stops:允许用户在插入代码片段后通过Tab键在不同的插入点之间跳转。
  • Placeholders:在代码中预留的位置,用户可以在这些位置输入自定义内容。

特殊变量

特殊变量用于控制代码片段的行为。以下是一些常用的特殊变量:

  1. $selected$:代表当前编辑器中选中的文本。当代码片段被插入时,选中的文本将被替换。
  2. $end$:这是一个重要的特殊变量,它代表用户在插入代码片段后按回车键回到的地方。通常,你会在希望用户继续编写代码的位置放置$end$。
  3. $1, $2, $3, ...:这些是占位符,用于创建可编辑的选项。用户可以通过Tab键在这些占位符之间跳转并输入不同的值。
  4. $TM_SELECTED_TEXT$:与$selected$类似,但更常用于跨平台的编辑器。
  5. $TM_CURRENT_LINE$:代表当前光标所在的行。
  6. $TM_CURRENT_WORD$:代表当前光标所在位置的单词。
  7. $TM_LINE_INDEX$:代表当前行的索引(从0开始)。
  8. $TM_LINE_NUMBER$:代表当前行的行号。
  9. $TM_FILENAME$:代表当前文件的名称,不包含扩展名。
  10. $TM_FILENAME_BASE$:代表当前文件的名称,包含扩展名。

编写规范

  • 简洁性:代码片段应简洁明了,避免冗余代码。
  • 自包含性:代码片段应尽可能独立,不依赖外部文件或配置。
  • 注释:为代码片段添加注释,说明其用途和如何使用。
  • 可定制性:使用占位符和特殊变量,允许用户根据需要定制代码片段。
  • 兼容性:确保代码片段在不同的项目和语言环境中都能正常工作。

Visual Studio的代码片段并没有一个官方的、全面的列表,因为一些特殊变量可能依赖于具体的环境或编辑器扩展。然而,我可以提供一个常见的C++代码片段特殊变量列表,以及如何在C++代码片段中使用它们的示例。

C++代码片段特殊变量示例

  1. $selected$或 $TM_SELECTED_TEXT$

std::cout << $selected$ << std::endl;

  1. $end$

for (int i = 0; i < 10; ++i) { // 光标将放置在这里 $end$ }

  1. $1, $2, ...(Tab stops)

std::pair<int, int> pair = { $1$, $2$ }; // 允许用户分别输入两个值

  1. $TM_CURRENT_LINE$

// 输出当前行 std::cout << "$TM_CURRENT_LINE$" << std::endl;

  1. $TM_CURRENT_WORD$

// 假设光标在一个变量名上 auto value = $TM_CURRENT_WORD$;

  1. $TM_LINE_INDEX$

// 假设你需要索引来计算 std::cout << "Line index: " << $TM_LINE_INDEX$ << std::endl;

  1. $TM_LINE_NUMBER$

// 输出行号 std::cout << "Line number: " << $TM_LINE_NUMBER$ << std::endl;

  1. $TM_FILENAME$

// 假设创建一个与文件名相同的变量名 std::string filename = "$TM_FILENAME$";

  1. $TM_FILENAME_BASE$

// 可能是文件路径 std::string filepath = "$TM_FILENAME_BASE$";

  1. $TM_DIRECTORY$

std::string directoryPath = "$TM_DIRECTORY$";

  1. $TM_FILEPATH$

std::string fullFilePath = "$TM_FILEPATH$";

请注意,这些变量可能不会在所有版本的Visual Studio中都可用,或者它们的行为可能会根据具体的编辑器配置有所不同。此外,代码片段的XML结构和属性替换功能允许开发者创建几乎任何类型的自定义行为,因此可能还有其他特殊变量存在。

附录

utf8.snippet

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
	<CodeSnippet Format="1.0.0">
		<Header>
			<Title>utf8</Title>
			<Shortcut>utf8</Shortcut>
			<Description>utf8 编码</Description>
			<Author>Zeng</Author>
			<SnippetTypes>
				<SnippetType>Expansion</SnippetType>
				<SnippetType>SurroundsWith</SnippetType>
			</SnippetTypes>
		</Header>
		<Snippet>
			<Declarations>
			</Declarations>
			<Code Language="cpp"><![CDATA[#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif
			]]>
			</Code>
		</Snippet>
	</CodeSnippet>
</CodeSnippets>

for--.snippet

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
	<CodeSnippet Format="1.0.0">
		<Header>
			<Title>for--</Title>
			<Shortcut>for</Shortcut>
			<Description>for 递减循环的代码片段</Description>
			<Author>Zeng</Author>
			<SnippetTypes>
				<SnippetType>Expansion</SnippetType>
				<SnippetType>SurroundsWith</SnippetType>
			</SnippetTypes>
		</Header>
		<Snippet>
			<Declarations>
				<Literal>
					<ID>type</ID>
					<Default>int</Default>
					<ToolTip>控制变量类型</ToolTip>
				</Literal>
				<Literal>
					<ID>index</ID>
					<Default>i</Default>
					<ToolTip>索引</ToolTip>
				</Literal>
				<Literal>
					<ID>max</ID>
					<Default>length</Default>
					<ToolTip>最大长度</ToolTip>
				</Literal>
			</Declarations>
			<Code Language="cpp"><![CDATA[for ($type$ $index$ = $max$ - 1; $index$ >= 0; $index$--)
		{
			$selected$ $end$
		}]]>
			</Code>
		</Snippet>
	</CodeSnippet>
</CodeSnippets>

for++.snippet

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
	<CodeSnippet Format="1.0.0">
		<Header>
			<Title>for++</Title>
			<Shortcut>for</Shortcut>
			<Description>for 递增循环的代码片段</Description>
			<Author>Zeng</Author>
			<SnippetTypes>
				<SnippetType>Expansion</SnippetType>
				<SnippetType>SurroundsWith</SnippetType>
			</SnippetTypes>
		</Header>
		<Snippet>
			<Declarations>
				<Literal>
					<ID>type</ID>
					<Default>int</Default>
					<ToolTip>控制变量类型</ToolTip>
				</Literal>
				<Literal>
					<ID>index</ID>
					<Default>i</Default>
					<ToolTip>索引</ToolTip>
				</Literal>
				<Literal>
					<ID>max</ID>
					<Default>length</Default>
					<ToolTip>最大长度</ToolTip>
				</Literal>
			</Declarations>
			<Code Language="cpp"><![CDATA[for ($type$ $index$ = 0; $index$ < $max$; $index$++)
		{
			$selected$ $end$
		}]]>
			</Code>
		</Snippet>
	</CodeSnippet>
</CodeSnippets>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值