Skip to content

Commit 38d727e

Browse files
Rich-HarrisRich Harris
andauthored
vim mode (sveltejs#253)
* vim mode * enable vim via ?vim=true --------- Co-authored-by: Rich Harris <[email protected]>
1 parent 3e12235 commit 38d727e

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"@codemirror/lang-javascript": "^6.1.4",
4141
"@codemirror/language": "^6.6.0",
4242
"@codemirror/lint": "^6.2.0",
43+
"@codemirror/search": "^6.3.0",
4344
"@codemirror/state": "^6.2.0",
4445
"@codemirror/view": "^6.9.2",
4546
"@fontsource/roboto-mono": "^4.5.10",
@@ -48,6 +49,7 @@
4849
"@lezer/javascript": "^1.4.1",
4950
"@lezer/lr": "^1.3.3",
5051
"@replit/codemirror-lang-svelte": "^6.0.0",
52+
"@replit/codemirror-vim": "^6.0.9",
5153
"@rich_harris/svelte-split-pane": "^1.1.0",
5254
"@webcontainer/api": "^1.1.0",
5355
"adm-zip": "^0.5.10",

pnpm-lock.yaml

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/routes/tutorial/[slug]/Editor.svelte

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,26 @@
7878
}
7979
}
8080
81+
let installed_vim = false;
82+
8183
/** @param {import('$lib/types').Stub[]} $files */
82-
function reset($files) {
84+
async function reset($files) {
8385
if (skip_reset) return;
8486
87+
let should_install_vim = localStorage.getItem('vim') === 'true';
88+
89+
const q = new URLSearchParams(location.search);
90+
if (q.has('vim')) {
91+
should_install_vim = q.get('vim') === 'true';
92+
localStorage.setItem('vim', should_install_vim.toString());
93+
}
94+
95+
if (!installed_vim && should_install_vim) {
96+
installed_vim = true;
97+
const { vim } = await import('@replit/codemirror-vim');
98+
extensions.push(vim());
99+
}
100+
85101
for (const file of $files) {
86102
if (file.type !== 'file') continue;
87103
@@ -174,11 +190,11 @@
174190
skip_reset = true;
175191
});
176192
177-
afterNavigate(() => {
193+
afterNavigate(async () => {
178194
skip_reset = false;
179195
180196
editor_states.clear();
181-
reset($files);
197+
await reset($files);
182198
183199
if (editor_view) {
184200
// could be false if onMount returned early

0 commit comments

Comments
 (0)