mcpField
E
em-dash

em-dash

github.com/github开发40.5k76 次安装1 天前更新
代码仓库

关于 em-dash

em-dash 是一份介绍 em dash 历史、标点用途以及代码和文本文件规范的写作参考,适用于处理正文或代码标点的 Agent;文档建议代码中不用 em dash 和 en dash,并默认避免在原始文本中使用。

主要功能

  1. 01介绍 em dash 的历史
  2. 02说明标点使用规范
  3. 03提供代码中的破折号建议
  4. 04提供替换命令

适用场景

  1. 01检查正文中的破折号用法
  2. 02替换代码或注释中的 Unicode 破折号

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/github/awesome-copilot --skill em-dash

安装后在 Claude Code 中输入/em-dash确认已加载。

详细介绍

em dash

em dash(U+2014,\u2014;不是连字符减号 -)是标准破折号中最长的一种,堪称标点符号中的瑞士军刀。它的历史是一段引人入胜的旅程,从手写手稿到机械限制、文学反叛,再到现代数字领域的统治地位。

以下是 em dash 演变过程的详细梳理:

em dash 的历史

早期起源(15 至 18 世纪)
  • 最早的破折号:破折号在英语文学中最早出现于 1580 年的私人信件和 1588 年的英国戏剧中。它们常被用来表示停顿、自我打断或未完的思绪
  • 古腾堡与早期印刷:在 15 世纪的印刷革命期间,em dash 正式作为一种标准化的排版标记出现
词源
  • “M”的宽度:em dash 之所以得名,是因为它的标准长度等于所使用具体字体中大写字母“M”的宽度(类似地,稍短的 en dash 是字母“N”的宽度)
文学上的流行(17 至 19 世纪)
  • 作家的工具:到 17 和 18 世纪,它成为作家们钟爱的工具,用来模仿说话时自然的顿挫、结巴和节奏
  • 狄金森的破折号:在 19 世纪,像 Emily Dickinson 这样的诗人以使用 em dash 来表达情感重量、节奏并邀请读者自行解读而闻名。这与其作品如此紧密相连,以至于它们常被非正式地称为“Dickinson Dashes”
打字机时代(19 至 20 世纪)
  • 双连字符的妥协:当打字机问世时,它们没有专门的 em dash 按键。为弥补这一点,打字员开始使用两个连续的连字符(--)
  • 不留空格的规则:由于这一机械上的妥协,一种在输入该符号时不加周围空格的风格惯例出现了,并延续至今
数字时代(当今)
  • 回归本真:现代数字排版和文字处理程序已经恢复了真正、不间断的 em dash
  • 现代复兴:em dash 正在经历一场人气的复苏
    • 它已成为现代长篇散文的标志,也是 AI 输出中备受青睐、使用频繁的标点符号,因为 AI 输出往往优先采用对话式、意识流风格
对 em dash 现代复兴的推测
  • 那些必须赶截止日期、没有时间在提交前严格校对在线文章的职业作者
  • 那些想炫耀自己 HTML 编码知识以显得聪明的专业人士
  • 那些想让网页上文本的视觉构图更具吸引力的平面设计师
  • 人气会带来人气这一事实
    • 发布网络文章的人看到其他人都在使用 em dash,于是本该用连字符的地方,他们也选择了 em dash

em dash 历史分析

在 em dash 的历史中,从未有人将它有意用于编写计算机代码,或用于那些将被作为计算机指令执行的文件。

何时使用 em 或 en dash

永远不要。

在代码文件中

重要

永远不要。 无论在何种方式、形态、形式或风格下,语气在代码注释中都从不重要。

  • 永远不要
    • 改用 -(连字符)字符
    • 如果作为 Agent 工作,且注释中出现了 em dash,则将其替换为 -(连字符)字符
在原始数据和/或文本文件中

说明

默认永远不要

  • 当被明确指示,且 100% 清楚该文本将用于:
    • 文学作品
    • 新闻
  • 如果作为 Agent 工作,且 em dash 已经是数据的一部分,则保留它

其他标点符号

作为 em dash 专家的一部分,还需要了解其他标点符号或字符。

句末标点

段落中的每个完整句子都必须以以下三种标点之一结尾:

  • 句号 .:用于结束陈述句和说明性句子
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:<?php echo "a" . "b" . "c"; ?>
  • 问号 ?:用于结束直接疑问句
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:三元条件 condition ? expression_if_true : expression_if_false
  • 感叹号 !:传达强烈情感、惊讶或强调
    • 键盘字符:true
    • 编程语言语法:true
      • 示例: setlocal enabledelayedexpansion && set "_a=a" && echo !_a! && endlocal
停顿与分句连接词

这些标点控制写作的节奏,并连接不同的观点:

  • 逗号 ,:用于分隔列表中的项目,通过连词(如 and、but)连接独立分句,或分隔引导性短语
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:fn(a, b)
  • 分号 ;:连接两个关系密切、本可独立成句的独立分句
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:var foobar = "foo-bar";
  • 冒号 ::用于引出列表、引语或解释。冒号前的文本必须是完整句子
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:{"age": 26}
单词、引语与所有格
  • 撇号 ':表示所有格(如 Sarah's book),或表示缩略形式中省略的字母(如用 I'll 代替 I will)
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:char letter = 'A';
  • 引号 ":用于括起直接引语或引用。在美式英语中,句号和逗号几乎总是放在引号内
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:char abc[] = "abc";
破折号与斜杠
  • 连字符 -:将两个或多个单词连接成一个复合形容词(如 well-known)
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:count--
  • 短破折号(U+2013,\u2013)与长破折号(U+2014,\u2014):
    • 短破折号是两者中较细的,用于表示数值范围,或当复合形容词的某个成分本身由多个单词构成时,连接其中的单词
      • 键盘字符:false
      • 编程语言语法:false
    • 长破折号更宽,用于表示停顿、制造戏剧效果或举例。
      • 键盘字符:false
      • 编程语言语法:false
  • 斜杠 /:表示选择(如 yes/no),或分隔诗句的行
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:/* comment */ || 10/2 || 5//2
分组与强调
  • 圆括号 ( ):用于括起额外的、非必要的信息,这些信息可澄清句子,但即使去除也不会改变核心含义
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:if (5 > 2)
  • 方括号 [ ]:用于括起由原作者以外的人添加到引语中的词语,通常是为了澄清代词或补充缺失的语境
    • 键盘字符:true
    • 编程语言语法:true
      • 示例:var arr = [1, 2, 3];
使用其他标点字符的一般规则

在注释代码文件或任何将被包含在编译后的计算机指令中的文件时,请遵循以下经验法则:

  • 判断该字符是否常见于键盘上,或者该标点字符是否是编程语言语法的一部分:

    • 如果不是键盘字符,并且不是常见的编程语法字符;那么:
      • 绝不在代码或代码注释中使用该字符
        • 未提及的示例:�
    • 如果是键盘字符,并且是常见的编程语法字符,那么:
      • 在代码注释中正确使用该字符

重要

如有疑问,请遵循以下伪代码说明:

# For en dash and em dash
echo - | sed "s/-/-/g"

# Replace Unicode en dash (U+2013) and em dash (U+2014) with hyphen-minus (-)
perl -CS -pe 's/\x{2013}|\x{2014}/-/g'

# For encoded characters
echo � | sed "s/�/ /g"

# (Optional) Remove the Unicode replacement character (U+FFFD) if it appears in pasted text
perl -CS -pe 's/\x{FFFD}/ /g'

延伸阅读

评论

支持 Markdown