关于表格使用的问题

遇到的问题

在默认的编辑视图中搜索表格内容时,表格会变成源码模式,点击表格中要修改的部分后会跳回编辑视图,然后光标就跳到了其他地方,要修改的部分就不知道在哪里了。

预期的效果

有没有办法可以在编辑视图下搜索而不会跳源码模式,或者跳回编辑视图时光标能停留在要编辑的部分?

已尝试的解决方案

除了用源码模式编辑,想不出来方法,核心插件里也没有看到是弄表格的插件。有没有啥方法可以解决这个问题。

目前跟表格有关的只装了 Advanced Tables 这个插件。

我也发现了这个问题。

image

这是因为Obsidian中搜索是基于源码进行的。如果你在搜索栏输入markdown标记也会获得结果。

image

但是点选输入时,Obsidian会立即将源代码渲染成HTML。这导致界面中光标所处的输入元素丢失了。

我个人的解决方案是直接不用markdown格式的表格,因为我本来就觉得它算不上”简单标记“,数据中嵌入了大量格式。我使用dataview,在其中输入JSON或CSV进行渲染。例如:

const data = `
A,B,C
1,2,'a
3,4,'b
`;

const rows = data.trim().split('\n');
const headers = rows[0].split(',');
const dataArray = rows.slice(1).map(row => {
    return row.split(',').map(value => value.replace(/'/g, ''));
}).map(row => row.map(value => { // 如果是数字则转换为数字,否则保留字符串
    return isNaN(value) ? value : Number(value);
}));

dv.table(headers,dataArray)

除了源码模式下搜索外,还可以用全局搜索,不会出现你说的问题。

不过,如果嫌全局搜索可能搜索出多余的内容的话,可以在搜索中使用 file:前缀过滤,如果嫌每次输入file:较麻烦的话,也可以把下面的代码用quickadd,runjs等生成命令并设置为快捷键,就比较方便了

代码:

app.internalPlugins.plugins['global-search'].instance.openGlobalSearch(`path:${app.workspace.getActiveFile()?.path} ${app.workspace.activeEditor?.getSelection()||""}`)
1 个赞

谢谢,我去试试看

你好,我记得之前在哪个帖子见您提到过float search,用这个代码,现在只能在打开侧边栏的搜索,能否打开float search的搜索呢

是的,float search可以参考帖子 如何在新窗口中打开ob自带的搜索面板? - #4,来自 wilson

不过这里只搜索指定文件可把调用改为 openSearch(`path:${app.workspace.getActiveFile()?.path} ${app.workspace.activeEditor?.getSelection()||""}`)

完整代码如下 (更改了函数名,添加了isInHover参数):

// 打开悬浮搜索
// query查询字符串,isInHover是否是用hover editor
async function openFloatSearch(query, isInHover=true) {
    const selected = app.workspace.activeLeaf.view.editor?.getSelection();
	const leaf = app.workspace.getLeaf('tab');
	// 这种方式成功的话可以使用这种方式,不会先弹出tab,但有时会不成功
	//const leaf = app.workspace.createLeafInParent(app.workspace.floatingSplit);
	await leaf.setViewState({
		type: 'search',
		active: true,
		state: {
			query: query || selected || ""
		}
	});
	if(isInHover) app.plugins.plugins['obsidian-hover-editor'].convertLeafToPopover(leaf);
}
openFloatSearch(`path:${app.workspace.getActiveFile()?.path} ${app.workspace.activeEditor?.getSelection()||""}`);