@@ -28,7 +28,15 @@ import {
2828 rectangularSelection ,
2929 dropCursor ,
3030} from '@codemirror/view' ;
31- import { EditorState , StateEffect , StateField , EditorSelection , Transaction , Compartment } from '@codemirror/state' ;
31+ import {
32+ EditorState ,
33+ StateEffect ,
34+ StateField ,
35+ EditorSelection ,
36+ Transaction ,
37+ Compartment ,
38+ Prec ,
39+ } from '@codemirror/state' ;
3240import { markdown } from '@codemirror/lang-markdown' ;
3341import { search , searchKeymap , SearchQuery } from '@codemirror/search' ;
3442import {
@@ -52,6 +60,7 @@ import { createElement } from './utils/dom';
5260import { base64Reg , imgDrawioXmlReg , createUrlReg , getCodeBlockRule } from './utils/regexp' ;
5361import { addEvent , removeEvent } from './utils/event' ;
5462import { handleNewlineIndentList } from './utils/autoindent' ;
63+ import { createMarkdownKeymap } from './utils/markdownKeymap' ;
5564import diff from 'fast-diff' ;
5665
5766/**
@@ -651,7 +660,8 @@ class CM6Adapter {
651660 try {
652661 const vimMod = await loadVimModule ( ) ;
653662 this . view . dispatch ( {
654- effects : this . vimCompartment . reconfigure ( vimMod . vim ( ) ) ,
663+ // Vim handles normal-mode keys before Markdown; unhandled insert-mode keys fall through.
664+ effects : this . vimCompartment . reconfigure ( Prec . highest ( vimMod . vim ( ) ) ) ,
655665 } ) ;
656666 this . currentKeyMap = 'vim' ;
657667 } catch ( e ) {
@@ -1909,14 +1919,6 @@ export default class Editor {
19091919 { key : 'ArrowUp' , run : ( ) => self . arrowKeyInterceptor ?. ( 'ArrowUp' ) || false } ,
19101920 { key : 'ArrowDown' , run : ( ) => self . arrowKeyInterceptor ?. ( 'ArrowDown' ) || false } ,
19111921 { key : 'Escape' , run : ( ) => self . arrowKeyInterceptor ?. ( 'Escape' ) || false } ,
1912- {
1913- key : 'Enter' ,
1914- run : ( view ) => {
1915- if ( self . arrowKeyInterceptor ?. ( 'Enter' ) ) return true ;
1916- const adapter = self . editor || new CM6Adapter ( view , self . vimCompartment , self . readOnlyCompartment ) ;
1917- return handleNewlineIndentList ( adapter ) ;
1918- } ,
1919- } ,
19201922 // Sublime Text style keybindings
19211923 // Ctrl-Shift-L / Cmd-Shift-L: 将选区拆分为多个光标,在每行末尾各放一个光标(Sublime split into lines)
19221924 {
@@ -1961,7 +1963,18 @@ export default class Editor {
19611963
19621964 const extensions = [
19631965 cachedCherryHighlighting ,
1964- markdown ( ) ,
1966+ markdown ( { addKeymap : false } ) ,
1967+ Prec . high (
1968+ keymap . of (
1969+ createMarkdownKeymap ( {
1970+ interceptEnter : ( ) => self . arrowKeyInterceptor ?. ( 'Enter' ) || false ,
1971+ continueCustomList : ( view ) => {
1972+ const adapter = self . editor || new CM6Adapter ( view , self . vimCompartment , self . readOnlyCompartment ) ;
1973+ return handleNewlineIndentList ( adapter ) ;
1974+ } ,
1975+ } ) ,
1976+ ) ,
1977+ ) ,
19651978 this . historyCompartment . of ( history ( ) ) ,
19661979 search ( ) ,
19671980 closeBrackets ( ) ,
0 commit comments