以下の設定は手堅い。
```ts
Vim.defineOperator("yankToClipboard", yankToClipboard);
Vim.defineAction("putFromClipboard", putFromClipboard);
Vim.mapCommand("y", "operator", "yankToClipboard");
Vim.mapCommand("p", "action", "putFromClipboard");
```
以下は細かな動きが色々くずれるので微妙... できれば[[レジスタ (Vim)|レジスタ]]の調整にしたい。
```ts
function yankToClipboard(cm: any) {
const state = cm.cm6.state;
const selection = state.selection.main;
const text = state.doc.sliceString(selection.from, selection.to);
navigator.clipboard.writeText(text).then(() => {
cm.cm6.dispatch({
selection: { anchor: selection.from },
});
});
}
async function putFromClipboard(cm: any, view: any) {
await navigator.clipboard
.readText()
.then((text) => {
cm.replaceSelection(text);
})
.catch((err) => {
console.error("Failed to read clipboard contents: ", err);
});
}
```