copy-code

@vuepress/plugin-copy-code

此插件会自动在 PC 设备上为每个代码块右上角添加复制按钮。

默认选择器匹配 @vuepress/theme-default,所以在你自己的主题中集成时可能需要调整它。

使用

npm i -D @vuepress/plugin-copy-code@next
import { copyCodePlugin } from '@vuepress/plugin-copy-code'

export default {
  plugins: [
    copyCodePlugin({
      // options
    }),
  ],
}

选项

selector

  • 类型:string | string[]

  • 默认值:'.theme-default-content div[class*="language-"] pre'

  • 详情:

    代码块选择器

showInMobile

  • 类型:boolean

  • 默认值:false

  • 详情:

    是否展示在移动端

duration

  • 类型:number

  • 默认值:2000

  • 详情:

    提示消息显示时间,设置为 0 会禁用提示。

delay

  • 类型:number

  • 默认值:800

  • 详情:

    注册复制按钮的延时,单位 ms。

    如果你使用的主题有切换动画,建议配置此选项为 切换动画时长 + 200

locales

  • 类型:CopyCodePluginLocaleConfig

    interface CopyCodePluginLocaleData {
      /**
       * 复制文字
       */
      copy: string
    
      /**
       * 已复制文字
       */
      copied: string
    }
    
    interface CopyCodePluginLocaleConfig {
      [localePath: string]: CopyCodePluginLocaleData
    }
    
  • 必填:否

  • 详情:

    复制按钮插件的国际化配置。

  • 示例:

    import { copyCodePlugin } from '@vuepress/plugin-copy-code'
    
    export default {
      locales: {
        '/': {
          // 这是一个支持的语言
          lang: 'zh-CN',
        },
        '/xx/': {
          // 这是一个没有收到插件支持的语言
          lang: 'mm-NN',
        },
      },
    
      plugins: [
        copyCodePlugin({
          locales: {
            '/': {
              // 覆盖复制按钮标签文字
              copy: '复制此段代码',
            },
    
            '/xx/': {
              // 在这里完整设置 `mm-NN` 的多语言配置
            },
          },
        }),
      ],
    }
    
内置支持语言
  • 简体中文 (zh-CN)
  • 繁体中文 (zh-TW)
  • 英文(美国) (en-US)
  • 德语 (de-DE)
  • 德语(澳大利亚) (de-AT)
  • 俄语 (ru-RU)
  • 乌克兰语 (uk-UA)
  • 越南语 (vi-VN)
  • 葡萄牙语(巴西) (pt-BR)
  • 波兰语 (pl-PL)
  • 法语 (fr-FR)
  • 西班牙语 (es-ES)
  • 斯洛伐克 (sk-SK)
  • 日语 (ja-JP)
  • 土耳其语 (tr-TR)
  • 韩语 (ko-KR)
  • 芬兰语 (fi-FI)
  • 印尼语 (id-ID)
  • 荷兰语 (nl-NL)

样式

你可以通过 CSS 变量来自定义复制按钮的样式:

:root {
  --code-copy-icon: url("copy-button.svg");
  --code-copied-icon: url("copied-button.svg");
  --copy-code-color: #9e9e9e;
  --copy-code-hover: rgb(0 0 0 / 50%);
}