遇到的问题
在默认的编辑视图中搜索表格内容时,表格会变成源码模式,点击表格中要修改的部分后会跳回编辑视图,然后光标就跳到了其他地方,要修改的部分就不知道在哪里了。
预期的效果
有没有办法可以在编辑视图下搜索而不会跳源码模式,或者跳回编辑视图时光标能停留在要编辑的部分?
已尝试的解决方案
除了用源码模式编辑,想不出来方法,核心插件里也没有看到是弄表格的插件。有没有啥方法可以解决这个问题。
目前跟表格有关的只装了 Advanced Tables 这个插件。
在默认的编辑视图中搜索表格内容时,表格会变成源码模式,点击表格中要修改的部分后会跳回编辑视图,然后光标就跳到了其他地方,要修改的部分就不知道在哪里了。
有没有办法可以在编辑视图下搜索而不会跳源码模式,或者跳回编辑视图时光标能停留在要编辑的部分?
除了用源码模式编辑,想不出来方法,核心插件里也没有看到是弄表格的插件。有没有啥方法可以解决这个问题。
目前跟表格有关的只装了 Advanced Tables 这个插件。
我也发现了这个问题。
这是因为Obsidian中搜索是基于源码进行的。如果你在搜索栏输入markdown标记也会获得结果。
但是点选输入时,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()||""}`)
谢谢,我去试试看
你好,我记得之前在哪个帖子见您提到过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()||""}`);