标准markdown模式双链显示问题


遇到的问题

我之前习惯了使用typora编辑浏览md文件,但是文件一多不好管理,所以想着使用obsidian管理,为了使得显示效果与typora兼容,所以设置都采用标准markdown格式与相对路径,发现双向链接显示的绝对路径过长影响检索,有没有办法使得这里只显示文件名

预期的效果

预期效果就是右侧链接中显示文件名

已尝试的解决方案


我的设置

也许可以直接换个近似功能的插件, 建议看看 jasonmotylinski/hierarchical-outgoing-links 带层级展示笔记里的附件

整个结构是树状, 具体到每个条目就只剩文件名了

细节上, 这插件跟 Ob 自带正链面板还是有差异的, 比如它不会识别 “笔记导航到自己的章节” 的部分, 比如没有 “潜在链接探测” 以及会单独列出 “尚不存在的笔记” 等等

但也许它是更合适这个场景的


如果一定要用自带的正链面板, 似乎不太好办,
原因是不能很方便的修改 Ob 自带面板里的内容, 只能拿脚本方式动态去改:

    document.querySelectorAll('.outgoing-link-pane .search-result-container .tree-item-inner .tree-item-inner-text').forEach(elem => {
        elem.innerText = elem.innerText.split('/').pop();
    });

其实就是把文字按 / 切割一遍, 只留最后一段


以上拿 Ob 里任何能执行脚本的工具给运行一下就行, 最简单是控制台

如果需要自动调用, 最简单的方式也许是, 每次在这面板变动后, 自动执行上述逻辑, 如下

// 运行前注意事先备份笔记!
(function() {
    const outgoingLinkPaneSelector = '.outgoing-link-pane .search-result-container';
    const treeItemInnerTextSelector = '.tree-item-inner .tree-item-inner-text';
  
    function patchOutgoingLinkPane() {
      const treeItemInnerTexts = document.querySelectorAll(`${outgoingLinkPaneSelector} ${treeItemInnerTextSelector}`);
      treeItemInnerTexts.forEach(elem => {
        elem.innerText = elem.innerText.split('/').pop();
      });
    }
  
    function watchOutgoingLinkPane() {
      const targetNode = document.querySelector(outgoingLinkPaneSelector);
      if (!targetNode) {
        console.error('Target node not found');
        return;
      }
  
      const config = {
        childList: true,
        subtree: true,
        characterData: false
      };
  
      const observer = new MutationObserver((mutationsList) => {
        observer.disconnect();
        if (mutationsList.some(mutation => mutation.addedNodes.length > 0)) {
          patchOutgoingLinkPane();
        }
        observer.observe(targetNode, config);
      });
  
      observer.observe(targetNode, config);
    }
  
    watchOutgoingLinkPane();
})();

好的,我先试一下第一个插件,如果实在不行也只能算了,也就是难看了点,还是不影响使用的