Obsidian的live preview还是有一些相当不方便之处,尤其是列表、引用

例1


比如这个list的语言逻辑,箭头所指的地方,obsidian怎么实现?
typora里可以做出一样的显示效果:

但是Obsidian不行。把上面这串复制到Obsidian里是这样的:

你看,非得给我加上空行。我很无奈,这看着完全不对劲好吗。
这要是把空行去了,那渲染就不对了。
CleanShot 2024-04-11 at 01.30.44

当然了,我理解Obsidian有自己的苦衷,在我看来主要是两方面原因,一是有一个「非严格换行」模式,二是有「块」的概念需要用于块引用块嵌入。所以不能像typora那样有空行辅助识别。

但是通过前面空格的数量也足够识别这句话到底处在第几层缩进了啊,只要做好规定。希望Obsidian能解决这个问题。

例2

往列表里将多段内容以引用/代码块方式粘贴很不方便,而且在live preview下渲染往往会出错。我遇到最离谱的渲染出错,是livepreview下有一段话会被吞掉看不到。
这个问题在英文论坛里也有很多人都提过,我想大家也基本都发现了这个问题,所以我就不赘述了。
这方面有paste mode插件可以缓解粘贴时的痛苦,用命令粘贴,一键处理好格式。
但是光解决粘贴时的痛苦并不够,因为livepreview渲染还是会出错,后期编辑还是很不方便。问题依旧存在。

例3

使用callout会让粘贴也变得很不舒服。
比如我想把下面这段用代码块的形式粘贴,粘贴的位置是callout的「列表」里,或者「双层、多层」callout里。有什么好办法吗?
我在obsidian内部是没找到什么好办法,现在只能是先在typora里处理完毕再回到obsidian。
希望能早日在obsidian内部解决这个问题。

VIDEO:

Codec                   Bitrate             Description    
-----                   -------             -----------    
VC-1 Video              23596 kbps          1080p / 23.976 fps / 16:9 / Advanced Profile 3
MPEG-4 AVC Video        210 kbps            Left Eye / 480p / 23.976 fps / 4:3 / High Profile 3.2

AUDIO:

Codec                           Language        Bitrate         Description    
-----                           --------        -------         -----------    
DTS-HD Master Audio             Italian         2198 kbps       5.1 / 48 kHz /  2198 kbps / 16-bit (DTS Core: 5.1 / 48 kHz /  1509 kbps / 16-bit)
DTS-HD Master Audio             English         1893 kbps       5.1 / 48 kHz /  1893 kbps / 16-bit (DTS Core: 5.1 / 48 kHz /  1509 kbps / 16-bit)
Dolby Digital Audio             Chinese         192 kbps        2.0 / 48 kHz /   192 kbps / DN -27dB  国配2.0
Dolby Digital Audio             Thai            192 kbps        2.0 / 48 kHz /   192 kbps / DN -27dB
Dolby Digital Audio             Italian         448 kbps        2.0 / 48 kHz /   448 kbps / DN -31dB
Dolby Digital Audio             Chinese         448 kbps        5.1 / 48 kHz /   448 kbps / DN -31dB  六区国配5.1
DTS-HD Master Audio             Chinese         0 kbps          5.1 / 48 kHz    央视国配次世代5.1

SUBTITLES:

Codec                           Language        Bitrate         Description    
-----                           --------        -------         -----------    
Presentation Graphics           Italian         22.457 kbps                    
Presentation Graphics           English         22.502 kbps                    
Presentation Graphics           Chinese         30.333 kbps  对应六区国配简体特效                  
Presentation Graphics           Chinese         30.679 kbps  对应六区国配繁体特效                    
Presentation Graphics           Chinese         30.341 kbps  对应六区国配画内特效                    
Presentation Graphics           Italian         26.045 kbps                    
Presentation Graphics           Italian         34.150 kbps                    
Presentation Graphics           Chinese         27.139 kbps   对应央视国配简体特效                      
Presentation Graphics           Chinese         30.692 kbps   对应央视国配画内特效                      
Presentation Graphics           Chinese         30.699 kbps   评论中字                  
Presentation Graphics           Chinese         46.307 kbps   简英双语特效                  
Presentation Graphics           Chinese         46.140 kbps   繁英双语特效

例4

代码块行号,一行长的代码可以横向滚动,这种也是老生常谈的问题了,不至于这种问题都让插件/CSS去解决吧?我看到目前也没有什么完美的解决这两个需求的插件(试过好些都不行),还是得官方来实现啊。

1 个赞
  • 这里是为了遵守markdown语法,列表这种情况下在阅读模式没有换两行的内容是渲染成一个html元素的(如果我没有记错的话),要改就得从底层逻辑修改。
  • 我记得只要缩进对上就行,把设置引用块绑定到一个快捷键,会方便一些
  • 这些都受限于html的渲染逻辑,阅读模式代码块是分行渲染的,因此横向滚动只能对当前行起作用。
  • 这里是为了遵守markdown语法,列表这种情况下在阅读模式没有换两行的内容是渲染成一个html元素的(如果我没有记错的话),要改就得从底层逻辑修改。

本来obsidian也不是完全遵守markdown语法,换成用空格来识别呗。(不过我想了想,这个实现起来估计很麻烦,因为有序列表和无序列表需要的空格不一样,所以嵌套起来的话软件就得智能识别。)

把设置引用块绑定到一个快捷键,会方便一些

没用,要是toggle blockquote有用的话我就不发帖了。这货是toggle,不能一层层往上加>>>>>>>

  • 这些都受限于html的渲染逻辑,阅读模式代码块是分行渲染的,因此横向滚动只能对当前行起作用。

好,那这个请求撤回,就弄别的吧,比如加行号。

这样,我换个方式说一下我想表达的意思。

目前在Obsidian里没有好的方式实现这种逻辑(下面截图来自typora):

而这个行文逻辑并不算少见。
我不想削足适履,而且这种行文逻辑除了用这种列表的方式写,别的我还真想不出什么好办法。
目前的妥协方法是这样,第一层不用列表了(下面截图来自obsidian,reading mode):

但是这个看着就很怪,理由2、3都是一整个块,为什么理由1就要被列表强行分隔成三个块。这就涉及我在另一个帖子里提到的问题了。

不止是看着怪,还不普适,这种方法难以处理多层嵌套的情况。

所以我认为,obsidian应该给这种行文方式找到一个合适的实现方法。

这里遵守的是Markdown的重要特性: 空白压缩,楼主可以详细看一下这个帖子2楼

有什么场景是需要用到嵌套callout的吗?ob对list和代码块的支持来表示层级完全够用了

一样的,纯css无法实现的,需要交给插件来完成

这里遵守的是Markdown的重要特性: 空白压缩,楼主可以详细看一下这个帖子2楼

这个帖子确实很好。
我不提具体应该怎么实现了,我的核心观点如3楼所说,obsidian应该给这种行文方式找到一个合适的实现方法。
另外就是,obsidian没有遵守markdown的重要特性:两个回车才能被视为分段。又不是之前是乖乖学生……

有什么场景是需要用到嵌套callout的吗

场景1:在callout里插入引用,于是就会遇到>>的情况。
场景2:记录题目,callout能折叠答案很好用。

一样的,纯css无法实现的,需要交给插件来完成

……这是在说啥。你是想说,obsidian开发团队要给obsidian代码块加行号,只能靠css,不能靠其它方式吗?
不过,既然插件能完成,那就obsidian自己开发一个core plugin,给代码块加上行号就好了。

似乎开启严格换行模式以后调整对应的css能一定缓解。这里把项目符号的占位符调窄一点,就可以让1.使用此方法至于如何选择对齐,后面的空行也是可以通过CSS取消的。不过我太久没搞css,忘了这些选择器在哪了- -

文字原码如下。

对于常数项:

1. 记住
2. 判断
	1. 若非0
	2. 若0
3. 判断
4. 若正
	1. 观察
		1. 若能
		2. 若不能
	2. 虽然
	3. 正数
		1. 或者
		2. 或者
			1. 使用此方法时需注意

			至于如何选择合适的
			
			其实不难
			
			注意
			
	4. 若是
  • 实际上,多换一行就是最折中的方法了,不然就有悖于空白压缩,渲染什么的逻辑全都要改,并不是楼主设想一下就能实现的。。
  • 所以为什么不用无序列表呢,也能表示层级和折叠
  • 我的意思是,ob不会给这类定制化需求做开发,有插件实现就够了

我不想开启严格换行,我很讨厌markdown这个规范,根本不想遵守它。
这个规范在markdown渲染看来有它的理由,但我从我自己打字的角度来说,我觉得它非常不方便。
事实上也有很多markdown编辑器不遵守这个规范,比如GitHub的issue界面。

“空白压缩”那篇文章的入手点正是 <p> 标签需要两个回车。

但也能理解这句话在这个话题语境里的含义。

不开也没事,似乎也可以通过 css 调整

对于常数项:

1. 记住
2. 判断
	1. 若非0
	2. 若0
3. 判断
4. 若正
	1. 观察
		1. 若能
		2. 若不能
	2. 虽然
	3. 正数
		1. 或者
		2. 或者
			1. 使用此方法时需注意

		至于如何选择合适的
		其实不难
		注意
	1. 若是
1 个赞

那就改呗。
例如,出一个和typora完全一样的渲染方式我举双手欢迎。也有很多人会欢迎,英文论坛里有这种帖子。typora能实现这种方式。

我不明白你为什么非要问我的使用场景,解释起来很麻烦的啊……
obsidian出了callout,我为什么不能用,非要去选择难看的列表……
不过我还是解释一下。

第一,列表的折叠箭头太小了,展开和折叠很不方便。
第二,列表是列表,我写了列表就只能用列表的行文逻辑,不能用文档的行文逻辑。如果我写在callout里,我还能写文档。
第三,列表里面粘贴代码块/引用,在livepreview下渲染效果很丑。
第四,callout比列表美观太多了。

代码块加行号并不是一个小众需求……
不能把这种事情也推给插件
我觉得,那些obsidian自己实现并不会增加用户使用难度、复杂度的事情,就应该obsidian自己实现。代码块行号就是其中之一。
callout也是定制需求,obsidian就自己实现了,所以有广泛需求的代码块行号也应该实现。

我想再举个例子表达我的观点。
javalent/settings-search: Adds a search bar to Obsidian.md’s settings
我觉得这个插件相当好,是obsidian必须有的基础功能,我等着obsidian自己啥时候来实现它,这个功能应该让所有用户打开obsidian就能用,而不是装一个插件才能用,现在这个插件只有这么点儿下载量,说明知道它的人太少了,这明明应该是标配,不要让不了解插件的人用不上这种好功能啊。结果等了一年还是两年,也没见obsidian自己实现,我很无语。

看来看去没看懂,是说可以用css把这里的行间距“去掉”吗?
image

截错了,应该是这个

虽然可以这么说,但也不可以这么说,搞不好下次连 Callout 也不实现了 :joy:

开发者听着难受好理解,对其他用户也是一样。

不同的笔记习惯,在 Obsidian 总能找到合适的方式。大伙主要是和楼主分享当下已经可以解决楼主问题的方式,以及完全按照楼主设想可能面临的困境。

“这种功能做个开关,不用的就自己关掉好了”,然而代码并不会随着开关而消失。不用的功能不希望软件默认带着拿不掉占空间,宁愿用插件的形式,也并非小众需求。

Obsidian 编辑代码不如 VSCode,加了行号我也不会用;但现有的核心插件“录音机”我确实觉得没什么用。要是楼主的一进我的能一出,岂不美哉。欢迎楼主争取自己的方式,我也争取一下我的观点。

#16 反馈,删除 #15(本帖)原内容最后一句,请继续阅读。

1 个赞

说实在的,这简直太好了。
如果开发者愿意用这种方式清晰地表明自己的开发取向,那我觉得对用户来说是一件幸事,避免有的用户还心存幻想,存在误解,比如我。

我完全不同意这个说法。(另外就是,最后这一句很怪,我没看懂,感觉作者你倒装用得太熟练了,或者是缺少了什么承上启下的逻辑词。)
照这个说法,那live preivew也没必要软件自己实现了,我记得当时也有第三方插件能实现一个还行的预览。
还有sliding panes (stack tabs),也是第三方插件实现,最后官方自己实现了。
我们来看看obsidian目前内置的设置,我截了editorv这一页为示例:
我看下来,里面有那么好几个都是小众需求啊,当年实现这个干啥,不用的功能占据硬盘空间。比如,show line number, right-to-left, tab indent size, vim key bindings等等,里面总有几个是小众需求能用第三方插件来实现的。

这个观点我也觉得很怪。
在双向链接没出来之前做代码笔记的人很多用typora。typora支持代码块行号。你是想表达如果当年你用typora的话,会把这个显示行号开关给关掉吗?
不过不管怎么样,我认为,绝大多数人并不会反对代码块有一个行号,有的话体验上会有一点优化,没有也能用,就仅此而已。就算不那么支持行号的人,如果行号功能真出来了并且默认开启,可能有相当一部分人关都懒得关,并且也不会因此降低对obsidian的评价。

我也不懂CSS,试了一下,好像是不行?

调整margin-block-end的数值(比如调整到10rem),所有间距都变大了

/* 取消列表、正文、表格、代码块前后段间距 */
pre {
    margin: 0em 0px;
}
p, table, ul{
    --p-spacing: 0;
    --list-spacing: 0;
}

效果如图:

1 个赞

目前的情况是:

  1. 必须首先承认,live preview 确实不好用,全网做的最好的就是typora,ob就是比不上typora
  2. 在这争没用,得去英文论坛提建议
  3. 官方看起来不想在这个上面花功夫优化,因为论坛上也有一些帖子提过需求,有些都很早了两年前三年前,跟帖的人也很多
  4. 有些插件有些css能补充一部分功能,但还是比不上typora,还要折腾很久,就算折腾很久还是比不上typora,还会因为ob的更新可能会产生插件用不了的情况,以及出现一些bug
  5. 所以结论是,能忍就继续用,忍不了就换个用吧
  6. 我还在继续用ob,就是因为ob的优点太契合我,所以我咬咬牙把这些缺点忍了
  7. 关于嵌套引用>>>>,有个插件完美解决,名字忘了,可能叫callout insert?因为我并不常用嵌套,所以我没装(当然这也确实是楼主说的,很多听起来基础的功能居然要靠插件实现,太折腾了)
  8. 关于空行,其实我在ob出来之前用的就是typora,我当时就特别不喜欢typora按一下enter在源码里是加两个回车的设定,导致我当时一直用的是shift+enter换行
  9. 所以只有是各花入各眼了,ob如果不契合你,而且官方也不想契合你的方向发力,那还是趁早换了吧

这个我知道,callout integrator,我是在插件市场里搜callout搜出来的,我下载过。
然后我就发现:
image
:joy: 然后我就不想用了。等我什么时候有空了再一个一个插件试吧,这太费事了……
我开了这么多插件:

[
  "obsidian-image-toolkit",
  "obsidian-journey-plugin",
  "obsidian-linter",
  "obsidian-local-images",
  "obsidian-markdown-furigana",
  "obsidian-charts",
  "obsidian-link-converter",
  "obsidian-outliner",
  "url-into-selection",
  "recent-files-obsidian",
  "shortcuts-extender",
  "smart-random-note",
  "obsidian-sortable",
  "obsidian-style-settings",
  "tag-wrangler",
  "templater-obsidian",
  "obsidian-tracker",
  "obsidian-advanced-uri",
  "obsidian-auto-link-title",
  "better-fn",
  "obsidian-commits",
  "dataview",
  "cm-editor-syntax-highlight-obsidian",
  "obsidian-latex",
  "file-explorer-note-count",
  "pane-relief",
  "Enhanced-editing",
  "darlal-switcher-plus",
  "cm-chs-patch",
  "mousewheel-image-zoom",
  "obsidian-hider",
  "workspaces-plus",
  "obsidian-activity-history",
  "float-search",
  "persistent-links",
  "better-word-count",
  "callout-manager",
  "obsidian-kanban",
  "table-editor-obsidian",
  "colored-text",
  "oz-clear-unused-images",
  "settings-search",
  "obsidian42-strange-new-worlds",
  "obsidian-icon-shortcodes",
  "marp",
  "omnisearch",
  "obsidian-tasks-plugin",
  "obsidian-projects",
  "obsidian-spaced-repetition",
  "open-note-to-window-title",
  "surfing",
  "quickadd",
  "nldates-obsidian",
  "obsidian42-brat",
  "clever-search",
  "obsidian-advanced-slides",
  "inline-math",
  "math-booster",
  "obsidian-hide-sidebars-when-narrow",
  "tag-summary-plugin",
  "obsidian-minimal-settings",
  "obsidian-hover-editor",
  "rendered-block-link-suggestions",
  "auto-displaystyle-inline-math",
  "math-in-callout",
  "dynamic-line-height-cjk",
  "pdf-plus",
  "quick-preview",
  "obsidian-excalidraw-plugin",
  "excalibrain",
  "obsidian-paste-to-current-indentation",
  "obsidian-advanced-new-file",
  "obsidian-filename-heading-sync",
  "obsidian-memos",
  "obsidian-paste-png-to-jpeg",
  "obsidian-list-callouts",
  "codeblock-customizer",
  "mathlive",
  "quick-latex"
]