解决Hexo Matery主题代码块复制内容不换行问题

本文介绍了在Hexo Matery主题下遇到代码块复制内容不换行的问题,通过分析和对比,发现是由于版权信息设置导致的。在源代码中找到关键判断语句并修改为针对CODE标签的判断,解决了换行失效的问题。修改后的博客内容可以正常复制并保持换行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x01 问题起因

在Hexo Matery主题开启复制版权copyright,并且设置了版权的信息后,会导致Matery原有的代码块复制内容换行失效,具体问题如下图所示:

0x02 问题分析

目前发现使用了Matery主题的博客上复制内容都会存在这个问题。

后来又去Matery作者博客上看,发现有提示复制成功,且没有换行失效。猜测是因为作者的复制内容虽然开启了版权copyright,但是没有添加复制版权信息的缘故。

从以上的对比,很明显matery原本的复制内容是可以正常换行的,但问题就是出在有没有添加copyright的版权信息上。

于是,回归Matery源代码找到添加copyright的复制版权信息的文件位置themes\matery\layout\_partial\post-detail.ejs

在源码中有个英文提示,是判断复制内容换行关键的判断语句

// otherwise the text inside "pre" loses all the line breaks!
if (selection.getRangeAt(0).commonAncestorContainer.nodeName === 'PRE') {
    newdiv.innerHTML = "<pre>" + newdiv.innerHTML + "</pre>";
}

很明显问题就是出在这个判断语句上,既然复制内容不换行那就说明这个if条件判断是错误的。那么问题来了,在真正复制内容时selection.getRangeAt(0).commonAncestorContainer.nodeName究竟是不是PRE呢,我们使用console.log()输出看看

从结果可以看出,当在复制内容时selection.getRangeAt(0).commonAncestorContainer.nodeName的值是CODE,而不是PRE。所以由于if判断的条件是错误的才导致复制内容不会换行。解决办法就是将其判断条件值改为CODE即可

// otherwise the text inside "pre" loses all the line breaks!
if (selection.getRangeAt(0).commonAncestorContainer.nodeName === 'CODE') {
    newdiv.innerHTML = "<pre>" + newdiv.innerHTML + "</pre>";
}

修改完后重新部署博客,然后再试试复制内容效果,发现可以正常复制显示内容了

0x03 问题解决

综上分析,解决办法为找到文件themes\matery\layout\_partial\post-detail.ejs中添加copyright的复制版权信息的代码位置大约在222行左右,修改if条件判断内容为CODE即可

// otherwise the text inside "pre" loses all the line breaks!
if (selection.getRangeAt(0).commonAncestorContainer.nodeName === 'CODE') {
    newdiv.innerHTML = "<pre>" + newdiv.innerHTML + "</pre>";
}

至此,Matery代码块复制内容不换行问题解决,更多代码块问题查看这篇文章:Matery之代码块优化

### 关于 HexoMatery 主题中的插件配置 为了改善代码展示效果,在 Hexo 中集成了 `hexo-prism-plugin` 插件用于实现更美观的代码高亮功能[^1]。通过该插件可以使得博客文章内的代码片段拥有更好的视觉呈现。 对于希望增强站点交互性的开发者来说,`hexo-generator-search` 提供了一种便捷的方式让用户能够快速定位所需的文章内容[^2]。 另外,为了让表达更加生动有趣,加入了对 GitHub 风格 Emoji 表情的支持,这得益于 `hexo-filter-github-emojis` 这一插件的帮助,它允许作者在撰写过程中直接使用简单的冒号标记法来插入各种可爱的表情符号[^3]。 #### 示例代码:集成上述提到的功能至 _config.yml 文件内 ```yaml # Prism Plugin Configuration for better code highlighting prism_plugin: mode: 'preprocess' # realtime/preprocess theme: 'tomorrow' line_number: true # default false custom_css: # Enable search functionality via hexo-generator-search plugin search: path: search.xml field: post format: html limit: 10000 # Support for Github Emojis through hexo-filter-github-emosiis plugin github_emoji: true ``` 以上设置将确保所创建的内容不仅限于文字描述,还可以包含色彩丰富的代码样例以及活泼的表情图案,从而提升整体阅读体验。 #### 安装必要的依赖项 以下是针对各个特性所需的 NPM 包安装指令: ```bash npm i -S hexo-prism-plugin npm install hexo-generator-search --save npm install hexo-filter-github-emojis --save ``` 完成这些操作之后,记得重启本地服务器使更改生效,并验证新添加的功能是否正常工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸣剑Sec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值