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: ( +
+