From dfa0d396c130428a63036253ec080c9ccd2fd4a0 Mon Sep 17 00:00:00 2001 From: apple <245524539+apples-kksk@users.noreply.github.com> Date: Sun, 10 May 2026 15:17:56 +0800 Subject: [PATCH] Add custom Vim key mappings --- .../settings/UserPreferencesForm.tsx | 108 ++++++++++++++++++ src/cloud/lib/editor/CodeMirror.ts | 45 ++++++++ .../editor/components/CodeMirrorEditor.tsx | 8 +- src/cloud/lib/i18n/enUS.ts | 5 + src/cloud/lib/i18n/fr.ts | 5 + src/cloud/lib/i18n/ja.ts | 5 + src/cloud/lib/i18n/types.ts | 3 + src/cloud/lib/i18n/zhCN.ts | 5 + src/cloud/lib/stores/settings/store.ts | 1 + src/cloud/lib/stores/settings/types.ts | 7 ++ 10 files changed, 191 insertions(+), 1 deletion(-) diff --git a/src/cloud/components/settings/UserPreferencesForm.tsx b/src/cloud/components/settings/UserPreferencesForm.tsx index b6cb5cf50f..1b88929243 100644 --- a/src/cloud/components/settings/UserPreferencesForm.tsx +++ b/src/cloud/components/settings/UserPreferencesForm.tsx @@ -6,6 +6,7 @@ import { CodeMirrorEditorTheme, codeMirrorKeyMap, CodeMirrorKeyMap, + CodeMirrorVimMapEntry, GeneralEditorIndentType, GeneralEditorIndentSize, GeneralLanguageOptions, @@ -32,6 +33,10 @@ const UserPreferencesForm = () => { const [fontFamily, setFontFamily] = useState( settings['general.editorFontFamily'] ) + const [vimKeyMaps, setVimKeyMaps] = useState(() => { + return formatVimKeyMaps(settings['general.editorVimKeyMaps']) + }) + const [vimKeyMapsError, setVimKeyMapsError] = useState(null) const resetSettings = useCallback(() => { setSettings({}) @@ -162,6 +167,27 @@ const UserPreferencesForm = () => { [fontFamily, setSettings] ) + const updateVimKeyMaps: ChangeEventHandler = useCallback( + (event) => { + setVimKeyMaps(event.target.value) + }, + [setVimKeyMaps] + ) + useDebounce( + () => { + try { + setSettings({ + 'general.editorVimKeyMaps': parseVimKeyMaps(vimKeyMaps), + }) + setVimKeyMapsError(null) + } catch (error) { + setVimKeyMapsError(t(lngKeys.SettingsEditorVimKeyMapsInvalid)) + } + }, + 500, + [vimKeyMaps, setSettings, t] + ) + return (
{ }, ], }, + { + title: t(lngKeys.SettingsEditorVimKeyMaps), + items: [ + { + type: 'node', + element: ( +
+