大佬们好,我现在有一个需求,就是选中一段内容(可能有很多行,包括了列表啊、代码块什么的),然后通过一个命令,把它们转换成一个 callout,请问有什么解决方案吗?
我个人的想法,分解一下需求就两点:
- 选中内容的第一行,在行首添加
>[!xxx][space]
- 其余行在行首添加
>
求问大家,有什么插件或者快捷操作能实现这个需求吗?
大佬们好,我现在有一个需求,就是选中一段内容(可能有很多行,包括了列表啊、代码块什么的),然后通过一个命令,把它们转换成一个 callout,请问有什么解决方案吗?
我个人的想法,分解一下需求就两点:
>[!xxx][space]
>
求问大家,有什么插件或者快捷操作能实现这个需求吗?
Keyshots 第三方插件. 有支援CALLOUT 輸入 還附圖示
你可以參考一下
我自己是有 tp.file.selection 寫一個類似你說的功能
就是輸入 自訂的模板快捷鍵 會把你選取的文字前後加你自訂的文字
只有選取文字執行這個模板才有用 自己改一下 tR 這段
tR += prefix + “python\n" + result + "\n" + prefix + "
”;
<%*
// 假設 tpContent 是您從 tp.file.selection() 獲得的內容
let content = tp.file.selection();
// 檢查選定內容是否為空
if (content.trim().length > 0) {
// 定義選項列表
let options = ["不加", "加>", "加>>"];
// 定義當用戶選擇一個選項時的行為
async function choosePrefix() {
let choice = await tp.system.suggester(options, options, {placeholder: "選擇如何處理文本:"});
return choice;
}
// 獲取用戶選擇的選項
let userChoice = await choosePrefix();
// 根據用戶的選擇處理文本
let prefix = "";
switch(userChoice) {
case "不加":
prefix = "";
break;
case "加>":
prefix = "> ";
break;
case "加>>":
prefix = ">> ";
break;
}
// 將內容按行分割,並對每一行進行處理
let processedLines = content.split("\n").filter(line => line.trim().length > 0).map(line => prefix + line);
// 將處理後的行數組轉換回字符串,並用換行符連接
let result = processedLines.join("\n");
// 在結果前添加帶有前缀的 "```python\n",在結果後添加 "\n```",並將結果添加到 tR
tR += prefix + "```python\n" + result + "\n" + prefix + "```";
}
// 如果選定內容為空,不執行任何操作
-%>
感谢大佬的回复!
参考您的实现,以下代码已实现我的需求:
<%*
// 假設 tpContent 是您從 tp.file.selection() 獲得的內容
let content = tp.file.selection();
// 檢查選定內容是否為空
if (content.trim().length > 0) {
// 定義選項列表
let options = ["NOTE", "FAQ", "BUG", "TIP", "INFO", "DANGER", "TODO", "EXAMPLE", "TLDR", "SUCCESS", "WARNING", "FAILURE", "QUOTE"];
// 定義當用戶選擇一個選項時的行為
async function choosePrefix() {
let choice = await tp.system.suggester(options, options, {placeholder: "callout type:"});
return choice;
}
// 獲取用戶選擇的選項
let userChoice = await choosePrefix();
// 根據用戶的選擇處理文本
let firstLinePrefix = ">[!" + userChoice + "] "
let otherLinePrefix = "> ";
// 將內容按行分割,並對每一行進行處理
// let processedLines = content.split("\n").filter(line => line.trim().length > 0).map(line => prefix + line);
const lines = content.split('\n'); // 按行分割
const processedLines = [];
for (let i = 0; i < lines.length; i++) {
const line = lines[i].trim();
if (line !== '') {
const prefix = i === 0 ? firstLinePrefix : otherLinePrefix;
processedLines.push(prefix + line);
}
}
// 將處理後的行數組轉換回字符串,並用換行符連接
let result = processedLines.join("\n");
// 在結果前添加帶有前缀的 "```python\n",在結果後添加 "\n```",並將結果添加到 tR
tR += result;
}
// 如果選定內容為空,不執行任何操作
-%>
打开 快捷键 设置,并搜索 插入标注。设置其快捷键,例如 Ctrl+.
使用时选中要转换的部分,用快捷键就好了。
缺点:转换成 callout 后,默认为 !NOTE
。需要其他格式还得再鼠标右键切换。
感谢回复,也是一个可选的方案,不过是把选中的部分全部作为 callout 的内容了,不会把第一行作为 callout 的标题
我剛又裝了一下 KeyShots 裡面的
better insert callout
也應該可以滿足你的需求
習慣就好
admonition 插件