From 621f927cf3b9f236df332717338ef6cfa64b6ec5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=86=8A=E7=8C=AB=E5=88=AB=E7=86=AC=E5=A4=9C?=
<11595443+qiu-tenghuang@user.noreply.gitee.com>
Date: Thu, 26 Dec 2024 13:42:57 +0800
Subject: [PATCH 1/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4tasks=E7=B3=BB=E5=88=97?=
=?UTF-8?q?=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...\206(Checkout)\346\240\267\345\274\217.md" | 290 +++
...43\347\240\201\347\211\207\346\256\265.md" | 5 +-
...06\345\217\212\345\221\250\346\212\245.md" | 362 ++++
...55\346\263\225\346\211\213\345\206\214.md" | 1865 +++++++++++++++++
.../Tasks/obsidian-tasks-plugin.md" | 17 +-
5 files changed, 2535 insertions(+), 4 deletions(-)
create mode 100644 "10-Obsidian/Obsidian\345\244\226\350\247\202/CSS \347\211\207\346\256\265/Obsidian\346\240\267\345\274\217-Minimal\344\270\273\351\242\230\345\244\215\351\200\211\346\241\206(Checkout)\346\240\267\345\274\217.md"
create mode 100644 "10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/DataViewJS+Tasks-\346\234\200\344\275\263\347\232\204\346\257\217\345\221\250\344\273\273\345\212\241\347\256\241\347\220\206\345\217\212\345\221\250\346\212\245.md"
create mode 100644 "10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/Task\346\237\245\350\257\242\350\257\255\346\263\225\346\211\213\345\206\214.md"
rename "10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/obsidian-tasks-plugin.md" => "10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/obsidian-tasks-plugin.md" (95%)
diff --git "a/10-Obsidian/Obsidian\345\244\226\350\247\202/CSS \347\211\207\346\256\265/Obsidian\346\240\267\345\274\217-Minimal\344\270\273\351\242\230\345\244\215\351\200\211\346\241\206(Checkout)\346\240\267\345\274\217.md" "b/10-Obsidian/Obsidian\345\244\226\350\247\202/CSS \347\211\207\346\256\265/Obsidian\346\240\267\345\274\217-Minimal\344\270\273\351\242\230\345\244\215\351\200\211\346\241\206(Checkout)\346\240\267\345\274\217.md"
new file mode 100644
index 00000000..71353a76
--- /dev/null
+++ "b/10-Obsidian/Obsidian\345\244\226\350\247\202/CSS \347\211\207\346\256\265/Obsidian\346\240\267\345\274\217-Minimal\344\270\273\351\242\230\345\244\215\351\200\211\346\241\206(Checkout)\346\240\267\345\274\217.md"
@@ -0,0 +1,290 @@
+---
+uid: 20241226133515
+title: Obsidian 样式 -Minimal 主题复选框 (Checkout) 样式
+tags: [复选框, Checkout, CSS美化]
+description: Minimal 主题复选框 (Checkout) 样式
+author: 熊猫别熬夜
+type: other
+draft: false
+editable: false
+modified: 20241226133613
+---
+
+# Obsidian 样式 -Minimal 主题复选框 (Checkout) 样式
+
+## 效果
+
+![240415_Obsidian样式:Minimal主题复选框(Checkout)样式.md](https://cdn.pkmer.cn/images/202412261335154.jpg!pkmer)
+
+## CSS
+
+```css
+/* task选择器样式 来自Minimal v7.5.4 by 熊猫别熬夜*/
+
+input[data-task="!"]:checked,
+input[data-task="*"]:checked,
+input[data-task="-"]:checked,
+input[data-task="<"]:checked,
+input[data-task=">"]:checked,
+input[data-task=I]:checked,
+input[data-task=b]:checked,
+input[data-task=c]:checked,
+input[data-task=d]:checked,
+input[data-task=f]:checked,
+input[data-task=k]:checked,
+input[data-task=l]:checked,
+input[data-task=p]:checked,
+input[data-task=u]:checked,
+input[data-task=w]:checked,
+li[data-task="!"]>input:checked,
+li[data-task="!"]>p>input:checked,
+li[data-task="*"]>input:checked,
+li[data-task="*"]>p>input:checked,
+li[data-task="-"]>input:checked,
+li[data-task="-"]>p>input:checked,
+li[data-task="<"]>input:checked,
+li[data-task="<"]>p>input:checked,
+li[data-task=">"]>input:checked,
+li[data-task=">"]>p>input:checked,
+li[data-task=I]>input:checked,
+li[data-task=I]>p>input:checked,
+li[data-task=b]>input:checked,
+li[data-task=b]>p>input:checked,
+li[data-task=c]>input:checked,
+li[data-task=c]>p>input:checked,
+li[data-task=d]>input:checked,
+li[data-task=d]>p>input:checked,
+li[data-task=f]>input:checked,
+li[data-task=f]>p>input:checked,
+li[data-task=k]>input:checked,
+li[data-task=k]>p>input:checked,
+li[data-task=l]>input:checked,
+li[data-task=l]>p>input:checked,
+li[data-task=p]>input:checked,
+li[data-task=p]>p>input:checked,
+li[data-task=u]>input:checked,
+li[data-task=u]>p>input:checked,
+li[data-task=w]>input:checked,
+li[data-task=w]>p>input:checked {
+ --checkbox-marker-color: transparent;
+ border: none;
+ border-radius: 0;
+ background-image: none;
+ background-color: currentColor;
+ -webkit-mask-size: var(--checkbox-icon);
+ -webkit-mask-position: 50% 50%
+}
+
+input[data-task=">"]:checked,
+li[data-task=">"]>input:checked,
+li[data-task=">"]>p>input:checked {
+ color: var(--text-faint);
+ transform: rotate(90deg);
+ -webkit-mask-position: 50% 100%;
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M10.894 2.553a1 1 0 00-1.788 0l-7 14a1 1 0 001.169 1.409l5-1.429A1 1 0 009 15.571V11a1 1 0 112 0v4.571a1 1 0 00.725.962l5 1.428a1 1 0 001.17-1.408l-7-14z' /%3E%3C/svg%3E")
+}
+
+input[data-task="<"]:checked,
+li[data-task="<"]>input:checked,
+li[data-task="<"]>p>input:checked {
+ color: var(--text-faint);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z' clip-rule='evenodd' /%3E%3C/svg%3E");
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M6 2a1 1 0 00-1 1v1H4a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-1V3a1 1 0 10-2 0v1H7V3a1 1 0 00-1-1zm0 5a1 1 0 000 2h8a1 1 0 100-2H6z' clip-rule='evenodd' /%3E%3C/svg%3E")
+}
+
+input[data-task="?"]:checked,
+li[data-task="?"]>input:checked,
+li[data-task="?"]>p>input:checked {
+ --checkbox-marker-color: transparent;
+ background-color: var(--color-yellow);
+ border-color: var(--color-yellow);
+ background-position: 50% 50%;
+ background-size: 200% 90%;
+ background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"%3E%3Cpath fill="white" fill-rule="evenodd" d="M4.475 5.458c-.284 0-.514-.237-.47-.517C4.28 3.24 5.576 2 7.825 2c2.25 0 3.767 1.36 3.767 3.215c0 1.344-.665 2.288-1.79 2.973c-1.1.659-1.414 1.118-1.414 2.01v.03a.5.5 0 0 1-.5.5h-.77a.5.5 0 0 1-.5-.495l-.003-.2c-.043-1.221.477-2.001 1.645-2.712c1.03-.632 1.397-1.135 1.397-2.028c0-.979-.758-1.698-1.926-1.698c-1.009 0-1.71.529-1.938 1.402c-.066.254-.278.461-.54.461h-.777ZM7.496 14c.622 0 1.095-.474 1.095-1.09c0-.618-.473-1.092-1.095-1.092c-.606 0-1.087.474-1.087 1.091S6.89 14 7.496 14Z"%2F%3E%3C%2Fsvg%3E')
+}
+
+.theme-dark input[data-task="?"]:checked,
+.theme-dark li[data-task="?"]>input:checked,
+.theme-dark li[data-task="?"]>p>input:checked {
+ background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"%3E%3Cpath fill="black" fill-opacity="0.8" fill-rule="evenodd" d="M4.475 5.458c-.284 0-.514-.237-.47-.517C4.28 3.24 5.576 2 7.825 2c2.25 0 3.767 1.36 3.767 3.215c0 1.344-.665 2.288-1.79 2.973c-1.1.659-1.414 1.118-1.414 2.01v.03a.5.5 0 0 1-.5.5h-.77a.5.5 0 0 1-.5-.495l-.003-.2c-.043-1.221.477-2.001 1.645-2.712c1.03-.632 1.397-1.135 1.397-2.028c0-.979-.758-1.698-1.926-1.698c-1.009 0-1.71.529-1.938 1.402c-.066.254-.278.461-.54.461h-.777ZM7.496 14c.622 0 1.095-.474 1.095-1.09c0-.618-.473-1.092-1.095-1.092c-.606 0-1.087.474-1.087 1.091S6.89 14 7.496 14Z"%2F%3E%3C%2Fsvg%3E')
+}
+
+input[data-task="/"]:checked,
+li[data-task="/"]>input:checked,
+li[data-task="/"]>p>input:checked {
+ background-image: none;
+ background-color: rgba(0, 0, 0, 0);
+ position: relative;
+ overflow: hidden
+}
+
+input[data-task="/"]:checked:after,
+li[data-task="/"]>input:checked:after,
+li[data-task="/"]>p>input:checked:after {
+ top: 0;
+ left: 0;
+ content: " ";
+ display: block;
+ position: absolute;
+ background-color: var(--background-modifier-accent);
+ width: calc(50% - .5px);
+ height: 100%;
+ -webkit-mask-image: none
+}
+
+input[data-task="!"]:checked,
+li[data-task="!"]>input:checked,
+li[data-task="!"]>p>input:checked {
+ color: var(--color-orange);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")
+}
+
+input[data-task='"']:checked,
+input[data-task=“]:checked,
+li[data-task='"']>input:checked,
+li[data-task='"']>p>input:checked,
+li[data-task=“]>input:checked,
+li[data-task=“]>p>input:checked {
+ --checkbox-marker-color: transparent;
+ background-position: 50% 50%;
+ background-color: var(--color-cyan);
+ border-color: var(--color-cyan);
+ background-size: 75%;
+ background-repeat: no-repeat;
+ background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath fill="white" d="M6.5 10c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.318.142-.686.238-1.028.466c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.945c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.317.143-.686.238-1.028.467c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.944c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 17.5 10z"%2F%3E%3C%2Fsvg%3E')
+}
+
+.theme-dark input[data-task='"']:checked,
+.theme-dark input[data-task=“]:checked,
+.theme-dark li[data-task='"']>input:checked,
+.theme-dark li[data-task='"']>p>input:checked,
+.theme-dark li[data-task=“]>input:checked,
+.theme-dark li[data-task=“]>p>input:checked {
+ background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath fill="black" fill-opacity="0.7" d="M6.5 10c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.318.142-.686.238-1.028.466c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.945c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.317.143-.686.238-1.028.467c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.944c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 17.5 10z"%2F%3E%3C%2Fsvg%3E')
+}
+
+input[data-task="-"]:checked,
+li[data-task="-"]>input:checked,
+li[data-task="-"]>p>input:checked {
+ color: var(--text-faint);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")
+}
+
+body:not(.tasks) .markdown-preview-view ul li[data-task="-"].task-list-item.is-checked,
+body:not(.tasks) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task]:is([data-task="-"]),
+body:not(.tasks) li[data-task="-"].task-list-item.is-checked {
+ color: var(--text-faint);
+ text-decoration: line-through solid var(--text-faint) 1px
+}
+
+input[data-task="*"]:checked,
+li[data-task="*"]>input:checked,
+li[data-task="*"]>p>input:checked {
+ color: var(--color-yellow);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z' /%3E%3C/svg%3E")
+}
+
+input[data-task=l]:checked,
+li[data-task=l]>input:checked,
+li[data-task=l]>p>input:checked {
+ color: var(--color-red);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M5.05 4.05a7 7 0 119.9 9.9L10 18.9l-4.95-4.95a7 7 0 010-9.9zM10 11a2 2 0 100-4 2 2 0 000 4z' clip-rule='evenodd' /%3E%3C/svg%3E")
+}
+
+input[data-task=i]:checked,
+li[data-task=i]>input:checked,
+li[data-task=i]>p>input:checked {
+ --checkbox-marker-color: transparent;
+ background-color: var(--color-blue);
+ border-color: var(--color-blue);
+ background-position: 50%;
+ background-size: 100%;
+ background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 512 512"%3E%3Cpath fill="none" stroke="white" stroke-linecap="round" stroke-linejoin="round" stroke-width="40" d="M196 220h64v172"%2F%3E%3Cpath fill="none" stroke="white" stroke-linecap="round" stroke-miterlimit="10" stroke-width="40" d="M187 396h138"%2F%3E%3Cpath fill="white" d="M256 160a32 32 0 1 1 32-32a32 32 0 0 1-32 32Z"%2F%3E%3C%2Fsvg%3E')
+}
+
+.theme-dark input[data-task=i]:checked,
+.theme-dark li[data-task=i]>input:checked,
+.theme-dark li[data-task=i]>p>input:checked {
+ background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 512 512"%3E%3Cpath fill="none" stroke="black" stroke-opacity="0.8" stroke-linecap="round" stroke-linejoin="round" stroke-width="40" d="M196 220h64v172"%2F%3E%3Cpath fill="none" stroke="black" stroke-opacity="0.8" stroke-linecap="round" stroke-miterlimit="10" stroke-width="40" d="M187 396h138"%2F%3E%3Cpath fill="black" fill-opacity="0.8" d="M256 160a32 32 0 1 1 32-32a32 32 0 0 1-32 32Z"%2F%3E%3C%2Fsvg%3E')
+}
+
+input[data-task=S]:checked,
+li[data-task=S]>input:checked,
+li[data-task=S]>p>input:checked {
+ --checkbox-marker-color: transparent;
+ border-color: var(--color-green);
+ background-color: var(--color-green);
+ background-size: 100%;
+ background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 48 48"%3E%3Cpath fill="white" fill-rule="evenodd" d="M26 8a2 2 0 1 0-4 0v2a8 8 0 1 0 0 16v8a4.002 4.002 0 0 1-3.773-2.666a2 2 0 0 0-3.771 1.332A8.003 8.003 0 0 0 22 38v2a2 2 0 1 0 4 0v-2a8 8 0 1 0 0-16v-8a4.002 4.002 0 0 1 3.773 2.666a2 2 0 0 0 3.771-1.332A8.003 8.003 0 0 0 26 10V8Zm-4 6a4 4 0 0 0 0 8v-8Zm4 12v8a4 4 0 0 0 0-8Z" clip-rule="evenodd"%2F%3E%3C%2Fsvg%3E')
+}
+
+.theme-dark input[data-task=S]:checked,
+.theme-dark li[data-task=S]>input:checked,
+.theme-dark li[data-task=S]>p>input:checked {
+ background-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 48 48"%3E%3Cpath fill-opacity="0.8" fill="black" fill-rule="evenodd" d="M26 8a2 2 0 1 0-4 0v2a8 8 0 1 0 0 16v8a4.002 4.002 0 0 1-3.773-2.666a2 2 0 0 0-3.771 1.332A8.003 8.003 0 0 0 22 38v2a2 2 0 1 0 4 0v-2a8 8 0 1 0 0-16v-8a4.002 4.002 0 0 1 3.773 2.666a2 2 0 0 0 3.771-1.332A8.003 8.003 0 0 0 26 10V8Zm-4 6a4 4 0 0 0 0 8v-8Zm4 12v8a4 4 0 0 0 0-8Z" clip-rule="evenodd"%2F%3E%3C%2Fsvg%3E')
+}
+
+input[data-task=I]:checked,
+li[data-task=I]>input:checked,
+li[data-task=I]>p>input:checked {
+ color: var(--color-yellow);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M11 3a1 1 0 10-2 0v1a1 1 0 102 0V3zM15.657 5.757a1 1 0 00-1.414-1.414l-.707.707a1 1 0 001.414 1.414l.707-.707zM18 10a1 1 0 01-1 1h-1a1 1 0 110-2h1a1 1 0 011 1zM5.05 6.464A1 1 0 106.464 5.05l-.707-.707a1 1 0 00-1.414 1.414l.707.707zM5 10a1 1 0 01-1 1H3a1 1 0 110-2h1a1 1 0 011 1zM8 16v-1h4v1a2 2 0 11-4 0zM12 14c.015-.34.208-.646.477-.859a4 4 0 10-4.954 0c.27.213.462.519.476.859h4.002z' /%3E%3C/svg%3E")
+}
+
+input[data-task=f]:checked,
+li[data-task=f]>input:checked,
+li[data-task=f]>p>input:checked {
+ color: var(--color-red);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12.395 2.553a1 1 0 00-1.45-.385c-.345.23-.614.558-.822.88-.214.33-.403.713-.57 1.116-.334.804-.614 1.768-.84 2.734a31.365 31.365 0 00-.613 3.58 2.64 2.64 0 01-.945-1.067c-.328-.68-.398-1.534-.398-2.654A1 1 0 005.05 6.05 6.981 6.981 0 003 11a7 7 0 1011.95-4.95c-.592-.591-.98-.985-1.348-1.467-.363-.476-.724-1.063-1.207-2.03zM12.12 15.12A3 3 0 017 13s.879.5 2.5.5c0-1 .5-4 1.25-4.5.5 1 .786 1.293 1.371 1.879A2.99 2.99 0 0113 13a2.99 2.99 0 01-.879 2.121z' clip-rule='evenodd' /%3E%3C/svg%3E")
+}
+
+input[data-task=k]:checked,
+li[data-task=k]>input:checked,
+li[data-task=k]>p>input:checked {
+ color: var(--color-yellow);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M18 8a6 6 0 01-7.743 5.743L10 14l-1 1-1 1H6v2H2v-4l4.257-4.257A6 6 0 1118 8zm-6-4a1 1 0 100 2 2 2 0 012 2 1 1 0 102 0 4 4 0 00-4-4z' clip-rule='evenodd' /%3E%3C/svg%3E")
+}
+
+input[data-task=u]:checked,
+li[data-task=u]>input:checked,
+li[data-task=u]>p>input:checked {
+ color: var(--color-green);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12 7a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0V8.414l-4.293 4.293a1 1 0 01-1.414 0L8 10.414l-4.293 4.293a1 1 0 01-1.414-1.414l5-5a1 1 0 011.414 0L11 10.586 14.586 7H12z' clip-rule='evenodd' /%3E%3C/svg%3E")
+}
+
+input[data-task=d]:checked,
+li[data-task=d]>input:checked,
+li[data-task=d]>p>input:checked {
+ color: var(--color-red);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12 13a1 1 0 100 2h5a1 1 0 001-1V9a1 1 0 10-2 0v2.586l-4.293-4.293a1 1 0 00-1.414 0L8 9.586 3.707 5.293a1 1 0 00-1.414 1.414l5 5a1 1 0 001.414 0L11 9.414 14.586 13H12z' clip-rule='evenodd' /%3E%3C/svg%3E")
+}
+
+input[data-task=w]:checked,
+li[data-task=w]>input:checked,
+li[data-task=w]>p>input:checked {
+ color: var(--color-purple);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M6 3a1 1 0 011-1h.01a1 1 0 010 2H7a1 1 0 01-1-1zm2 3a1 1 0 00-2 0v1a2 2 0 00-2 2v1a2 2 0 00-2 2v.683a3.7 3.7 0 011.055.485 1.704 1.704 0 001.89 0 3.704 3.704 0 014.11 0 1.704 1.704 0 001.89 0 3.704 3.704 0 014.11 0 1.704 1.704 0 001.89 0A3.7 3.7 0 0118 12.683V12a2 2 0 00-2-2V9a2 2 0 00-2-2V6a1 1 0 10-2 0v1h-1V6a1 1 0 10-2 0v1H8V6zm10 8.868a3.704 3.704 0 01-4.055-.036 1.704 1.704 0 00-1.89 0 3.704 3.704 0 01-4.11 0 1.704 1.704 0 00-1.89 0A3.704 3.704 0 012 14.868V17a1 1 0 001 1h14a1 1 0 001-1v-2.132zM9 3a1 1 0 011-1h.01a1 1 0 110 2H10a1 1 0 01-1-1zm3 0a1 1 0 011-1h.01a1 1 0 110 2H13a1 1 0 01-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")
+}
+
+input[data-task=p]:checked,
+li[data-task=p]>input:checked,
+li[data-task=p]>p>input:checked {
+ color: var(--color-green);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M2 10.5a1.5 1.5 0 113 0v6a1.5 1.5 0 01-3 0v-6zM6 10.333v5.43a2 2 0 001.106 1.79l.05.025A4 4 0 008.943 18h5.416a2 2 0 001.962-1.608l1.2-6A2 2 0 0015.56 8H12V4a2 2 0 00-2-2 1 1 0 00-1 1v.667a4 4 0 01-.8 2.4L6.8 7.933a4 4 0 00-.8 2.4z' /%3E%3C/svg%3E")
+}
+
+input[data-task=c]:checked,
+li[data-task=c]>input:checked,
+li[data-task=c]>p>input:checked {
+ color: var(--color-orange);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M18 9.5a1.5 1.5 0 11-3 0v-6a1.5 1.5 0 013 0v6zM14 9.667v-5.43a2 2 0 00-1.105-1.79l-.05-.025A4 4 0 0011.055 2H5.64a2 2 0 00-1.962 1.608l-1.2 6A2 2 0 004.44 12H8v4a2 2 0 002 2 1 1 0 001-1v-.667a4 4 0 01.8-2.4l1.4-1.866a4 4 0 00.8-2.4z' /%3E%3C/svg%3E")
+}
+
+input[data-task=b]:checked,
+li[data-task=b]>input:checked,
+li[data-task=b]>p>input:checked {
+ color: var(--color-orange);
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M5 4a2 2 0 012-2h6a2 2 0 012 2v14l-5-2.5L5 18V4z' /%3E%3C/svg%3E")
+}
+
+```
diff --git "a/10-Obsidian/Obsidian\345\244\226\350\247\202/Obsidian\347\232\204CSS\344\273\243\347\240\201\347\211\207\346\256\265.md" "b/10-Obsidian/Obsidian\345\244\226\350\247\202/Obsidian\347\232\204CSS\344\273\243\347\240\201\347\211\207\346\256\265.md"
index 9543b676..c9fd6ce6 100644
--- "a/10-Obsidian/Obsidian\345\244\226\350\247\202/Obsidian\347\232\204CSS\344\273\243\347\240\201\347\211\207\346\256\265.md"
+++ "b/10-Obsidian/Obsidian\345\244\226\350\247\202/Obsidian\347\232\204CSS\344\273\243\347\240\201\347\211\207\346\256\265.md"
@@ -7,7 +7,7 @@ author: OS,PKMer
type: awesome
draft: false
editable: false
-modified: 20241224232938
+modified: 20241226133711
---
# Obsidian 的 CSS 代码片段
@@ -173,11 +173,12 @@ Obsidian 还支持一种外部样式代码引用的方式。
- [[Obsidian样式-特殊标签-让Markdown的文本多彩多色]]
- [[Obsidian样式-段落首行增加缩进]]
-### 待办
+### 待办 (Checkout)
- [[Obsidian样式-待办完成样式]]
- [[Obsidian样式-自定义待办图标]]
- [[Obsidian样式-待办事项美化复选框]]
+- [[Obsidian样式-Minimal主题复选框(Checkout)样式]]
### 引用
diff --git "a/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/DataViewJS+Tasks-\346\234\200\344\275\263\347\232\204\346\257\217\345\221\250\344\273\273\345\212\241\347\256\241\347\220\206\345\217\212\345\221\250\346\212\245.md" "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/DataViewJS+Tasks-\346\234\200\344\275\263\347\232\204\346\257\217\345\221\250\344\273\273\345\212\241\347\256\241\347\220\206\345\217\212\345\221\250\346\212\245.md"
new file mode 100644
index 00000000..05a0c222
--- /dev/null
+++ "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/DataViewJS+Tasks-\346\234\200\344\275\263\347\232\204\346\257\217\345\221\250\344\273\273\345\212\241\347\256\241\347\220\206\345\217\212\345\221\250\346\212\245.md"
@@ -0,0 +1,362 @@
+---
+uid: 20241226133741
+title: DataViewJS+Tasks- 最佳的每周任务管理及周报
+tags: [任务管理, Tasks, Dataviewjs]
+description: DataViewJS+Tasks- 最佳的每周任务管理及周报
+author: 熊猫别熬夜
+type: other
+draft: false
+editable: false
+modified: 20241226134042
+---
+
+# DataViewJS+Tasks- 最佳的每周任务管理及周报
+
+![241221_DataViewJS+Tasks:最佳的每周任务管理及周报.md](https://cdn.pkmer.cn/images/202412261337631.gif)
+
+## Tasks 查询语法
+
+基本的 Tasks 查询语法来列出本周今日的完成或未完成的任务 (包含今日日记为规划的任务),按任务状态分组。
+
+````md
+```tasks
+{(done on today) OR (happens on today)} OR {(happens on or before today) AND (not done) AND (happens on this week)} \
+OR {filter by function \
+ const filename = task.file.filenameWithoutExtension; \
+ const date1 = window.moment(filename).format('YYYY-MM-DD');\
+ const date2 = window.moment().format('YYYY-MM-DD');\
+ return date1 === date2;}
+# show tree
+# group by recurring reverse
+group by status.name reverse
+limit groups 4
+short mode
+```
+````
+
+## 基于 DataviewJS 的改造
+
+结合 dvjs 控件的 tasks 查询。
+
+- 参考案例:[How to get tasks in current file - Tasks User Guide - Obsidian Publish](https://publish.obsidian.md/tasks/How+To/How+to+get+tasks+in+current+file#Using+Dataview+to+generate+Tasks+blocks+-+the+old+way)
+
+````md
+```dataviewjs
+// 获取当前日期
+const today = window.moment();
+let selectedDate = today.clone();
+let currentWeekOffset = 0;
+
+// showTree 状态
+let showTree = false;
+let showWeekTasks = false;
+
+// 创建一个用于显示当前周次的标签
+const weekControlsContainer = document.createElement("div");
+weekControlsContainer.style.textAlign = "center";
+weekControlsContainer.style.marginBottom = "10px";
+
+// 创建 week input
+const weekInput = document.createElement("input");
+weekInput.type = "week";
+
+// 为 week input 设置样式
+Object.assign(weekInput.style, {
+ fontSize: "1.2rem",
+ color: "var(--text-normal)",
+ backgroundColor: "var(--background-primary)",
+ border: "1px solid var(--background-modifier-border)",
+ borderRadius: "4px",
+ padding: "0.2rem",
+ outline: "none"
+});
+
+// 设置初始值为当前周
+function getFormattedWeekString(date) {
+ const year = date.format("YYYY");
+ const week = date.format("WW");
+ return `${year}-W${week}`;
+}
+weekInput.value = getFormattedWeekString(today);
+
+// 设置 week input 的事件监听
+weekInput.addEventListener("change", () => {
+ const [year, week] = weekInput.value.split('-W').map(str => parseInt(str));
+ const firstWeek = today.clone().year(year).startOf('year').week(1);
+ const targetWeekStart = firstWeek.add(week - 1, 'weeks');
+ currentWeekOffset = targetWeekStart.week() - today.week();
+ dayButtonsContainer.children[0].click();
+});
+
+// 创建操作按钮
+const leftButtonWeek = document.createElement("button");
+const rightButtonWeek = document.createElement("button");
+const toggleShowTreeButton = document.createElement("button");
+const toggleShowWeekTasksButton = document.createElement("button");
+const todayButton = document.createElement("button");
+
+[leftButtonWeek, rightButtonWeek, todayButton, toggleShowTreeButton,toggleShowWeekTasksButton].forEach(button => {
+ button.style.border = "none";
+ button.style.margin = "0 5px";
+ button.style.padding = "5px 10px";
+ button.style.backgroundColor = "var(--interactive-accent)";
+ button.style.fontSize = "large";
+ button.style.color = "var(--text-on-accent)";
+ button.style.cursor = "pointer";
+});
+leftButtonWeek.textContent = "←";
+rightButtonWeek.textContent = "→";
+toggleShowTreeButton.textContent = "↳";
+toggleShowWeekTasksButton.textContent = "周报";
+todayButton.textContent = "今日";
+
+// 添加按钮逻辑
+leftButtonWeek.addEventListener("click", () => {
+ currentWeekOffset -= 1;
+ updateWeekInput();
+ dayButtonsContainer.children[0].click();
+});
+
+rightButtonWeek.addEventListener("click", () => {
+ currentWeekOffset += 1;
+ updateWeekInput();
+ dayButtonsContainer.children[0].click();
+});
+
+todayButton.addEventListener("click", () => {
+ currentWeekOffset = 0;
+ updateWeekInput();
+ const todayIndex = today.day() === 0 ? 6 : today.day() - 1;
+ dayButtonsContainer.children[todayIndex].click();
+});
+
+// 初始化 可选按钮
+function initButtonTheme(button, active) {
+ if (active) {
+ button.style.color = "var(--text-on-accent)";
+ button.style.backgroundColor = "var(--interactive-accent)";
+ } else {
+ button.style.color = "var(--text-normal)";
+ button.style.backgroundColor = "transparent";
+ }
+}
+
+toggleShowTreeButton.addEventListener("click", () => {
+ showTree = !showTree;
+ initButtonTheme(toggleShowTreeButton, showTree);
+ dayButtonsContainer.querySelector("button[style*='interactive-accent']").click();
+});
+
+toggleShowWeekTasksButton.addEventListener("click", () => {
+ showWeekTasks = !showWeekTasks;
+ initButtonTheme(toggleShowWeekTasksButton, showWeekTasks);
+ dayButtonsContainer.querySelector("button[style*='interactive-accent']").click();
+});
+
+// 初始化按钮主题色
+initButtonTheme(toggleShowTreeButton, showTree);
+initButtonTheme(toggleShowWeekTasksButton, showWeekTasks);
+
+
+// 更新周次选择框
+function updateWeekInput() {
+ const startDate = today.clone().startOf('week').add(currentWeekOffset, 'weeks');
+ weekInput.value = getFormattedWeekString(startDate);
+}
+
+// 插入控件
+weekControlsContainer.appendChild(toggleShowWeekTasksButton);
+weekControlsContainer.appendChild(leftButtonWeek);
+weekControlsContainer.appendChild(weekInput);
+weekControlsContainer.appendChild(rightButtonWeek);
+weekControlsContainer.appendChild(toggleShowTreeButton);
+weekControlsContainer.appendChild(todayButton);
+// 添加到页面中
+document.body.appendChild(weekControlsContainer);
+dv.container.appendChild(weekControlsContainer);
+
+// 创建星期按钮
+const daysOfWeek = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"];
+const dayButtonsContainer = document.createElement("div");
+dayButtonsContainer.style.display = "flex";
+dayButtonsContainer.style.justifyContent = "center";
+dayButtonsContainer.style.width = "100%";
+
+// 存储当前选中的按钮
+let selectedButton;
+// 添加样式的默认值
+const defaultButtonStyle = {
+ border: "none",
+ borderRadius: "0px",
+ cursor: "pointer",
+ fontSize: "large",
+ flex: "1 1 auto",
+ color: "var(--text-normal)",
+ backgroundColor: "transparent",
+};
+
+daysOfWeek.forEach((day, index) => {
+ const button = document.createElement("button");
+ Object.assign(button.style, defaultButtonStyle);
+ button.textContent = day;
+
+ button.addEventListener("click", () => {
+ // 设置选中的日期
+ selectedDate = today.clone().startOf("week").add(currentWeekOffset, "weeks").add(index, "days");
+ updateTasksView();
+
+ // 更新先前选中按钮的样式
+ if (selectedButton) {
+ Object.assign(selectedButton.style, defaultButtonStyle);
+ }
+
+ // 更新选中按钮的样式
+ button.style.backgroundColor = "var(--interactive-accent)";
+ button.style.color = "var(--text-on-accent)";
+ selectedButton = button;
+ });
+
+ dayButtonsContainer.appendChild(button);
+});
+// 插入星期按钮容器
+dv.container.appendChild(dayButtonsContainer);
+
+function updateTasksView() {
+ dv.container.innerHTML = "";
+ dv.container.appendChild(weekControlsContainer);
+ dv.container.appendChild(dayButtonsContainer);
+
+ const dateStr = selectedDate.format("YYYY-MM-DD");
+ const weekStr = selectedDate.format("YYYY-[W]WW");
+ const showTreeOption = showTree ? "show tree" : "";
+ const queryDayOfWeek = `
+ {(done on ${dateStr}) OR (happens on ${dateStr}) }\\
+ OR {(happens before ${dateStr}) AND (not done) AND (happens on ${weekStr}) }\\
+ OR {filter by function \\
+ const filename = task.file.filenameWithoutExtension;\\
+ const date1 = window.moment(filename).format('YYYY-MM-DD');\\
+ return date1 === '${dateStr}';}
+ ${showTreeOption}
+ group by status.name reverse
+ short mode
+ is not recurring
+ # limit groups 5
+ `;
+ const queryWeek = `
+ group by function task.description.includes("http") ? "🌐阅读记录" : "📅任务记录"
+ {(done on ${weekStr}) OR (happens on ${weekStr})}
+ ${showTreeOption}
+ is not recurring
+ # group by status.name
+ group by done reverse
+ short mode
+ limit 100
+ `;
+ const query = !showWeekTasks ? queryDayOfWeek : queryWeek;
+
+ dv.paragraph("```tasks\n" + query + "\n```");
+}
+
+// 初始化:选择今天
+todayButton.click()
+
+// 监听今日按钮的双击事件
+todayButton.addEventListener("dblclick", () => {
+ app.commands.executeCommandById("daily-notes");
+});
+```
+````
+
+- [[241226_修改版本记录]]
+
+## Tip:固定到侧边
+
+可以将该查询笔记放到侧边栏,固定住就行,可以用 CSS 隐藏固定按钮:
+
+```css
+/* !在左右侧边栏中不显示固定按钮 */
+.workspace-split.mod-horizontal.mod-right-split,
+.workspace-split.mod-horizontal.mod-left-split {
+ .workspace-tab-header-status-container {
+ display: none;
+ }
+ /* 缩减底部空白 不然可能加载成空白页 */
+ .markdown-preview-section {
+ padding-bottom: 0px !important;
+ min-height: unset !important;
+ }
+
+ .embedded-backlinks {
+ display: none;
+ }
+}
+```
+
+## 关于如何规划任务
+
+### 任务状态
+
+首先得了解下 Tasks 插件定义的任务状态 (task.status.type),任务状态类型只有 4 种:TODO、DONE、IN_PROGRESS、CANCELLED。
+
+| 状态符号 | 下一个状态符号 | 状态名称 | 状态类型 |
+| ---- | ------- | ---- | ------------- |
+| `空格` | `x` | 待办 | `TODO` |
+| `x` | `空格` | 已完成 | `DONE` |
+| `/` | `x` | 进行中 | `IN_PROGRESS` |
+| `-` | `空格` | 取消 | `CANCELLED` |
+
+```mermaid
+flowchart LR
+
+classDef TODO stroke:#f33,stroke-width:3px;
+classDef DONE stroke:#0c0,stroke-width:3px;
+classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
+classDef CANCELLED stroke:#ddd,stroke-width:3px;
+classDef NON_TASK stroke:#99e,stroke-width:3px;
+
+1["'Todo'
[ ] -> [x]
(TODO)"]:::TODO
+2["'Done'
[x] -> [ ]
(DONE)"]:::DONE
+3["'In Progress'
[/] -> [x]
(IN_PROGRESS)"]:::IN_PROGRESS
+4["'Cancelled'
[-] -> [ ]
(CANCELLED)"]:::CANCELLED
+1 --> 2
+2 --> 1
+3 --> 2
+4 --> 1
+
+linkStyle default stroke:gray
+```
+
+
+
+### 任务名称
+
+可能这些状态对于任务管理的分类来说有点简单了,Tasks 插件还支持自定义的任务样式以及设置不同的任务状态名称 (task.status.name),你可以通过在 tasks 插件设置中进行添加自定义任务名称以及设置对应的任务类型。
+
+![241221_DataViewJS+Tasks:最佳的每周任务管理及周报.md](https://cdn.pkmer.cn/images/202412261337155.png!pkmer)
+
+### 拓展:导入其他主题定义的任务样式
+
+幸运的是,Tasks 插件支持一键导入个别主题定义的复选框样式,只需要点击你需要主题定义的样式既可。
+
+![241221_DataViewJS+Tasks:最佳的每周任务管理及周报.md](https://cdn.pkmer.cn/images/202412261337531.png!pkmer)
+
+如果你不想专门为了一个复选框样式去更改主题,可以使用如下的 Minimal 主题的复选框样式的片段:[[Obsidian样式-Minimal主题复选框(Checkout)样式]]
+
+导入后也可以二次编辑,比如修改一些任务名称的任务类型,或者删除一些你需要的状态。
+
+![241221_DataViewJS+Tasks:最佳的每周任务管理及周报.md](https://cdn.pkmer.cn/images/202412261337903.png!pkmer)
+
+## Reference
+
+- [Introduction - Tasks User Guide - Obsidian Publish](https://publish.obsidian.md/tasks/Introduction)
+- [[基于 QuickAdd+Modal Form的任务 (Task) 编辑器]]
+- [[Obsidian样式-Kanban魔改之四象限模式和康奈尔笔记模式]]
+- [How to get tasks in current file - Tasks User Guide - Obsidian Publish](https://publish.obsidian.md/tasks/How+To/How+to+get+tasks+in+current+file#Using+Dataview+to+generate+Tasks+blocks+-+the+old+way)
+- [今日任务面板(附实用美化技巧) - 经验分享 - Obsidian 中文论坛](https://forum-zh.obsidian.md/t/topic/38641)
+
+## 存在问题
+
+- [基于DataviewJS的Tasks查询每周的任务#6,来自 benx - 经验分享 - Obsidian 中文论坛](https://forum-zh.obsidian.md/t/topic/44304/6?u=熊猫别熬夜)
+- momentJS 可以用 ISOWeek 来替代,因为它默认也是周日 day1
+ - ![241221_DataViewJS+Tasks:最佳的每周任务管理及周报.md](https://cdn.pkmer.cn/images/202412261337403.png!pkmer)
+
diff --git "a/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/Task\346\237\245\350\257\242\350\257\255\346\263\225\346\211\213\345\206\214.md" "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/Task\346\237\245\350\257\242\350\257\255\346\263\225\346\211\213\345\206\214.md"
new file mode 100644
index 00000000..3ab6780f
--- /dev/null
+++ "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/Task\346\237\245\350\257\242\350\257\255\346\263\225\346\211\213\345\206\214.md"
@@ -0,0 +1,1865 @@
+---
+uid: 20241226133215
+title: 关于查询
+tags: [任务管理]
+description: Tasks查询语法的介绍
+author: 熊猫别熬夜
+type: other
+draft: false
+editable: false
+modified: 20241226133323
+---
+
+
+
+> [!tip]+ 参考资料
+> [Tasks用户指南](https://publish.obsidian.md/tasks/Introduction)
+
+# 关于查询
+
+> [About Queries - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/About+Queries)
+
+可以通过使用 `tasks` 代码块查询来列出整个保管库中的 Task。您可以通过单击 Task 旁边的小铅笔图标来编辑查询结果中的 Task。默认情况下,Task 按状态、截止日期和路径排序。您可以更改排序(请参阅下面的查询选项)。
+
+
+
+查询 Task 最简单的方法是这样的:
+
+````md
+```tasks
+
+```
+````
+
+在实时预览和阅读模式下,这将列出您保管库中的**所有 Task**,无论其状态等属性如何。
+
+这可能不是您想要的。因此,Task 允许您设置查询选项来过滤要显示的 Task。例如,您可以仅显示今天到期的 Task(来自保管库中的任何位置):
+
+````md
+## Due today
+
+```tasks
+due today
+not done
+```
+````
+
+
+
+> [!note]+ Tasks 查询语法的执行循序
+>
+> 1. 所有过滤器指令均已运行
+> 2. 然后运行任何排序指令
+> 3. 然后运行任何 `limit` 指令
+> 4. 然后运行任何 `groups` 指令
+> 5. 然后运行任何 `limit groups` 指令
+
+
+
+# 过滤器 (Filters)
+
+> [Filters - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Filters)
+
+- Custom Filters:自定义过滤器
+- Searching for dates:搜索日期
+- Text filters:文本过滤器
+- Matching multiple filters:匹配多个过滤器
+- Filters for Task Statuses:任务状态过滤器
+- Filters for Task Dependencies:任务依赖性过滤器
+- Filters for Dates in Tasks:过滤任务中的日期
+- Filters for Other Task Properties:其他任务属性的过滤器
+- Filters for File Properties:文件属性过滤器
+
+
+
+## 自定义过滤器 Custom Filters
+
+> [!tip]+
+> `filter by function` was introduced in Tasks 4.2.0.
+> `filter by function` 在 Tasks 4.2.0 中引入。
+
+Task 提供了许多内置的过滤选项,但有时它们并不能完全满足所有用户的需求。
+
+现在,Tasks 拥有强大的机制,让您创建自己的自定义过滤器,提供无与伦比的灵活性。
+
+以下文档中提供了许多自定义过滤指令 `filter by function` 的示例,包括解释,用于当内置到 Task 中的指令不能满足您的偏好时。
+
+您可以在自定义过滤器 ( [Custom Filters](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)) 中了解更多关于这个非常强大的功能的信息。
+
+
+
+## 搜索日期
+
+任务在查询块内的日期方面提供了很大的灵活性。
+
+基本上有两种主要的日期搜索类型:
+
+- 特定日期搜索
+- 日期范围搜索
+
+
+
+### 特定日期搜索
+
+````md
+```tasks
+starts before 2023-04-20
+due on or before today
+```
+````
+
+
+
+#### 日期搜索选项
+
+| option 选项 | all earlier dates | search date | all later dates |
+| -------------- | :---------------: | :---------: | :-------------: |
+| `before` | ✔ | | |
+| `on or before` | ✔ | ✔ | |
+| `on` | | ✔ | |
+| `on or after` | | ✔ | ✔ |
+| `after` | | | ✔ |
+
+> [!tip]+
+> `on or before` 和 `on or after` 在 Task 4.6.0 中被引入。
+
+
+
+#### 绝对日期
+
+`` 过滤器可以使用“绝对”日期,其首选格式为 `YYYY-MM-DD` 。绝对日期指定日历中的特定日期。它们代表同一天,无论今天的日期如何。
+
+Examples: 示例:
+
+- `2021-05-25`
+
+
+
+#### 相对日期
+
+`` 过滤器可以与 `relative` 相对日期一起提供。相对日期是根据今天的日期计算的。
+
+当天变化时,相对日期如 `due today` 将被重新评估,以确保列表保持最新。
+
+基本示例:
+
+- `yesterday`
+- `today`
+- `tomorrow`
+- `next monday`
+- `last friday`
+- `14 days ago`
+- `in two weeks`
+- `14 October` (将使用当前年份)
+- `May` (本年度 5 月 1 日将被使用)
+
+请注意,如果是星期三并且你写 `tuesday` ,任务假定你指的是“昨天”,因为那是最近的星期二。如果你想指“下个星期二”,请使用 `next tuesday` 。
+
+
+
+### 日期范围搜索
+
+Task 允许指定一对日期进行日期搜索, `` 。
+
+本节描述日期范围搜索,例如:
+
+````md hl:2
+```tasks
+due 2023-11-25 2023-11-30
+happens this week
+```
+````
+
+
+
+#### 绝对日期范围
+
+| option 选项 | all earlier dates | `start date` | all dates inside the range | `end date` | all later dates |
+| -------------- | ----------------- | ------------ | -------------------------- | ---------- | --------------- |
+| `before` | ✔ | | | | |
+| `in or before` | ✔ | ✔ | ✔ | ✔ | |
+| `in` | | ✔ | ✔ | ✔ | |
+| `in or after` | | ✔ | ✔ | ✔ | ✔ |
+| `after` | | | | | ✔ |
+
+
+
+#### 相对日期范围
+
+Tasks 支持一组非常特定的相对 `` 值: `last|this|next week|month|quarter|year` 。管道( `|` )字符表示“或”。
+
+任务将根据今天的日期处理这些范围,并将其内部转换为绝对日期范围( `YYYY-MM-DD YYYY-MM-DD` )。
+
+示例相对日期范围:
+
+- `in this week` 本周一至周日(含)
+- `after this month`
+- `next quarter`
+- `on or before next year`
+
+
+
+#### 编号日期范围
+
+也可以使用独立于当前日期的编号日期范围的能力。这些编号日期范围类型得到支持:
+
+- Week 周
+ - Format: `YYYY-Www` ( `ww` 为周数,总是两位数字)
+ - Example: `2022-W14` 示例: `2022-W14`
+- Month 月份
+ - Format: `YYYY-mm` ( `mm` 为月份数字,总是两位数)
+ - Example: `2023-10` 示例: `2023-10`
+- Quarter 季度
+ - Format: `YYYY-Qq` ( `q` 是季度编号,总是 1 位数)
+ - Example: `2021-Q4`
+- Year 年份
+ - Format: `YYYY`
+ - Example: `2023` `
+
+> [!tip]+
+> 编号日期范围在任务 3.1.0 中引入。
+
+
+
+## Text filters 文本过滤器
+
+文本搜索过滤器有 2 种类型:
+
+1. `heading (includes|does not include) `
+2. `heading (regex matches|regex does not match) //`
+
+> [[#Heading 标题过滤器]]
+
+
+
+## 匹配多个过滤器
+
+每行查询都必须匹配,任务才能列出。换句话说,行之间被视为存在一个 'AND' 运算符。在每行中,您可以使用布尔运算符 `NOT` 、 `AND` 、 `OR` 、 `AND NOT` 、 `OR NOT` 和 `XOR` ,只要将单个过滤器用括号括起来即可:
+
+````md
+```tasks
+(no due date) OR (due after 2021-04-04)
+path includes GitHub
+```
+
+```tasks
+due after 2021-04-04
+(path includes GitHub) AND NOT (tags include #todo)
+```
+````
+
+
+
+## 任务状态过滤器
+
+- Status 状态
+- Status Name 状态名称
+- Status Type 状态类型
+- Status Symbol 状态符号
+- Next Status Symbol 下一个状态符号
+
+示例,查找具有尚未添加到任务设置中的状态符号的任何任务:
+
+````
+```tasks
+status.name includes unknown
+group by path
+```
+````
+
+
+
+### Status
+
+- `done` - 匹配状态类型为 `DONE` 、 `CANCELLED` 和 `NON_TASK` 任务
+- `not done` - 匹配状态类型为 `TODO` 和 `IN_PROGRESS` 任务
+
+> [!tip]+ 在 Tasks 1.23.0 之前,没有任务状态类型的概念,因此仅使用状态符号:
+>
+> - 带有 `[ ]` 任务被视为 `not done`
+> - 除空格外的任何其他字符均视为已 `done`
+
+
+
+自 4.2.0 任务以来,现在可以使用 `task.isDone` 进行按状态的自定义过滤。
+
+```js
+filter by function task.isDone
+```
+
+- 与 `done` 过滤器相同,但与其他行上的表达式结合使用可能很有用。
+
+```js
+filter by function ! task.isDone
+```
+
+- 与 `not done` 过滤器相同,但与其他行上的表达式结合使用可能很有用。
+
+> [!caution]+
+> `task.status.type` (see [Status Type](https://publish.obsidian.md/tasks/Queries/Filters#Status%20Type)) 在自定义过滤器中比 `task.isDone` 提供更多精度。
+
+
+
+### Status Name
+
+自定义的状态名称,例如,也许您将 `[!]` 命名为 `Important` ,因此该字段将搜索具有该状态符号的所有任务的文本 `Important` 。
+
+- `status.name (includes|does not include) `
+ - 不区分大小写(忽略大小写)。
+- 正则表达式匹配(默认区分大小写)。
+ - 必备阅读: [正则表达式搜索](https://publish.obsidian.md/tasks/Queries/Regular+Expressions)。
+
+> [!tip]+
+> `status.name` 文本搜索是在任务 1.23.0 中引入的。
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.status.name`**按状态名称进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+```javascript
+filter by function task.status.name === 'Unknown'
+```
+
+- 查找尚未添加到任务设置中的具有自定义状态的所有任务。
+
+
+
+### Status Type
+
+- `status.type (is|is not) (TODO|DONE|IN_PROGRESS|CANCELLED|NON_TASK)`
+ - `TODO` 等值不区分大小写:例如,您可以使用 `in_progress`
+- 这将搜索您为自定义状态指定的类型。
+- 如果您希望找到所有处于 `IN_PROGRESS` 的任务,并且您已将状态设置为 `[/]` 、 `[d]` 以及可能还有其他几个 `IN_PROGRESS` ,则此搜索非常有效。
+- 要搜索多种可能的状态类型:
+ - 要排除多个值,可以使用多个 `status.type is not` 行。
+ - 要允许多个值,请使用布尔组合,例如: `( status.type is TODO ) OR ( status.type is IN_PROGRESS )` 。
+ - 或者参见下面的“自定义过滤”示例。
+
+> [!tip]+
+> `status.type` 文本搜索是在任务 1.23.0 中引入的。
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.status.type`**按状态类型进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+```javascript
+filter by function task.status.type === 'NON_TASK'
+```
+
+- 查找 `NON_TASK` 类型的任务。
+
+---
+
+```javascript
+filter by function 'TODO,IN_PROGRESS'.includes(task.status.type)
+```
+
+- 查找类型为 `TODO` 或类型 `IN_PROGRESS` 的任务。
+- 这比执行布尔 `OR` 搜索更方便。
+
+---
+
+```javascript
+filter by function ! 'NON_TASK,CANCELLED'.includes(task.status.type)
+```
+
+- 查找类型不是 `NON_TASK` 且不是类型 `CANCELLED` 的任务。
+
+
+
+### Status Symbol
+
+没有内置的指令来按状态符号进行过滤。
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.status.symbol`**按状态符号进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+```javascript
+filter by function task.status.symbol === '-'
+```
+
+- 查找带有复选框 `[-]` 的任务,该复选框通常用于表示“已取消”。
+
+```javascript
+filter by function task.status.symbol !== ' '
+```
+
+- 查找除空格字符以外的任何内容作为状态符号的任务,即不带复选框 `[ ]` 任务。
+
+```javascript
+filter by function \
+ const symbol = task.status.symbol; \
+ return symbol === 'P' || symbol === 'C' || symbol === 'Q' || symbol === 'A';
+```
+
+- 注意,因为我们使用变量来避免重复,所以我们需要添加 `return`
+- 查找带有状态符号 `P` 、 `C` 、 `Q` 或 `A` 的任务。
+- 您想要搜索的符号越多,这可能会变得非常冗长。
+
+```javascript
+filter by function 'PCQA'.includes(task.status.symbol)
+```
+
+- 查找带有状态符号 `P` 、 `C` 、 `Q` 或 `A` 的任务。
+- 这是独立测试每个允许值的较长语句的便捷捷径。
+
+```javascript
+filter by function !' -x/'.includes(task.status.symbol)
+```
+
+- 查找带有默认设置中的任务不支持的任何状态符号的任务。
+
+
+
+### Next Status Symbol
+
+没有内置指令可以按下一个状态符号进行过滤。
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.status.nextSymbol`**按下一个状态符号进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+```javascript
+filter by function task.status.symbol === task.status.nextSymbol
+```
+
+- 查找切换到自身的任务,因为下一个符号与当前符号相同。
+
+
+
+## 其他任务属性的筛选器
+
+> [Filters - Tasks User Guide - Obsidian Publish](https://publish.obsidian.md/tasks/Queries/Filters#Filters+for+Other+Task+Properties)
+
+- Description 描述
+- Description without tags 没有标签的描述
+- Priority 优先事项
+- Urgency 紧迫性
+- Recurrence 复发
+- Sub-Items 子项目
+- Tags 标签
+- Markdown
+
+
+
+### Description
+
+- `description (includes|does not include) `
+ - 匹配不区分大小写(忽略大小写)。
+ - 匹配时忽略全局过滤器。
+- `description (regex matches|regex does not match) //`
+ - 正则表达式是否匹配(默认区分大小写)。
+
+> [!tip]+
+> - `regex matches` 和 `regex does not match` 是在任务 1.12.0 中引入的。
+
+
+
+对于精确搜索,了解该 `description` 可能会有所帮助:
+
+- 首先删除每个任务的所有能指表情符号及其值,
+- 然后删除所有全局过滤器,
+- 然后删除尾随空格
+- 然后搜索剩余的文本
+
+ 例如:
+
+|全局过滤器|任务线|按 `description` 搜索文本|
+|---|---|---|
+|没有全局过滤器|`'- [ ] Do stuff ⏫ #tag1 ✅ 2022-08-12 #tag2/sub-tag '`|`'Do stuff #tag1 #tag2/sub-tag'`|
+|`#task`|`'- [ ] #task Do stuff ⏫ #tag1 ✅ 2022-08-12 #tag2/sub-tag '`|`'Do stuff #tag1 #tag2/sub-tag'`|
+|`global-filter`|`'- [ ] global-filter Do stuff ⏫ #tag1 ✅ 2022-08-12 #tag2/sub-tag '`|`'Do stuff #tag1 #tag2/sub-tag'`|
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.description`**按描述进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+```javascript
+filter by function task.description.length > 100
+```
+
+- 查找具有长描述的任务。
+
+
+
+### Description without tags
+
+从 Tasks 4.2.0 开始,可以使用 `task.descriptionWithoutTags` 从自定义过滤器的描述中删除标签,以便在**[自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**中使用。
+
+
+
+### Priority
+
+- `priority is (above|below|not)? (lowest|low|none|medium|high|highest)`
+
+可用的优先级为(从高到低):
+
+1. 🔺 最高优先级
+2. ⏫ 高优先级
+3. 🔼 中等优先级
+4. 不使用指示符来表示没有优先级(使用“none”进行搜索)
+5. 🔽 低优先级
+6. ⏬️ 最低优先级
+
+> [!tip]+
+> - 任务 3.9.0 中引入了“最低”和“最高”优先级。
+
+
+
+#### 示例
+
+````
+```tasks
+not done
+priority is above none
+```
+
+```tasks
+priority is high
+```
+
+```tasks
+not done
+priority is not none
+```
+````
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.priorityName` 和 `task.priorityNumber`**按优先级名称和编号进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+ 使用优先级名称:
+
+```javascript
+filter by function task.priorityName !== 'Normal'
+```
+
+- 与 `priority is not none` 。
+
+使用优先级编号:
+
+```javascript
+filter by function task.priorityNumber % 2 === 0
+```
+
+- 使用任务的优先级编号进行过滤,其中最高为 0,最低为 5。
+- 这个人工示例找到所有具有偶数优先级编号的任务,即最高、中和低优先级。
+
+
+
+### Urgency
+
+没有内置的指令来按紧急程度进行过滤。
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.urgency`**按紧急程度进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+> [!caution]+
+> 请仔细阅读以下示例。要成功将 `task.urgency` 与 `filter by function` 结合使用,了解如何处理非整数搜索非常重要。
+
+```javascript
+filter by function task.urgency > 8.9999
+```
+
+- 查找紧急度分数高于 `9.0` 的任务。
+- 请注意,使用的限制值为 `8.9999` 。
+- 比较两个紧急度值“小于”或“大于”(使用 `>` 、 `>=` 、 `<` 或 `<=` 之一)的搜索**必须稍微调整其值以允许舍入**。
+
+```javascript
+filter by function task.urgency > 7.9999 && task.urgency < 11.0001
+```
+
+- 查找紧急度得分在 `8.0` 到 `11.0` 之间(含)的任务。
+
+```javascript
+filter by function task.urgency.toFixed(2) === 1.95.toFixed(2)
+```
+
+- 查找为 `1.95` 的任务。
+- 这是对任何数值进行相等或不等搜索的正确方法。
+- `===` 两侧的 `.toFixed(2)` 确保要比较的两个数字都四舍五入到相同的小数位数 (2)。
+- 这很重要,可以防止在比较非整数时发现 `10.29` 不完全相同。
+
+```javascript
+filter by function task.urgency.toFixed(2) !== 1.95.toFixed(2)
+```
+
+- 查找除默认分数 `1.95` 之外的任何紧急任务。
+
+```javascript
+filter by function task.urgency === 10.29
+```
+
+- **这样就不会发现任何任务了**。
+- 不要使用原始数字来搜索任何数字的相等或不相等,无论是看似整数还是浮点数。
+- 通过使用 `group by urgency` 并查看标题,我们可以得出结论,具有以下值的任务具有紧急程度 `10.19` :
+ - 明天到期,
+ - 没有优先权符号。
+- 由此,可以自然地假设我们可以搜索 `task.urgency === 10.29` 。
+- 但是,我们的函数正在检查以下值是否相等:
+ - `task.urgency` 大约是:
+ - `10.292857142857140928526860079728`
+ - `10.29` 大约为:
+ - `10.289999999999999147348717087880`
+- 这些值**并不完全相等**,因此测试无法找到任何匹配的任务。没有内置的指令来按紧急程度进行过滤。
+
+
+
+### Recurrence
+
+- `is recurring`
+- `is not recurring`
+- `recurrence (includes|does not include) `
+ - 匹配不区分大小写(忽略大小写)。
+ - 请注意,搜索的文本是以编程方式生成的并且是标准化的,因此可能与任何手动键入的任务中的文本不完全匹配。例如,带有 `🔁 every Sunday` 任务将按 `every week on Sunday` 进行搜索。
+ - 查看任务的标准化重复规则的最简单方法是使用 `group by recurrence` ,并查看生成的组标题。
+- `recurrence (regex matches|regex does not match) //`
+ - 正则表达式是否匹配(默认区分大小写)。
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.isRecurring` 和 `task.recurrenceRule`**按重复进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+使用 `task.isRecurring` :
+
+```javascript
+filter by function task.isRecurring
+```
+
+- 这与 `is recurring` 相同。
+- 它可以与 `&&` (布尔 AND)或 `||` 一起使用(布尔或)与其他条件结合。
+
+```javascript
+filter by function !task.isRecurring
+```
+
+- 这与 `is not recurring` 相同。
+- 它可以与 `&&` (布尔 AND)或 `||` 一起使用(布尔或)与其他条件结合。
+
+```javascript
+filter by function (!task.isRecurring) && task.originalMarkdown.includes('🔁')
+```
+
+- 查找**重复规则已损坏/无效**的任务。
+- 这假设使用任务表情符号格式,如果使用其他格式,当然应该更新。
+- 这使用了任务实现细节的知识,即重复规则被读取并从描述中删除,即使它们是无效的。
+- 所以我们必须在 `task.originalMarkdown` 中搜索重复标记,看看当 `task.isRecurring` 为 false 时,原始任务是否包含重复指示符。
+
+
+
+使用 `task.recurrenceRule` - 使用前请阅读有关 `task.recurrenceRule`[任务属性> 其他任务属性值](https://publish.obsidian.md/tasks/Scripting/Task+Properties#Values%20for%20Other%20Task%20Properties) 说明:
+
+```javascript
+filter by function task.recurrenceRule.includes("every week")
+```
+
+- 类似于 `recurrence includes every week` ,但区分大小写。
+
+```javascript
+filter by function !task.recurrenceRule.includes("every week")
+```
+
+- 类似于 `recurrence does not include every week` ,但区分大小写。
+
+```javascript
+filter by function task.recurrenceRule.includes("every week") && task.recurrenceRule.includes("when done")
+```
+
+- 查找每周到期的任务,并且在其重复规则中**包含**`when done` 。
+
+```javascript
+filter by function task.recurrenceRule.includes("every week") && !task.recurrenceRule.includes("when done")
+```
+
+- 查找每周到期**且不**包含重复规则中 `when done` 任务。
+
+
+
+### Sub-Items
+
+- `exclude sub-items`
+ - 设置此选项后,结果列表将仅包含文件中未缩进的任务。它只会显示列表中顶级列表项的任务。
+
+
+
+### Tags 标签
+
+> [Introduced in Tasks 1.6.0.](https://publish.obsidian.md/tasks/Queries/Filters#Tags)
+
+有关 [标签](https://publish.obsidian.md/tasks/Getting+Started/Tags) 在任务插件中的行为方式的重要信息,请参阅标签。
+
+- `no tags`
+- `has tags`
+- `tags (include|do not include) ` _或者_
+- `tag (includes|does not include) `
+ - 匹配不区分大小写(忽略大小写)。
+ - 匹配时忽略全局过滤器。
+ - 标签上的 `#` 是可选的,因此 `#home` 和 `home` 将匹配 `#home` 。
+ - 如果给出了 `#` ,则它必须存在,因此搜索 `#home` 将匹配 `#home` 但不匹配 `#location/home` 。
+ - 匹配是部分的,因此 `tags include foo` 将匹配 `#foo/bar` 和 `#foo-bar` 。
+- `tags (regex matches|regex does not match) //` _或者_
+- `tag (regex matches|regex does not match) //`
+ - 正则表达式是否匹配(默认区分大小写)。
+ - 必读:[正则表达式搜索](https://publish.obsidian.md/tasks/Queries/Regular+Expressions)。
+ - 通过在正则表达式末尾放置 `$` 字符,可以实现避免子标签的标签搜索。请参阅下面的示例。
+ - 如果搜索子标签,请记住转义正则表达式中的斜杠: `\/`
+
+> [!tip]+ Release
+>
+> - `regex matches` 和 `regex does not match` 是在任务 1.13.0 中引入的。
+> - Tasks 2.0.0 中引入了 `no tags` 和 `has tags` 。
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.tags`**按标签进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+```javascript
+filter by function task.tags.length === 1
+```
+
+- 查找恰好具有 1 个标签的任务(任何全局过滤器除外)。
+
+```javascript
+filter by function task.tags.length > 1
+```
+
+- 查找具有多个标签的任务(任何全局过滤器除外)。
+
+这些是更复杂的示例,如果您使用带有 [嵌套标签的](https://help.obsidian.md/Editing+and+formatting/Tags#Nested+tags) 任务,您可能需要复制这些示例。
+
+```javascript
+filter by function task.tags.find( (tag) => tag.includes('/') ) && true || false
+```
+
+- 查找至少具有一个嵌套标签的所有任务。
+
+```javascript
+filter by function task.tags.find( (tag) => tag.split('/').length >= 3 ) && true || false
+```
+
+- 查找至少具有一个双层嵌套标签的所有任务,例如 `#context/home/ground-floor` 。
+- 这会在 `/` 字符处分割每个标签,如果至少有 3 个单词,则算作匹配。
+
+
+
+#### 标签查询示例
+
+- `tags include #todo`
+- `tags do not include #todo`
+- `tag regex matches /#t$/`
+ - 搜索单字符标签 `#t` ,不带子标签,因为 `$` 匹配标签文本的结尾。
+- `tag regex matches /#book$/i`
+ - 尾随 `i` 表示不区分大小写。
+ - 搜索 `#book` 、 `#Book` 、 `#BOOK` 等标签,而 `$` 会阻止匹配 `#books` 、 `#book/literature` 等。
+
+
+
+### Markdown
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.originalMarkdown`**按原始 Markdown 行进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+例如,这可用于从 Tasks 未解析的 `task.originalMarkdown` 中提取信息,以用于过滤任务。
+
+
+
+## 文件属性的过滤器
+
+> [Filters - Tasks User Guide - Obsidian Publish](https://publish.obsidian.md/tasks/Queries/Filters#Filters+for+File+Properties)
+
+这些过滤器允许搜索特定文件和文件部分中的任务。
+
+- File Path 文件路径
+- Root 根路径
+- Folder 文件夹
+- File Name 文件名
+- Heading 标题
+
+
+
+### File Path 文件路径
+
+请注意,该路径包含 `.md` 扩展名。
+
+- `path (includes|does not include) `
+ - 匹配不区分大小写(忽略大小写)。
+ - 使用 `{{query.file.path}}` 或 `{{query.file.pathWithoutExtension}}` 作为包含当前查询的文件路径的占位符。
+ - 例如, `path includes {{query.file.path}}`
+ - 有用的阅读:[查询属性](https://publish.obsidian.md/tasks/Scripting/Query+Properties) 和 [占位符](https://publish.obsidian.md/tasks/Scripting/Placeholders)
+- `path (regex matches|regex does not match) //`
+ - 正则表达式是否匹配(默认区分大小写)。
+ - 必读:[正则表达式搜索](https://publish.obsidian.md/tasks/Queries/Regular+Expressions)。
+
+> [!caution]+
+>
+> - `regex matches` 和 `regex does not match` 是在任务 1.12.0 中引入的。
+> - 占位符在任务 4.7.0 中发布。
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.file.path`**按文件路径进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+在任务 4.8.0 中 `task.file.pathWithoutExtension` 已添加。
+
+从 Tasks 5.1.0 开始,可以在自定义过滤器中方便地使用查询的文件路径:
+
+- `query.file.path` 或
+- `query.file.pathWithoutExtension`
+- 有用的阅读:[查询属性](https://publish.obsidian.md/tasks/Scripting/Query+Properties)。
+
+```javascript
+filter by function task.file.path.includes('tasks releases/4.1.0 Release.md')
+```
+
+- 与“路径包含”类似,但它**区分大小写**:大小写很重要。
+
+```javascript
+filter by function task.file.path === 'tasks releases/4.1.0 Release.md'
+```
+
+- 精确、**区分大小写的**相等搜索。
+- 请注意,还需要包含文件扩展名。
+- 对于内置搜索,这只能使用正则表达式来完成,使用特殊字符 `^` 和 `$` ,并转义任何具有特殊含义的字符,例如 `/` 。
+
+```javascript
+filter by function task.file.path.toLocaleLowerCase() === 'TASKS RELEASES/4.1.0 RELEASE.MD'.toLocaleLowerCase()
+```
+
+- 精确的、**不**区分大小写的相等搜索。
+- 通过将这两个值都小写,我们不必担心在查询中手动将它们小写。
+
+
+
+### Root 根路径
+
+> [!caution]-
+>
+> - 在任务 3.4.0 中引入。
+> - 占位符在任务 4.7.0 中发布。
+
+`root` 是包含任务的文件的顶级文件夹,即路径中的第一个目录,对于 Vault 根目录中的文件,该目录将为 `/` 。
+
+- `root (includes|does not include) `
+ - 匹配不区分大小写(忽略大小写)。
+ - 使用 `{{query.file.root}}` 作为包含当前查询的文件根的占位符。
+ - 例如, `root includes {{query.file.root}}`
+ - 有用的阅读:[查询属性](https://publish.obsidian.md/tasks/Scripting/Query+Properties) 和 [占位符](https://publish.obsidian.md/tasks/Scripting/Placeholders)
+- `root (regex matches|regex does not match) //`
+ - 正则表达式是否匹配(默认区分大小写)。
+ - 必读:[正则表达式搜索](https://publish.obsidian.md/tasks/Queries/Regular+Expressions)。
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.file.root`**按根文件夹进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+从 Tasks 5.1.0 开始,可以在自定义过滤器中方便地使用查询的文件根:
+
+- `query.file.root`
+- 有用的阅读:[查询属性](https://publish.obsidian.md/tasks/Scripting/Query+Properties)。
+
+```javascript
+filter by function task.file.root === '/'
+```
+
+- 在 Vault 根目录的文件中查找任务。
+- 请注意,这是**区分大小写的**:大小写很重要。
+
+```javascript
+filter by function task.file.root === 'Work/'
+```
+
+- 在 Vault 根目录下的 `Work` 文件夹内的文件中查找任务。
+- 请注意,这是**区分大小写的**:大小写很重要。
+
+
+
+### Folder 文件夹
+
+>
+
+这是包含任务的文件的文件夹,对于 Vault 根目录中的文件,该 `文件夹` 将为 `/`。
+
+- `folder (includes|does not include) `
+ - 匹配不区分大小写(不考虑大小写)。
+ - 使用 `{{query.file.folder}}` 作为包含当前查询的文件文件夹的占位符。
+ - 例如, `folder includes {{query.file.folder}}` 它将匹配包含查询的文件夹**和所有子文件夹中**的任务。
+ - 有用的阅读材料:[Query Properties](https://publish.obsidian.md/tasks/Scripting/Query+Properties) 和 [Placeholders](https://publish.obsidian.md/tasks/Scripting/Placeholders)
+- `folder (regex matches|regex does not match) //`
+ - 正则表达式是否匹配(默认区分大小写)。
+ - 必读:[正则表达式搜索](https://publish.obsidian.md/tasks/Queries/Regular+Expressions)。
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.file.folder` **按文件夹 [进行自定义筛选](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+
+
+### File Name 文件名
+
+> [!tip]+
+>
+> - 在任务 3.4.0 中引入。
+> - 占位符在任务 4.7.0 中发布。
+
+请注意,文件名包含 `.md` 扩展名。
+
+- `filename (includes|does not include) `
+ - 匹配不区分大小写(忽略大小写)。
+ - 使用 `{{query.file.filename}}` 或 `{{query.file.filenameWithoutExtension}}` 作为包含当前查询的文件的文件名的占位符。
+ - 例如, `filename includes {{query.file.filename}}`
+ - 有用的阅读:[查询属性](https://publish.obsidian.md/tasks/Scripting/Query+Properties) 和 [占位符](https://publish.obsidian.md/tasks/Scripting/Placeholders)
+- `filename (regex matches|regex does not match) //`
+ - 正则表达式是否匹配(默认区分大小写)。
+
+
+
+从 Tasks 4.2.0 开始,现在可以使用 `task.file.filename`**按文件名进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
+
+在任务 4.8.0 中 `task.file.filenameWithoutExtension` 已添加。
+
+从 Tasks 5.1.0 开始,可以在自定义过滤器中方便地使用查询的文件名:
+
+- `query.file.filename` 或
+- `query.file.filenameWithoutExtension`
+- 有用的阅读:[查询属性](https://publish.obsidian.md/tasks/Scripting/Query+Properties)。
+
+```javascript
+filter by function task.file.filename === "4.1.0 Release.md"
+```
+
+- 在任何文件夹中具有确切文件名的文件中查找任务。
+- 相等性测试 `===` 要求包含文件扩展名 `.md` 。
+
+```javascript
+filter by function task.file.filename.includes("4.1.0 Release")
+```
+
+- 在名称包含给定文本的文件中查找任务。
+- 通过使用 `.includes()` 并省略文件扩展名,这还将找到诸如 `14.1.0 Release.md` 和 `4.1.0 Release Notes.md` 之类的文件。
+
+
+
+### Heading 标题过滤器
+
+1. `heading (includes|does not include) `
+ - 它至少包含字符串 `` 的一次,匹配该部分中所有任务。
+ - 这是,它是一个子串搜索。
+ - 所以 `heading includes Day Planner` 将匹配第 `## Monday Day Planner` 和第 `## Day Planner for typical day` 节的任务。
+ - 它忽略大小写。搜索不区分大小写。
+ - 所以 `heading includes Day Planner` 将匹配第 `## Day Planner` 和第 `## DAY PLANNER` 节的任务。
+ - 任何引号字符( `'` 和 `"` )都包含在搜索文本中。
+ - 所以 `heading includes "Day Planner"` 将匹配一个部分 `## "Day Planner"` 。
+ - 但是不会匹配带有标题如 `## Day Planner` 的任务。
+2. `heading (regex matches|regex does not match) //`
+ - 正则表达式匹配(默认区分大小写)。
+ - 正则表达式(或“regex”)搜索是一个强大但高级的功能。
+ - 它需要深入的知识才能成功使用,不会错过预期的搜索结果。
+ - 它很容易编写一个看起来正确的正则表达式,但它包含一个具有非明显意义的特殊字符。
+ - 必备阅读: [Regular Expression Searches](https://publish.obsidian.md/tasks/Queries/Regular+Expressions).
+
+**案例**
+
+````
+```tasks
+heading includes pkmerdocs
+done last week
+```
+````
+
+
+
+# 解释查询 (Explaining Queries)
+
+> [Explaining Queries - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Explaining+Queries)
+
+> [!tip]+
+> - 在任务 1.19.0 中引入。
+
+当在实时预览和阅读模式下查看任务块时, `explain` 指令会在搜索结果的开头添加一些额外的输出。
+
+这样做有很多好处:
+
+- 基于日期的过滤器很容易理解:
+ - 过滤器中的所有日期都会展开,以显示搜索中使用的实际日期。
+- 布尔查询逻辑更清晰。
+ - 查询的组合(通过 `AND` 、 `OR` 、 `NOT` 等)可以更清楚地看到。
+- 如果启用了 [全局过滤器](https://publish.obsidian.md/tasks/Getting+Started/Global+Filter),它会包含在说明中。
+ - 这通常可以解释为什么结果中缺少任务。
+- 如果启用了 [全局查询](https://publish.obsidian.md/tasks/Queries/Global+Query),它也会包含在说明中。
+- 列出所有 [“分组依据”](https://publish.obsidian.md/tasks/Queries/Grouping) 指令(自任务 5.4.0 起)
+- 列出所有 [“排序依据”](https://publish.obsidian.md/tasks/Queries/Sorting) 指令(自任务 5.4.0 起)
+
+
+
+## 示例:过滤器中的日期已扩展
+
+例如,当以下文本放置在任务查询块中时:
+
+```text
+starts after 2 years ago
+scheduled after 1 week ago
+due before tomorrow
+explain
+```
+
+`2022-10-21` ,结果如下:
+
+```text
+Explanation of this Tasks code block query:
+
+ starts after 2 years ago =>
+ start date is after 2020-10-21 (Wednesday 21st October 2020) OR no start date
+
+ scheduled after 1 week ago =>
+ scheduled date is after 2022-10-14 (Friday 14th October 2022)
+
+ due before tomorrow =>
+ due date is before 2022-10-22 (Saturday 22nd October 2022)
+
+ No grouping instructions supplied.
+
+ No sorting instructions supplied.
+```
+
+请注意它如何非常清楚地显示正在搜索的日期,包括星期几。
+
+它还表明 `starts` 搜索也匹配没有开始日期的任务。
+
+
+
+# 排序 (Sorting)
+
+> [Sorting - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Sorting)
+
+- Sort by Task Statuses
+- Sort by Task Dependencies
+- Sort by File Properties
+- Sort by Dates in Tasks
+- Sort by Other Task Properties
+
+
+
+示例:
+
+````
+```tasks
+not done
+due today
+sort by due
+```
+
+```tasks
+done
+sort by done reverse
+```
+
+```tasks
+not done
+due before next monday
+sort by status
+sort by description reverse
+sort by path
+```
+````
+
+
+
+> [!tip]+
+> 如果您希望任务按照引入**紧急性**之前的排序方式进行排序,请将以下 `sort` 表达式添加到您的查询中:
+
+````
+```tasks
+sort by status
+sort by due
+sort by path
+```
+````
+
+
+
+基本大纲:
+
+- Sort by Task Statuses
+ - Status
+ - Status Name
+ - Status Type
+ - Status Symbol
+ - Next Status Symbol
+- Sort by Task Dependencies
+ - Id
+ - Depends On
+- Sort by Dates in Tasks
+ - How dates are sorted
+ - Done Date
+ - Due Date
+ - Scheduled Date
+ - Start Date
+ - Created Date
+ - Cancelled Date
+ - Happens
+- Sort by Other Task Properties
+ - Description
+ - Description without tags
+ - Priority
+ - Urgency
+ - Recurrence
+ - Tags
+ - Original Markdown
+ - Random sorting
+- Sort by File Properties
+ - File Path
+ - Root
+ - Folder
+ - File Name
+ - Heading
+
+
+
+# 分组 (Grouping)
+
+> [Grouping - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Grouping)
+
+> [!note]+ Tasks 查询语法的执行循序
+>
+> 1. 所有过滤器指令均已运行
+> 2. 然后运行任何排序指令
+> 3. 然后运行任何 `limit` 指令
+> 4. 然后运行任何 `groups` 指令
+> 5. 然后运行任何 `limit groups` 指令
+
+
+
+![【Obsidian-Task】Task查询语法.md](https://cdn.pkmer.cn/images/202412261301770.png!pkmer)
+
+
+
+## 基础 (Basic)
+
+> [!tip]+
+> 在任务 1.6.0 中引入。
+
+默认情况下,任务在单个列表中显示任务。
+
+要按标题划分匹配任务,您可以向查询添加 `group by` 。
+
+
+
+### 示例
+
+````md
+```tasks
+not done
+group by filename
+```
+````
+
+
+
+## 分组的类型
+
+- 按任务状态分组:Group by Task Statuses
+ - 同 [[#过滤器 (Filters)#任务状态过滤器]],详见 [📍官方文档](https://publish.obsidian.md/tasks/Queries/Grouping#Group+by+Task+Statuses)
+- 按任务依赖性分组:Group by Task Dependencies
+ - 详见 [📍官方文档](https://publish.obsidian.md/tasks/Queries/Grouping#Group+by+Task+Dependencies)
+- 按任务中的日期分组:Group by Dates in Tasks
+ - 同 [[#过滤器 (Filters)#Searching for dates 搜索日期]],详见 [📍官方文档](https://publish.obsidian.md/tasks/Queries/Grouping#Group+by+Task+Dependencies)
+- 按其他任务属性分组:Group by Other Task Properties
+ - 同 [[#过滤器 (Filters)#其他任务属性的筛选器]],详见 [📍官方文档](https://publish.obsidian.md/tasks/Queries/Grouping#Group+by+Other+Task+Properties)
+- 按文件属性分组:Group by File Properties
+ - 同 [[#过滤器 (Filters)#文件属性的过滤器]],详见 [📍官方文档](https://publish.obsidian.md/tasks/Queries/Grouping#Group+by+File+Properties)
+
+
+
+## 拓展:自定义分组
+
+> [!tip]+
+> Tasks 4.0.0 中引入了 `group by function` 。
+
+任务提供了许多内置的分组选项,但有时它们并不能完全满足所有用户的需求。现在,任务有一个强大的机制供您创建自己的**自定义组**,提供令人难以置信的灵活性。
+
+自定义分组指令 `group by function`,您可以在 [自定义分组](https://publish.obsidian.md/tasks/Scripting/Custom+Grouping) 中找到有关此非常强大的功能的更多信息。
+
+
+
+## 多个分组 (Multiple groups)
+
+您可以添加多个 `group by` 查询选项,每个选项占一行。这将创建嵌套分组。第一个分组优先级最高。
+
+每个后续的 `group by` 将在现有分组内生成新的标题层次:
+
+- 第一个 `group by` 显示为 h4 标题
+- 第二个 `group by` 显示为 h5 标题
+- 第三和后续的 `group by` 显示为 h6 标题
+
+
+
+示例,多个分组按顺序嵌套:
+
+````md
+```tasks
+not done
+group by folder
+group by filename
+group by heading
+```
+````
+
+
+
+## 细化分组 (Refining groups)
+
+可以设置分组的几个参数:
+
+1. Reverse:控制分组的排列顺序。
+2. Limiting group size:限制每组中的任务数量。
+
+
+
+### Reverse
+
+在要分组的属性名称后面,可以添加 `reverse` 关键字。如果指定,则该属性的组标题将相反。
+
+ 例如:
+
+- `group by due` 将对组标题进行排序:
+ - 从**最早的**预定期开始...
+ - 到**最后的**截止日期
+- `group by due reverse` 将对组标题进行排序:
+ - 从**最新的**预定期开始...
+ - 到**最早的**预定期最后
+
+
+
+### Limiting group size
+
+您可以限制每个组中的任务数量,也许首先处理最重要的事情。
+
+使用查询字符串 `limit groups to tasks` 。这将仅列出查询结果中每组中的前 `` 任务。
+
+简写是 `limit groups ` 。
+
+> 如果任务查询中没有 `group by` 指令,则将忽略 `limit groups` 指令。
+
+> [!tip]+
+> `limit groups to tasks` 在任务 3.8.0 中引入。
+
+
+
+# 限制 (Limiting)
+
+> [Limiting - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Limiting)
+
+- 限制任务总数
+- 限制每组中的任务数量
+- 查看找到的任务总数
+
+
+
+## 限制任务总数
+
+您可以限制显示为查询结果的任务总数。
+
+使用查询字符串 `limit to tasks` 。这只会列出查询的前 `` 结果(排序后)。
+
+简写是 `limit ` 。
+
+
+
+## 限制每组中的任务数量
+
+使用查询字符串 `limit groups to tasks` 可以限制每个组中允许的任务数量。
+
+简写是 `limit groups ` 。
+
+> [[#分组(Grouping)#Limiting group size]]
+
+
+
+> [!tip]+
+> `limit groups to tasks` 在任务 3.8.0 中引入。
+
+
+
+## 查看找到的任务总数
+
+如果任一 `limit` 选项阻止任何任务显示在结果中,则会显示总数,例如:
+
+```text
+50 of 686 tasks
+```
+
+> [!tip]+
+> Tasks 4.8.0 中添加了任务总数的显示。
+
+
+
+# 布局 (Layout)
+
+> [Layout - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Layout)
+
+- Task Elements
+- Query Elements
+- Hiding/Showing Elements
+- Full Mode
+- Short Mode
+
+
+
+## Task Elements
+
+以下任务元素存在:
+
+- id(标识)
+- depends on(依赖于)
+- priority(优先级)
+- cancelled date(取消日期)
+- created date(创建日期)
+- start date(开始日期)
+- scheduled date(计划日期)
+- due date(截止日期)
+- done date(完成日期)
+- recurrence rule(重复规则)
+- on completion (完成时)
+- tags (标签)
+
+所有这些任务元素默认情况下都会显示,因此如果您不想显示其中任何一个,可以使用命令“hide”。
+
+
+
+## Query Elements
+
+存在以下查询元素:
+
+- `tree`
+- `edit button`
+- `postpone button`
+- `backlink`
+- `urgency`
+- `task count`
+
+
+
+## Hiding/Showing Elements
+
+每个 [[#Task Elements|Task元素(Task Elements)]] 可以都设置隐藏 (hide) 或显示 (show),且查询中可以使用多个 show 和 hide 指令,每个指令位于单独的行上。
+
+例如:
+
+````md
+```tasks
+no due date
+path includes GitHub
+
+hide recurrence rule
+hide task count
+hide backlink
+show urgency
+```
+````
+
+
+
+### Hide OR Show Tree
+
+> [!tip]
+> 新的指令 `show tree` 是教 Tasks 插件完全处理 [嵌套任务和列表项](https://help.obsidian.md/Editing+and+formatting/Basic+formatting+syntax#Nesting+lists) 的一系列步骤中的第一个。
+
+
+
+**Show Tree**
+
+`show tree` 指令使我们能够查看任务中的父/子关系,以及它们的嵌套任务和列表项:
+
+![【Obsidian-Task】Task查询语法.md](https://cdn.pkmer.cn/images/202412261301353.png!pkmer)
+
+````md
+```tasks
+not done
+filename includes Party Planner
+
+show tree
+hide backlink
+```
+````
+
+
+
+### Hide OR Show Tags
+
+[Layout - Tasks User Guide - Obsidian Publish](https://publish.obsidian.md/tasks/Queries/Layout#Hide+and+Show+Tags)
+
+只有 Obsidian 识别的标签才会被 `hide tags` 隐藏。
+
+```
+hide tags
+```
+
+![【Obsidian-Task】Task查询语法.md](https://cdn.pkmer.cn/images/202412261301724.png!pkmer)
+
+
+
+## Full Mode
+
+在**完整模式 (Full Mode)**下,查询结果将显示表情符号和具体的重复规则或日期。
+
+这是默认模式,该命令为 `full mode`。
+
+Example:
+
+````
+```tasks
+not done
+full mode
+```
+````
+
+---
+
+- 关联:[[241217_如何隐藏Tasks的反向链接(Backlinks)]]
+
+
+
+## Short Mode
+
+在**短模式 (Short Mode)**下,查询结果只会显示表情符号,而不显示具体的重复规则或日期。您可以将鼠标悬停在任务上以查看工具提示中的规则和日期。
+
+该命令是 `short mode` 。
+
+Example:
+
+````
+```tasks
+not done
+short mode
+```
+````
+
+
+
+# 注释 (Comments)
+
+> [Comments - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Comments)
+
+所有以 `#` 字符开头的查询行都会被视为注释并被忽略。
+
+Example:
+
+````
+```tasks
+not done
+# Uncomment the following line to enable short mode:
+# short mode
+```
+````
+
+
+
+## Inline comments 行内注释
+
+> 行内注释在 Tasks 4.7.0 中引入。
+
+一行中的 `{{! 和 }}` 之间的任何文本都将被忽略。不支持多行注释。
+
+````
+```tasks
+not done
+short mode {{! 这条注释将被忽略 }}
+```
+````
+
+当 Tasks 处理查询中的占位符时,这样的注释将被移除。
+
+
+
+# 全局查询 (Global Query)
+
+> [Global Query - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Global+Query)
+
+> [!tip]- Global Query 设置是在 Tasks 3.5.0 版本中添加的。
+> ![【Obsidian-Task】Task查询语法.md](https://cdn.pkmer.cn/images/202412261301107.png!pkmer)
+
+您可以在设置中设置全局查询,任务将添加到保管库中所有查询的开头。
+
+
+
+## 忽略全局查询 (Ignore global query)
+
+如果您需要忽略给定任务块中的全局查询,您可以将 `ignore global query` 指令添加到块的任何位置。
+
+例如,这允许您让任务搜索默认忽略某些文件夹。然后,在少数搜索中,您可以启用在这些文件夹中搜索任务。
+
+ 例子
+
+```text
+tags include work
+ignore global query
+```
+
+> [!tip]+ Tasks 4.6.0 中添加了 ignore global query 指令。
+
+
+
+# 组合过滤器 (Combining+Filters)
+
+> [Combining Filters - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Combining+Filters)
+
+任务提供的各个 [[#过滤器 (Filters)]] 可以通过以下方式以强大的方式组合在一起:
+
+1. 将它们中的每一个包裹在分隔符中,例如 `(` 和 `)` ,
+2. 然后用布尔运算符(例如 `AND` 、 `OR` 和 `NOT` 将它们连接起来。
+
+ 例如:
+
+````text
+```tasks
+not done
+(due after yesterday) AND (due before in two weeks)
+[tags include #inbox] OR [path includes Inbox] OR [heading includes Inbox]
+```
+````
+
+上述任务块中的每 3 行代表一个单独的过滤器,并且仅显示与\_ 所有\_3 行过滤器匹配的任务。
+
+
+
+## 语法 (Syntax)
+
+一个或多个过滤器可以通过布尔运算符组合在一行中,以创建一个新的、强大的、灵活的过滤器。
+
+下面是简单布尔指令的组件图:
+
+```text
++--------------------------+ +--------------------------+
+| ( tag includes #XX ) | OR | ( tag includes #YY ) |
++--------------------------+ +--------------------------+
+ ^ ^ ^ ^
+ | | | |
+ +- delimiters: () -+ +- delimiters: () -+
+ for left sub-expression for right sub-expression
+ | |
+ +--------- Operator: OR -----------+
+ Connects both sub-expressions
+```
+
+
+
+以下规则适用:
+
+- 每个单独的过滤器必须由一对**分隔符**包围:
+ - 本指南中最常用的分隔符是 `(` 和 `)` 。
+ - 可用分隔符的完整列表是:
+ - `(....)`
+ - `[....]`
+ - `{....}`
+ - `"...."`
+ - 布尔指令中不能混合使用分隔符类型:您必须为行上的过滤器选择适当的分隔符。
+- 支持的**运算符**有: `AND` 、 `OR` 、 `NOT` 、 `AND NOT` 、 `OR NOT` 和 `XOR` 。
+ - 运算符区分大小写:它们必须大写。
+ - 请参阅下面的 [布尔运算符](https://publish.obsidian.md/tasks/Queries/Combining+Filters#Boolean%20Operators)。
+- 您可以使用更多分隔符将更多过滤器嵌套在一起。
+- **尾部反斜杠**( `\` ) 可用于将长过滤器分解为多行,如 [行延续](https://publish.obsidian.md/tasks/Queries/Line+Continuations) 中所述。
+- 每行组合的过滤器数量以及括号的嵌套级别没有实际限制。
+
+ 建议:
+
+- 组合两个以上过滤器时,请随意使用 `(` 和 `)` (或任何其他分隔符对)以确保获得预期的逻辑。请参阅下面的 [执行优先级](https://publish.obsidian.md/tasks/Queries/Combining+Filters#Execution%20Priority)。
+- 请参阅 [布尔过滤器故障排除](https://publish.obsidian.md/tasks/Queries/Combining+Filters#Troubleshooting%20Boolean%20Filters) 以获取选择分隔符的帮助,特别是在 `filter by function` 时。
+
+从技术上讲,行仍然具有隐式 `AND` 关系(因此完全保留了向后兼容性),但一行现在可以具有由 `AND` 、 `OR` 、 `NOT` 、 `AND NOT` 、 `OR NOT` 和 `XOR` 以及括号组成的多个过滤器。
+
+
+
+## 执行优先级 (Execution Priority)
+
+运算符按以下顺序评估:
+
+1. `NOT`
+2. `XOR`
+3. `AND`
+4. `OR`
+
+
+
+所以这两个过滤器是完全等价的 - 请注意第二个过滤器中的额外括号:
+
+```text
+(tag includes #XX) OR (tag includes #YY) AND (tag includes #ZZ)
+```
+
+```text
+(tag includes #XX) OR ( (tag includes #YY) AND (tag includes #ZZ) )
+```
+
+这两者也完全等价:
+
+```text
+(tag includes #XX) AND (tag includes #YY) OR (tag includes #ZZ)
+```
+
+```text
+( (tag includes #XX) AND (tag includes #YY) ) OR (tag includes #ZZ)
+```
+
+在构建复杂的过滤器组合时,自由使用 `(` 和 `)` 是最安全的,这样您就可以确信自己得到了预期的行为。
+
+
+
+## 布尔运算 (Boolean Operators)
+
+| 符号 | 含义 |
+| ------- | ---- |
+| AND | 并 |
+| OR | 或 |
+| NOT | 非 |
+| AND NOT | |
+| OR NOT | |
+| XOR | 异或 |
+
+
+
+### AND
+
+> 要求**每个**过滤器都匹配
+
+当您使用 `AND` 将过滤器组合在一起时,只会显示与 _ 每个 _ 过滤器匹配的任务。
+
+例如,这将显示包含单词 `some` 并具有开始日期的任务:
+
+```text
+(has start date) AND (description includes some)
+```
+
+任务要求每个过滤器行都匹配,因此上面的示例相当于:
+
+```text
+has start date
+description includes some
+```
+
+当与 `OR` 和 `NOT` 结合使用时, `AND` 变得特别有价值。
+
+> **注意**:在 Task 中,诸如以下的请求:
+> 显示路径中带有 `inbox` 文件中的任务 _ 以及 _ 带有标签 `#inbox` 任务
+> ...通常意味着显示满足 _ 任一 _ 条件的任务,因此必须用 `OR` 表示为布尔逻辑。
+
+
+
+### OR
+
+> 需要**任何**过滤器来匹配
+
+当您使用 `OR` 将过滤器组合在一起时,将显示 _ 至少与其中一个 _ 过滤器匹配的任务。
+
+例如,要显示路径中带有 `inbox` 文件中的任务以及任务行上带有 `#inbox` 标签的文件:
+
+````text
+```tasks
+not done
+(path includes inbox) OR (description includes #inbox)
+```
+````
+
+
+
+### NOT
+
+> 要求过滤器**不**匹配
+
+对于一个简单的例子,这两个是等效的:
+
+```text
+path does not include inbox
+```
+
+```text
+NOT (path includes inbox)
+```
+
+
+
+`NOT` 对于否定更复杂的表达式更有用。
+
+举一个更现实的例子,与此相反:
+
+```text
+(path includes x) OR (description includes #x)
+```
+
+...可以在不检查新逻辑的情况下表达,如下所示:
+
+```text
+NOT ( (path includes x) OR (description includes #x) )
+```
+
+另一种表达方式需要更多的细心和思考:
+
+```text
+(path does not include x) AND (description does not include #x)
+```
+
+
+
+### AND NOT
+
+> 要求第一个过滤器匹配,并且第二个过滤器不匹配
+
+例如:
+
+```text
+(has start date) AND NOT (description includes some)
+```
+
+
+
+### OR NOT
+
+> 要求第一个过滤器匹配,或第二个过滤器不匹配。
+
+ 例如:
+
+```text
+(has start date) OR NOT (description includes special)
+```
+
+
+
+### 异或
+
+> **只需要两个过滤器之一**进行匹配
+
+`XOR` 或 `exclusive or` 显示 _ 仅匹配所提供条件之一 _ 的任务。
+
+例如,显示任务:
+
+- 在其路径中带有 `inbox` 文件中
+- 或者标签 `#inbox` 位于任务行的位置
+- 但不是两者都:
+
+````text
+```tasks
+not done
+(path includes inbox) XOR (description includes #inbox)
+```
+````
+
+它不会显示路径中同时带有 `inbox` 和任务行中带有 `#inbox` 标签的任务。
+
+ 警告
+
+不要将两个以上的过滤器与 `XOR` 组合在一起,只要求其中一个为真。它不会给出您期望的结果。
+
+`(filter a) XOR (filter b) XOR (filter c)` 匹配仅匹配其中一个过滤器的任务,**以及匹配所有三个过滤器的任务**。
+
+
+
+# 反向链接 (BackLinks)
+
+> [Backlinks - Tasks用户指](https://publish.obsidian.md/tasks/Queries/Backlinks)
+
+在“Task 查询结果”中,默认情况下,每个任务都显示其文件名和上一个标题的名称,例如 `(ACME > Steps to world domination)` 。这称为反向链接 (BackLink)。
+
+![【Obsidian-Task】Task查询语法.md](https://cdn.pkmer.cn/images/202412261301547.png!pkmer)
+
+
+- [[241217_如何隐藏Tasks的反向链接(Backlinks)]]
+
+
+
+您可以单击反向链接 (BackLink) 直接导航到 Task 的源代码行。
+
+这遵循单击内部链接时使用的 [标准Obsidian键盘修饰符,](https://obsidian.md/changelog/2022-10-13-desktop-v1.0.0/) 以控制打开方式(导航、新选项卡、新选项卡组、新窗口)。
+
+[[【Obsidian】窗口管理#链接操作]]
+
+
+
+# 行延续 (Line Continuations)
+
+> [Line Continuations - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Line+Continuations)
+
+> [!tip]+
+> - 在任务 5.0.0 中引入。
+> - **重要提示**:此功能更改了查询行上最后一个反斜杠 ( `\` ) 字符的含义。请参阅下面的 [附录“使用尾部反斜杠更新 5.0.0 之前的搜索”](https://publish.obsidian.md/tasks/Queries/Line+Continuations#Appendix%20Updating%20pre-5.0.0%20searches%20with%20trailing%20backslashes) 来更新查询。
+
+
+
+## 在查询中换行长行
+
+在任务代码块中,**反斜杠 ( `\` )**是“行继续字符”。如果反斜杠位于行尾,则该行被视为在下一行继续。
+
+这对于将长查询划分为多行非常有用,以获得更好的可读性。
+
+ 例如这个查询:
+
+```text
+(priority is highest) OR \
+ (priority is lowest)
+explain
+```
+
+ ...运行此搜索:
+
+```text
+Explanation of this Tasks code block query:
+
+ (priority is highest) OR \
+ (priority is lowest)
+ =>
+ (priority is highest) OR (priority is lowest) =>
+ OR (At least one of):
+ priority is highest
+ priority is lowest
+
+ No grouping instructions supplied.
+
+ No sorting instructions supplied.
+```
+
+此功能对于较长的 [Combining Filters](https://publish.obsidian.md/tasks/Queries/Combining+Filters) 、 [Custom Sorting](https://publish.obsidian.md/tasks/Scripting/Custom+Sorting) 和 [Custom Grouping](https://publish.obsidian.md/tasks/Scripting/Custom+Grouping) 行以及其他可能难以在一行中阅读的查询很有帮助。
+
+
+
+注意事项:
+
+- 要成为连续字符, `\` 必须是该行的**最后一个字符**。
+- 所有 `\` 及其周围的所有空格都被压缩为一个空格。
+- 考虑缩进第二行和后续行,以便查询的结构立即清晰。
+- 考虑对齐 `\` 字符以提高可读性。
+- 如果有疑问,请添加 `explain` 指令以检查代码块的解释方式。
+
+
+
+## 需要尾部反斜杠的搜索
+
+在任务代码块中,**行末的两个反斜杠 ( `\\` )**被视为**单个反斜杠**。
+
+这使得在查询需要尾部反斜杠的极少数情况下可以进行搜索。
+
+ 例如这个查询:
+
+```text
+## Search for a single backslash:
+description includes \\
+explain
+```
+
+ ...运行此搜索:
+
+```text
+Explanation of this Tasks code block query:
+
+ description includes \\ =>
+ description includes \
+
+ No grouping instructions supplied.
+
+ No sorting instructions supplied.
+```
+
+
+
+注意事项:
+
+- 或者,您可以在尾随 `\` 之后添加一个或多个空格,以防止它成为连续字符。
+ - 但这是有风险的,因为一些编辑器和 linter 会删除不必要的尾随空格。
+ - 所以**两个反斜杠选项更安全**。
+- 如果有疑问,请添加 `explain` 指令以检查代码块的解释方式。
diff --git "a/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/obsidian-tasks-plugin.md" "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/obsidian-tasks-plugin.md"
similarity index 95%
rename from "10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/obsidian-tasks-plugin.md"
rename to "10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/obsidian-tasks-plugin.md"
index 1260609c..1e2e5958 100644
--- "a/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/obsidian-tasks-plugin.md"
+++ "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/obsidian-tasks-plugin.md"
@@ -7,7 +7,7 @@ author: cuman
type: other
draft: false
editable: false
-modified: 20230809120132
+modified: 20241226134100
---
# Obsidian 插件:Tasks 更方便的任务管理
@@ -196,4 +196,17 @@ done on {{date:YYYY-MM-DD}}
> - [[obsidian-day-planner]]:用于从 Markdown 笔记中的任务列表中规划和管理番茄钟计时器
> - [[obsidian-task-archiver]]:帮你快速归类待办任务
> - [[obsidian-last-modified-timestamp-in-status-bar]]:在状态栏可视化你的最后编辑时间
-> - [[tasks-calendar-wrapper]]:完美的时间线/日历视图的任务面板展示
\ No newline at end of file
+> - [[tasks-calendar-wrapper]]:完美的时间线/日历视图的任务面板展示
+
+## 语法
+
+- [[Task查询语法手册]]
+
+## 案例
+
+- [[DataViewJS+Tasks-最佳的每周任务管理及周报]]
+- [[基于 QuickAdd+Modal Form的任务 (Task) 编辑器]]
+
+## 样式
+
+- [[Obsidian样式-Minimal主题复选框(Checkout)样式]]
\ No newline at end of file
From 8eb3a14847dc2a3dfc02ce0851a51891cc09cb03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=86=8A=E7=8C=AB=E5=88=AB=E7=86=AC=E5=A4=9C?=
<11595443+qiu-tenghuang@user.noreply.gitee.com>
Date: Fri, 27 Dec 2024 18:23:09 +0800
Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=BC=E5=BC=8F?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...55\346\263\225\346\211\213\345\206\214.md" | 176 +++++++++---------
1 file changed, 89 insertions(+), 87 deletions(-)
diff --git "a/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/Task\346\237\245\350\257\242\350\257\255\346\263\225\346\211\213\345\206\214.md" "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/Task\346\237\245\350\257\242\350\257\255\346\263\225\346\211\213\345\206\214.md"
index 3ab6780f..d7480bec 100644
--- "a/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/Task\346\237\245\350\257\242\350\257\255\346\263\225\346\211\213\345\206\214.md"
+++ "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Tasks/Task\346\237\245\350\257\242\350\257\255\346\263\225\346\211\213\345\206\214.md"
@@ -1,21 +1,23 @@
---
uid: 20241226133215
-title: 关于查询
+title: Task 查询语法手册
tags: [任务管理]
description: Tasks查询语法的介绍
author: 熊猫别熬夜
type: other
draft: false
editable: false
-modified: 20241226133323
+modified: 20241227182235
---
+# Task 查询语法手册
+
-> [!tip]+ 参考资料
+> [!tip] 参考资料
> [Tasks用户指南](https://publish.obsidian.md/tasks/Introduction)
-# 关于查询
+## 关于查询
> [About Queries - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/About+Queries)
@@ -46,7 +48,7 @@ not done
-> [!note]+ Tasks 查询语法的执行循序
+> [!note] Tasks 查询语法的执行循序
>
> 1. 所有过滤器指令均已运行
> 2. 然后运行任何排序指令
@@ -56,7 +58,7 @@ not done
-# 过滤器 (Filters)
+## 过滤器 (Filters)
> [Filters - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Filters)
@@ -72,7 +74,7 @@ not done
-## 自定义过滤器 Custom Filters
+### 自定义过滤器 Custom Filters
> [!tip]+
> `filter by function` was introduced in Tasks 4.2.0.
@@ -88,7 +90,7 @@ Task 提供了许多内置的过滤选项,但有时它们并不能完全满足
-## 搜索日期
+### 搜索日期
任务在查询块内的日期方面提供了很大的灵活性。
@@ -99,7 +101,7 @@ Task 提供了许多内置的过滤选项,但有时它们并不能完全满足
-### 特定日期搜索
+#### 特定日期搜索
````md
```tasks
@@ -110,7 +112,7 @@ due on or before today
-#### 日期搜索选项
+##### 日期搜索选项
| option 选项 | all earlier dates | search date | all later dates |
| -------------- | :---------------: | :---------: | :-------------: |
@@ -125,7 +127,7 @@ due on or before today
-#### 绝对日期
+##### 绝对日期
`` 过滤器可以使用“绝对”日期,其首选格式为 `YYYY-MM-DD` 。绝对日期指定日历中的特定日期。它们代表同一天,无论今天的日期如何。
@@ -135,7 +137,7 @@ Examples: 示例:
-#### 相对日期
+##### 相对日期
`` 过滤器可以与 `relative` 相对日期一起提供。相对日期是根据今天的日期计算的。
@@ -157,7 +159,7 @@ Examples: 示例:
-### 日期范围搜索
+#### 日期范围搜索
Task 允许指定一对日期进行日期搜索, `` 。
@@ -172,7 +174,7 @@ happens this week
-#### 绝对日期范围
+##### 绝对日期范围
| option 选项 | all earlier dates | `start date` | all dates inside the range | `end date` | all later dates |
| -------------- | ----------------- | ------------ | -------------------------- | ---------- | --------------- |
@@ -184,7 +186,7 @@ happens this week
-#### 相对日期范围
+##### 相对日期范围
Tasks 支持一组非常特定的相对 `` 值: `last|this|next week|month|quarter|year` 。管道( `|` )字符表示“或”。
@@ -199,7 +201,7 @@ Tasks 支持一组非常特定的相对 `` 值: `last|this|next we
-#### 编号日期范围
+##### 编号日期范围
也可以使用独立于当前日期的编号日期范围的能力。这些编号日期范围类型得到支持:
@@ -221,7 +223,7 @@ Tasks 支持一组非常特定的相对 `` 值: `last|this|next we
-## Text filters 文本过滤器
+### Text filters 文本过滤器
文本搜索过滤器有 2 种类型:
@@ -232,7 +234,7 @@ Tasks 支持一组非常特定的相对 `` 值: `last|this|next we
-## 匹配多个过滤器
+### 匹配多个过滤器
每行查询都必须匹配,任务才能列出。换句话说,行之间被视为存在一个 'AND' 运算符。在每行中,您可以使用布尔运算符 `NOT` 、 `AND` 、 `OR` 、 `AND NOT` 、 `OR NOT` 和 `XOR` ,只要将单个过滤器用括号括起来即可:
@@ -250,7 +252,7 @@ due after 2021-04-04
-## 任务状态过滤器
+### 任务状态过滤器
- Status 状态
- Status Name 状态名称
@@ -269,12 +271,12 @@ group by path
-### Status
+#### Status
- `done` - 匹配状态类型为 `DONE` 、 `CANCELLED` 和 `NON_TASK` 任务
- `not done` - 匹配状态类型为 `TODO` 和 `IN_PROGRESS` 任务
-> [!tip]+ 在 Tasks 1.23.0 之前,没有任务状态类型的概念,因此仅使用状态符号:
+> [!tip] 在 Tasks 1.23.0 之前,没有任务状态类型的概念,因此仅使用状态符号:
>
> - 带有 `[ ]` 任务被视为 `not done`
> - 除空格外的任何其他字符均视为已 `done`
@@ -300,7 +302,7 @@ filter by function ! task.isDone
-### Status Name
+#### Status Name
自定义的状态名称,例如,也许您将 `[!]` 命名为 `Important` ,因此该字段将搜索具有该状态符号的所有任务的文本 `Important` 。
@@ -324,7 +326,7 @@ filter by function task.status.name === 'Unknown'
-### Status Type
+#### Status Type
- `status.type (is|is not) (TODO|DONE|IN_PROGRESS|CANCELLED|NON_TASK)`
- `TODO` 等值不区分大小写:例如,您可以使用 `in_progress`
@@ -367,7 +369,7 @@ filter by function ! 'NON_TASK,CANCELLED'.includes(task.status.type)
-### Status Symbol
+#### Status Symbol
没有内置的指令来按状态符号进行过滤。
@@ -412,7 +414,7 @@ filter by function !' -x/'.includes(task.status.symbol)
-### Next Status Symbol
+#### Next Status Symbol
没有内置指令可以按下一个状态符号进行过滤。
@@ -428,7 +430,7 @@ filter by function task.status.symbol === task.status.nextSymbol
-## 其他任务属性的筛选器
+### 其他任务属性的筛选器
> [Filters - Tasks User Guide - Obsidian Publish](https://publish.obsidian.md/tasks/Queries/Filters#Filters+for+Other+Task+Properties)
@@ -443,7 +445,7 @@ filter by function task.status.symbol === task.status.nextSymbol
-### Description
+#### Description
- `description (includes|does not include) `
- 匹配不区分大小写(忽略大小写)。
@@ -483,13 +485,13 @@ filter by function task.description.length > 100
-### Description without tags
+#### Description without tags
从 Tasks 4.2.0 开始,可以使用 `task.descriptionWithoutTags` 从自定义过滤器的描述中删除标签,以便在**[自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**中使用。
-### Priority
+#### Priority
- `priority is (above|below|not)? (lowest|low|none|medium|high|highest)`
@@ -507,7 +509,7 @@ filter by function task.description.length > 100
-#### 示例
+##### 示例
````
```tasks
@@ -548,7 +550,7 @@ filter by function task.priorityNumber % 2 === 0
-### Urgency
+#### Urgency
没有内置的指令来按紧急程度进行过滤。
@@ -607,7 +609,7 @@ filter by function task.urgency === 10.29
-### Recurrence
+#### Recurrence
- `is recurring`
- `is not recurring`
@@ -677,14 +679,14 @@ filter by function task.recurrenceRule.includes("every week") && !task.recurrenc
-### Sub-Items
+#### Sub-Items
- `exclude sub-items`
- 设置此选项后,结果列表将仅包含文件中未缩进的任务。它只会显示列表中顶级列表项的任务。
-### Tags 标签
+#### Tags 标签
> [Introduced in Tasks 1.6.0.](https://publish.obsidian.md/tasks/Queries/Filters#Tags)
@@ -706,7 +708,7 @@ filter by function task.recurrenceRule.includes("every week") && !task.recurrenc
- 通过在正则表达式末尾放置 `$` 字符,可以实现避免子标签的标签搜索。请参阅下面的示例。
- 如果搜索子标签,请记住转义正则表达式中的斜杠: `\/`
-> [!tip]+ Release
+> [!tip] Release
>
> - `regex matches` 和 `regex does not match` 是在任务 1.13.0 中引入的。
> - Tasks 2.0.0 中引入了 `no tags` 和 `has tags` 。
@@ -744,7 +746,7 @@ filter by function task.tags.find( (tag) => tag.split('/').length >= 3 ) && true
-#### 标签查询示例
+##### 标签查询示例
- `tags include #todo`
- `tags do not include #todo`
@@ -756,7 +758,7 @@ filter by function task.tags.find( (tag) => tag.split('/').length >= 3 ) && true
-### Markdown
+#### Markdown
从 Tasks 4.2.0 开始,现在可以使用 `task.originalMarkdown`**按原始 Markdown 行进行 [自定义过滤](https://publish.obsidian.md/tasks/Scripting/Custom+Filters)**。
@@ -764,7 +766,7 @@ filter by function task.tags.find( (tag) => tag.split('/').length >= 3 ) && true
-## 文件属性的过滤器
+### 文件属性的过滤器
> [Filters - Tasks User Guide - Obsidian Publish](https://publish.obsidian.md/tasks/Queries/Filters#Filters+for+File+Properties)
@@ -778,7 +780,7 @@ filter by function task.tags.find( (tag) => tag.split('/').length >= 3 ) && true
-### File Path 文件路径
+#### File Path 文件路径
请注意,该路径包含 `.md` 扩展名。
@@ -831,7 +833,7 @@ filter by function task.file.path.toLocaleLowerCase() === 'TASKS RELEASES/4.1.0
-### Root 根路径
+#### Root 根路径
> [!caution]-
>
@@ -874,7 +876,7 @@ filter by function task.file.root === 'Work/'
-### Folder 文件夹
+#### Folder 文件夹
>
@@ -893,7 +895,7 @@ filter by function task.file.root === 'Work/'
-### File Name 文件名
+#### File Name 文件名
> [!tip]+
>
@@ -938,7 +940,7 @@ filter by function task.file.filename.includes("4.1.0 Release")
-### Heading 标题过滤器
+#### Heading 标题过滤器
1. `heading (includes|does not include) `
- 它至少包含字符串 `` 的一次,匹配该部分中所有任务。
@@ -967,7 +969,7 @@ done last week
-# 解释查询 (Explaining Queries)
+## 解释查询 (Explaining Queries)
> [Explaining Queries - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Explaining+Queries)
@@ -990,7 +992,7 @@ done last week
-## 示例:过滤器中的日期已扩展
+### 示例:过滤器中的日期已扩展
例如,当以下文本放置在任务查询块中时:
@@ -1026,7 +1028,7 @@ Explanation of this Tasks code block query:
-# 排序 (Sorting)
+## 排序 (Sorting)
> [Sorting - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Sorting)
@@ -1114,11 +1116,11 @@ sort by path
-# 分组 (Grouping)
+## 分组 (Grouping)
> [Grouping - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Grouping)
-> [!note]+ Tasks 查询语法的执行循序
+> [!note] Tasks 查询语法的执行循序
>
> 1. 所有过滤器指令均已运行
> 2. 然后运行任何排序指令
@@ -1132,7 +1134,7 @@ sort by path
-## 基础 (Basic)
+### 基础 (Basic)
> [!tip]+
> 在任务 1.6.0 中引入。
@@ -1143,7 +1145,7 @@ sort by path
-### 示例
+#### 示例
````md
```tasks
@@ -1154,7 +1156,7 @@ group by filename
-## 分组的类型
+### 分组的类型
- 按任务状态分组:Group by Task Statuses
- 同 [[#过滤器 (Filters)#任务状态过滤器]],详见 [📍官方文档](https://publish.obsidian.md/tasks/Queries/Grouping#Group+by+Task+Statuses)
@@ -1169,7 +1171,7 @@ group by filename
-## 拓展:自定义分组
+### 拓展:自定义分组
> [!tip]+
> Tasks 4.0.0 中引入了 `group by function` 。
@@ -1180,7 +1182,7 @@ group by filename
-## 多个分组 (Multiple groups)
+### 多个分组 (Multiple groups)
您可以添加多个 `group by` 查询选项,每个选项占一行。这将创建嵌套分组。第一个分组优先级最高。
@@ -1205,7 +1207,7 @@ group by heading
-## 细化分组 (Refining groups)
+### 细化分组 (Refining groups)
可以设置分组的几个参数:
@@ -1214,7 +1216,7 @@ group by heading
-### Reverse
+#### Reverse
在要分组的属性名称后面,可以添加 `reverse` 关键字。如果指定,则该属性的组标题将相反。
@@ -1229,7 +1231,7 @@ group by heading
-### Limiting group size
+#### Limiting group size
您可以限制每个组中的任务数量,也许首先处理最重要的事情。
@@ -1244,7 +1246,7 @@ group by heading
-# 限制 (Limiting)
+## 限制 (Limiting)
> [Limiting - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Limiting)
@@ -1254,7 +1256,7 @@ group by heading
-## 限制任务总数
+### 限制任务总数
您可以限制显示为查询结果的任务总数。
@@ -1264,7 +1266,7 @@ group by heading
-## 限制每组中的任务数量
+### 限制每组中的任务数量
使用查询字符串 `limit groups to tasks` 可以限制每个组中允许的任务数量。
@@ -1279,7 +1281,7 @@ group by heading
-## 查看找到的任务总数
+### 查看找到的任务总数
如果任一 `limit` 选项阻止任何任务显示在结果中,则会显示总数,例如:
@@ -1292,7 +1294,7 @@ group by heading
-# 布局 (Layout)
+## 布局 (Layout)
> [Layout - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Layout)
@@ -1304,7 +1306,7 @@ group by heading
-## Task Elements
+### Task Elements
以下任务元素存在:
@@ -1325,7 +1327,7 @@ group by heading
-## Query Elements
+### Query Elements
存在以下查询元素:
@@ -1338,7 +1340,7 @@ group by heading
-## Hiding/Showing Elements
+### Hiding/Showing Elements
每个 [[#Task Elements|Task元素(Task Elements)]] 可以都设置隐藏 (hide) 或显示 (show),且查询中可以使用多个 show 和 hide 指令,每个指令位于单独的行上。
@@ -1358,7 +1360,7 @@ show urgency
-### Hide OR Show Tree
+#### Hide OR Show Tree
> [!tip]
> 新的指令 `show tree` 是教 Tasks 插件完全处理 [嵌套任务和列表项](https://help.obsidian.md/Editing+and+formatting/Basic+formatting+syntax#Nesting+lists) 的一系列步骤中的第一个。
@@ -1383,7 +1385,7 @@ hide backlink
-### Hide OR Show Tags
+#### Hide OR Show Tags
[Layout - Tasks User Guide - Obsidian Publish](https://publish.obsidian.md/tasks/Queries/Layout#Hide+and+Show+Tags)
@@ -1397,7 +1399,7 @@ hide tags
-## Full Mode
+### Full Mode
在**完整模式 (Full Mode)**下,查询结果将显示表情符号和具体的重复规则或日期。
@@ -1418,7 +1420,7 @@ full mode
-## Short Mode
+### Short Mode
在**短模式 (Short Mode)**下,查询结果只会显示表情符号,而不显示具体的重复规则或日期。您可以将鼠标悬停在任务上以查看工具提示中的规则和日期。
@@ -1435,7 +1437,7 @@ short mode
-# 注释 (Comments)
+## 注释 (Comments)
> [Comments - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Comments)
@@ -1453,7 +1455,7 @@ not done
-## Inline comments 行内注释
+### Inline comments 行内注释
> 行内注释在 Tasks 4.7.0 中引入。
@@ -1470,7 +1472,7 @@ short mode {{! 这条注释将被忽略 }}
-# 全局查询 (Global Query)
+## 全局查询 (Global Query)
> [Global Query - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Global+Query)
@@ -1481,7 +1483,7 @@ short mode {{! 这条注释将被忽略 }}
-## 忽略全局查询 (Ignore global query)
+### 忽略全局查询 (Ignore global query)
如果您需要忽略给定任务块中的全局查询,您可以将 `ignore global query` 指令添加到块的任何位置。
@@ -1494,11 +1496,11 @@ tags include work
ignore global query
```
-> [!tip]+ Tasks 4.6.0 中添加了 ignore global query 指令。
+> [!tip] Tasks 4.6.0 中添加了 ignore global query 指令。
-# 组合过滤器 (Combining+Filters)
+## 组合过滤器 (Combining+Filters)
> [Combining Filters - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Combining+Filters)
@@ -1521,7 +1523,7 @@ not done
-## 语法 (Syntax)
+### 语法 (Syntax)
一个或多个过滤器可以通过布尔运算符组合在一行中,以创建一个新的、强大的、灵活的过滤器。
@@ -1568,7 +1570,7 @@ not done
-## 执行优先级 (Execution Priority)
+### 执行优先级 (Execution Priority)
运算符按以下顺序评估:
@@ -1603,7 +1605,7 @@ not done
-## 布尔运算 (Boolean Operators)
+### 布尔运算 (Boolean Operators)
| 符号 | 含义 |
| ------- | ---- |
@@ -1616,7 +1618,7 @@ not done
-### AND
+#### AND
> 要求**每个**过滤器都匹配
@@ -1643,7 +1645,7 @@ description includes some
-### OR
+#### OR
> 需要**任何**过滤器来匹配
@@ -1660,7 +1662,7 @@ not done
-### NOT
+#### NOT
> 要求过滤器**不**匹配
@@ -1698,7 +1700,7 @@ NOT ( (path includes x) OR (description includes #x) )
-### AND NOT
+#### AND NOT
> 要求第一个过滤器匹配,并且第二个过滤器不匹配
@@ -1710,7 +1712,7 @@ NOT ( (path includes x) OR (description includes #x) )
-### OR NOT
+#### OR NOT
> 要求第一个过滤器匹配,或第二个过滤器不匹配。
@@ -1722,7 +1724,7 @@ NOT ( (path includes x) OR (description includes #x) )
-### 异或
+#### 异或
> **只需要两个过滤器之一**进行匹配
@@ -1751,7 +1753,7 @@ not done
-# 反向链接 (BackLinks)
+## 反向链接 (BackLinks)
> [Backlinks - Tasks用户指](https://publish.obsidian.md/tasks/Queries/Backlinks)
@@ -1772,7 +1774,7 @@ not done
-# 行延续 (Line Continuations)
+## 行延续 (Line Continuations)
> [Line Continuations - Tasks用户指南](https://publish.obsidian.md/tasks/Queries/Line+Continuations)
@@ -1782,7 +1784,7 @@ not done
-## 在查询中换行长行
+### 在查询中换行长行
在任务代码块中,**反斜杠 ( `\` )**是“行继续字符”。如果反斜杠位于行尾,则该行被视为在下一行继续。
@@ -1828,7 +1830,7 @@ Explanation of this Tasks code block query:
-## 需要尾部反斜杠的搜索
+### 需要尾部反斜杠的搜索
在任务代码块中,**行末的两个反斜杠 ( `\\` )**被视为**单个反斜杠**。
From 2d0158058bf6f6e7613b0665fc734ff0fdcfe1ec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=86=8A=E7=8C=AB=E5=88=AB=E7=86=AC=E5=A4=9C?=
<11595443+qiu-tenghuang@user.noreply.gitee.com>
Date: Fri, 27 Dec 2024 18:23:25 +0800
Subject: [PATCH 3/4] =?UTF-8?q?=E6=96=B0=E6=B7=BB=E5=8A=A0=E4=B8=80?=
=?UTF-8?q?=E4=B8=AAquickadd=E8=84=9A=E6=9C=AC=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...71\344\270\255\346\211\223\345\274\200.md" | 68 +++++++++++++++++++
.../Quickadd/quickadd.md" | 1 +
2 files changed, 69 insertions(+)
create mode 100644 "10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Quickadd/QuickAdd\350\204\232\346\234\254-\345\234\250\344\276\247\350\276\271\344\270\255\346\211\223\345\274\200.md"
diff --git "a/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Quickadd/QuickAdd\350\204\232\346\234\254-\345\234\250\344\276\247\350\276\271\344\270\255\346\211\223\345\274\200.md" "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Quickadd/QuickAdd\350\204\232\346\234\254-\345\234\250\344\276\247\350\276\271\344\270\255\346\211\223\345\274\200.md"
new file mode 100644
index 00000000..aefc875d
--- /dev/null
+++ "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Quickadd/QuickAdd\350\204\232\346\234\254-\345\234\250\344\276\247\350\276\271\344\270\255\346\211\223\345\274\200.md"
@@ -0,0 +1,68 @@
+---
+uid: 20241227181944
+title: QuickAdd 脚本 - 在侧边中打开
+tags: [quickadd脚本, 窗口管理]
+description: 模仿浏览器的“在边栏中打开”的选项,是笔记在侧边栏中打开并固定。
+author: 熊猫别熬夜
+type: other
+draft: false
+editable: false
+modified: 20241227182041
+---
+
+# QuickAdd 脚本 - 在侧边中打开
+
+模仿浏览器的“在边栏中打开”的选项,是笔记在侧边栏中打开并固定。
+
+![241227_QuickAdd脚本:在侧边打开.md](https://cdn.pkmer.cn/images/202412271819910.png!pkmer)
+
+![241227_QuickAdd脚本:在侧边打开.md](https://cdn.pkmer.cn/images/202412271819700.gif)
+
+## QuickAdd Capture
+
+### 侧边打开
+
+````
+```js quickadd
+const activefile = app.workspace.getActiveFile();
+const filePath = app.vault.getAbstractFileByPath(activefile.path)
+app.workspace.getLeaf('split', 'vertical').openFile(filePath);
+
+const comm = str => app.commands.executeCommandById(str);
+
+const setPanel = percent => {
+ let right = document.querySelector('.workspace-split.mod-vertical.mod-root').lastElementChild;
+ right.previousSibling.style.flexGrow = percent;
+ right.style.flexGrow = 100 - percent;
+};
+
+setTimeout(() => {
+ setPanel(75); // 50、80
+ comm('editor:focus-right');
+ comm("workspace:toggle-pin");
+}, 50);
+
+```
+````
+
+### 侧边栏打开
+
+````
+```js quickadd
+const activefile = app.workspace.getActiveFile();
+const filePath = app.vault.getAbstractFileByPath(activefile.path)
+const rightSidebar = app.workspace.rightSplit;
+const leaf = rightSidebar.getLeaf(true);
+leaf.openFile(filePath);
+
+const comm = str => app.commands.executeCommandById(str);
+
+setTimeout(() => {
+ comm("workspace:toggle-pin");
+}, 50);
+```
+````
+
+## Reference
+
+- [【已解决】Obsidian 左右筆記並列佈局快捷調整左右 layout 比例 (不用滑鼠拖曳) - 3,来自 PlayerMiller - 疑问解答 - Obsidian 中文论坛](https://forum-zh.obsidian.md/t/topic/31477/3)
diff --git "a/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Quickadd/quickadd.md" "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Quickadd/quickadd.md"
index 59cc28f1..e5bc4d4c 100644
--- "a/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Quickadd/quickadd.md"
+++ "b/10-Obsidian/Obsidian\347\244\276\345\214\272\346\217\222\344\273\266/Quickadd/quickadd.md"
@@ -28,6 +28,7 @@ modified: 20241224232926
2. [[Quickadd脚本-一键在系统应用中打开图片编辑]]
3. [[QuickAdd脚本-一键切换VimMode]]
4. [[QuickAdd脚本-随机漫游笔记]]
+5. [[QuickAdd脚本-在侧边中打开]]
### 文档编辑
From db36803e4036385792e53d198b5ebf4c0abefa70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=86=8A=E7=8C=AB=E5=88=AB=E7=86=AC=E5=A4=9C?=
<11595443+qiu-tenghuang@user.noreply.gitee.com>
Date: Fri, 27 Dec 2024 22:32:43 +0800
Subject: [PATCH 4/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=B8=AA?=
=?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=95=99=E7=A8=8B=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...34\347\264\242\345\212\237\350\203\275.md" | 171 ++++++++++++++++++
...72\346\234\254\344\275\277\347\224\250.md" | 3 +-
2 files changed, 173 insertions(+), 1 deletion(-)
create mode 100644 "10-Obsidian/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250/Obsidan\345\205\250\345\261\200\346\220\234\347\264\242\345\212\237\350\203\275.md"
diff --git "a/10-Obsidian/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250/Obsidan\345\205\250\345\261\200\346\220\234\347\264\242\345\212\237\350\203\275.md" "b/10-Obsidian/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250/Obsidan\345\205\250\345\261\200\346\220\234\347\264\242\345\212\237\350\203\275.md"
new file mode 100644
index 00000000..b8bd3428
--- /dev/null
+++ "b/10-Obsidian/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250/Obsidan\345\205\250\345\261\200\346\220\234\347\264\242\345\212\237\350\203\275.md"
@@ -0,0 +1,171 @@
+---
+uid: 20241227222717
+title: Obsidan 全局搜索功能
+tags: [快速搜索]
+description: Obsidian 核心插件——搜索,可以通过使用高级搜索词和运算符缩小结果范围,帮助您快速查找 Obsidian 库中的关键数据。
+author: 熊猫别熬夜
+type: other
+draft: false
+editable: false
+modified: 20241227223114
+---
+
+# Obsidan 全局搜索功能
+
+> [!cite] 原文来自 [Search - Obsidian Help](https://help.obsidian.md/Plugins/Search)
+
+Obsidian 核心插件——**搜索**,可以通过使用高级搜索词和运算符缩小结果范围,帮助您快速查找 Obsidian 库中的关键数据。
+
+默认情况下,您可以在左侧边栏中找到搜索(🔍)。您还可以通过按 `Ctrl+Shift+F` (或 macOS 上的 `Cmd+Shift+F` )打开搜索。
+
+- **搜索所选文本**:如果您在编辑器中选择文本并使用键盘快捷键打开“搜索”,“搜索”将显示所选文本的搜索结果。
+- **搜索最近的搜索词**:使用空搜索词打开搜索以列出最近的搜索词。单击其中任意一个即可再次使用搜索词。
+
+## 搜索词 (Search terms)
+
+搜索词是您在搜索字段中输入的单词或短语。学习如何有效地编写搜索词可以帮助您快速找到所需的内容,即使在大型金库中也是如此。 **Obsidian 只搜索笔记和画布的内容。**
+
+默认情况下,您只能搜索笔记和画布的路径和文件名。要搜索 Vault 中任何文件的路径或文件名,请使用 `path` 或 `file` 运算符。
+
+### 转义反斜杠
+
+搜索词中的每个单词在每个文件中都是独立匹配的。要搜索确切的短语,请用引号括起来,例如 `"star wars"` 。要搜索精确短语中引用的文本,您可以通过在引号前面添加反斜杠 ( `\` ) 来转义引号,例如 `"they said \"hello\" to each other"` 。
+
+### 组合运算 (空格 与 AND 或 OR)
+
+您可以控制是否返回包含搜索词中的*所有*单词或*任何*单词的文件:
+
+- `meeting work` 返回包含 `meeting` 和 `work` 文件。
+- `meeting OR work` 返回包含 `meeting` 或 `work` 文件。
+
+您甚至可以将两者组合在同一个搜索词中。
+
+- `meeting work OR meetup personal` 返回“ work meetings”和“meetup personal”的文件。
+
+您可以使用括号来控制每个表达式的优先级。
+
+- `meeting (work OR meetup) personal` 返回包含 `meeting` 、 `personal` 以及 `work` 或 `meetup` 的文件。
+
+### 非运算 ( - )
+
+要从搜索结果中排除或否定某个单词,请在其前面添加连字符 ( `-` ):
+
+- `meeting -work` 返回包含 `meeting` 但不包含 `work` 文件。
+
+您可以排除多个表达式:
+
+- `meeting -work -meetup` 返回包含 `meeting` 但不包含 `work` 或 `meetup` 的文件。
+
+### 括号组合表达式
+
+您可以使用括号排除表达式组合:
+
+- `meeting -(work meetup)` 返回包含 `meeting` 但不*同时*包含 `work` 和 `meetup` 的文件。
+
+如果您需要对复杂的搜索词进行故障排除,可以单击“搜索”中的**“解释搜索词”**以获取搜索词的解释。
+
+## 搜索运算符 (Search operators)
+
+搜索运算符支持更细粒度的搜索词,以进一步过滤您的结果。
+
+有些运算符甚至允许您在括号内添加嵌套搜索词,例如: `task:(call OR email)` 。
+
+| 搜索运算符 | 描述 |
+| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `file:` | 查找文件名中的文本。匹配 Vault 中的任何文件。
示例: `file:.jpg` 或 `file:202209` 。 |
+| `path:` | 在文件路径中查找文本。匹配 Vault 中的任何文件。
示例: `path:"Daily notes/2022-07"` 。 |
+| `content:` | 在文件内容中查找文本。
示例: `content:"happy cat"` 。 |
+| `match-case:` | 区分大小写的匹配。
示例: `match-case:HappyCat` 。 |
+| `ignore-case:` | 不区分大小写的匹配。
示例: `ignore-case:ikea` 。 |
+| `tag:` | 在文件中查找标签。
示例: `tag:#work` 。
请记住,搜索 `tag:#work` 不会返回 `#myjob/work` 的结果。
**注意**:由于 `tag:` 忽略代码块和非 Markdown 内容中的匹配,因此它通常比 `#work` 的普通全文搜索更快、更准确。 |
+| `line:` | 在同一行查找匹配项。
示例: `line:(mix flour)` 。 |
+| `block:` | 在同一块中查找匹配项。
示例: `block:(dog cat)` 。
**注意**:由于 `block:` 需要搜索来解析每个文件中的 Markdown 内容,因此可能会导致您的搜索词需要更长的时间才能完成。 |
+| `section:` | 在同一部分(两个标题之间的文本)中查找匹配项。
示例: `section:(dog cat)` 。 |
+| `task:` | 按照块的方式在任务中查找匹配项。
示例: `task:call` 。 |
+| `task-todo:` | 按照区块的方式在*未完成*的任务中找到匹配项。
示例: `task-todo:call` 。 |
+| `task-done:` | 按照区块的方式在*已完成*的任务中找到匹配项。
示例: `task-done:call` 。 |
+
+## 搜索属性 (Search properties)
+
+您可以在搜索词中使用 属性 中存储的数据。
+
+使用括号将属性名称 `[property]` 括起来以返回具有该属性的文件:
+
+- `[aliases]` 返回包含 `aliases` 属性的文件
+
+使用方括号和冒号 `[property:value]` 返回具有该属性和值的文件:
+
+- `[aliases:Name]` 返回 `aliases` 属性值为 `Name` 文件
+
+属性和值都允许子查询,例如用于分组的括号、 `OR` 运算符、用于精确匹配的双引号和正则表达式。
+
+- 示例: `[status:Draft OR Published]` 查找返回 `status` 属性值为 `Draft` 或 `Published` 文件
+
+## 更改区分大小写
+
+默认情况下,搜索词不区分大小写。如果您想搜索搜索词的确切大小写,请单击**匹配大小写**(![obsidian-upper-lowercase.svg](https://publish-01.obsidian.md/access/f786db9fac45774fa4f0d8112e232d67/Attachments/icons/obsidian-upper-lowercase.svg))在搜索栏中。
+
+![【Obsidian】查询语法(Query Syntax).md](https://cdn.pkmer.cn/images/202412272229491.png!pkmer)
+
+此设置可以切换。如果**“匹配大小写”**图标突出显示,则意味着您当前正在进行区分大小写的搜索。
+
+## 更改结果排序顺序
+
+1. 输入**搜索词 (Search term)**。
+2. 在搜索字段下,单击右侧的下拉菜单。
+3. 选择您想要的排序顺序。默认为“文件名(A 到 Z)”。
+
+![【Obsidian】查询语法(Query Syntax).md](https://cdn.pkmer.cn/images/202412272229150.png!pkmer)
+
+可以使用以下选项:
+
+- 文件名(A 到 Z)
+- 文件名(Z 到 A)
+- 修改时间(从新到旧)
+- 修改时间(从旧到新)
+- 创建时间(从新到旧)
+- 创建时间(从旧到新)
+
+## 复制搜索结果
+
+![【Obsidian】查询语法(Query Syntax).md](https://cdn.pkmer.cn/images/202412272229610.png!pkmer)
+
+1. 输入**搜索词 (Search term)**。
+2. 在搜索字段下,选择结果数量旁边的三个点图标。
+3. 选择**复制搜索结果**,弹出的对话框,可以设置搜索结果的格式。
+
+![【Obsidian】查询语法(Query Syntax).md](https://cdn.pkmer.cn/images/202412272229061.png!pkmer)
+
+## 使用正则表达式
+
+正则表达式是描述文本模式的一组字符。要在搜索词中使用正则表达式,请用正斜杠 ( `/` ) 将表达式括起来。
+
+- `/\d{4}-\d{2}-\d{2}/` 匹配 ISO 8601 日期,例如 2022-01-01。
+
+您甚至可以将正则表达式与搜索运算符结合起来:
+
+- `path:/\d{4}-\d{2}-\d{2}/` 返回文件路径中带有日期的文件。
+
+正则表达式有不同的风格,可能看起来彼此不同。 Obsidian 使用 JavaScript 风格的正则表达式。
+
+## 配置搜索设置
+
+要配置搜索,请单击**搜索设置**在搜索栏右侧查看切换。
+
+![【Obsidian】查询语法(Query Syntax).md](https://cdn.pkmer.cn/images/202412272229564.png!pkmer)
+
+| 环境 | 描述 |
+| ----------- | -------------------- |
+| **折叠结果** | 切换是否显示搜索上下文。 |
+| **显示更多上下文** | 扩展搜索结果以显示匹配项周围的更多文本。 |
+| **说明搜索词** | 分解搜索词并以纯文本进行解释。 |
+
+## Query 代码块
+
+要将搜索结果嵌入到注释中,请添加 `query` 代码块:
+
+````
+```query
+embed OR search
+```
+````
\ No newline at end of file
diff --git "a/10-Obsidian/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250.md" "b/10-Obsidian/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250.md"
index d42f69a6..1e780d53 100644
--- "a/10-Obsidian/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250.md"
+++ "b/10-Obsidian/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250/Obsidian\345\237\272\346\234\254\344\275\277\347\224\250.md"
@@ -35,4 +35,5 @@ modified: 20241214125753
- [[Obsidian设置]]
- [[脑图和流程图]]
- [[Obsidian_URI]]
-- [[块链接与块引用]]
\ No newline at end of file
+- [[块链接与块引用]]
+- [[Obsidan全局搜索功能]]
\ No newline at end of file