Closed rocsun closed 1 year ago
import {basicSetup, EditorView} from "codemirror"
import {javascript} from "@codemirror/lang-javascript"
import {search} from "@codemirror/search"
new EditorView({
doc: "console.log('hello')\n",
extensions: [
basicSetup,
search({
createPanel(view) {
const dom = document.createElement('div');
const input = document.createElement('input');
input.setAttribute('main-field', 'true');
dom.appendChild(input);
return { dom };
}
})
],
parent: document.body
})
@rocsun 我看作者说实现个搜索并不难 https://discuss.codemirror.net/t/export-class-searchpanel/6364/2
从代码上来看是写死的: https://github.com/codemirror/search/blob/3c1346e213a9635f56f92b23066ea0638319de25/src/search.ts#L645-L666
解决方法:
- 重新实现一个搜索的
extensions
,使用searchKeymap
禁用默认的搜索。- 通过寻找 dom 节点 JS 去改上面的文本(更简单)
第二个方法确实够简单,解决了感谢👍
@jaywcjlove 使用 search 函数创建 extension 后,好像也不能自定义搜索面板,需要自己手动调用 openSearchPanel 吗?
@wintc23 不知道你代码如何写的,示例中显示没有问题。 https://codesandbox.io/embed/react-codemirror-example-codemirror-6-https-github-com-uiwjs-react-codemirror-issues-498-wqg52f?fontsize=14&hidenavigation=1&theme=dark
import React from "react";
import CodeMirror from "@uiw/react-codemirror";
import { javascript } from "@codemirror/lang-javascript";
import { search } from "@codemirror/search";
export default function App() {
const onChange = React.useCallback((value, viewUpdate) => {
console.log("value:", value);
}, []);
return (
<CodeMirror
value="console.log('hello world!');"
height="200px"
theme="dark"
extensions={[
javascript({ jsx: true }),
search({
createPanel(view) {
const dom = document.createElement("div");
const input = document.createElement("input");
input.setAttribute("main-field", "true");
dom.appendChild(input);
return { dom };
}
})
]}
onChange={onChange}
/>
);
}
@jaywcjlove 感谢!确实是可以,排查了下看代码没问题,重启服务后竟然就可以了...
@rocsun 我看作者说实现个搜索并不难 https://discuss.codemirror.net/t/export-class-searchpanel/6364/2
从代码上来看是写死的: https://github.com/codemirror/search/blob/3c1346e213a9635f56f92b23066ea0638319de25/src/search.ts#L645-L666
解决方法:
extensions
,使用searchKeymap
禁用默认的搜索。