1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 01:50:05 +08:00

fix(chinese): fix SPC n c d key binding

This commit is contained in:
wsdjeg 2022-01-03 13:09:19 +08:00
parent 5e86c24ccb
commit ab91988eff
2 changed files with 188 additions and 145 deletions

View File

@ -6,6 +6,26 @@
" License: GPLv3 " License: GPLv3
"============================================================================= "=============================================================================
""
" @section Chinese, layers-chinese
" @parentsection layers
" `chinese` layer provides Chinese specific function for SpaceVim.
" This layer is not loaded by default, to use this layer, add following
" snippet into your SpaceVim configuration file.
" >
" [[layers]]
" name = 'chinese'
" <
"
" @subsection key bindings
" >
" Key binding Description
" SPC l c check with ChineseLinter
" SPC x g t translate current word
" SPC n c d convert chinese number to digit
" <
"
function! SpaceVim#layers#chinese#plugins() abort function! SpaceVim#layers#chinese#plugins() abort
let plugins = [ let plugins = [
@ -43,7 +63,7 @@ function! s:ConvertChineseNumberUnderCursorToDigit() abort
while cword =~ ChineseNumberPattern while cword =~ ChineseNumberPattern
let matchword = matchstr(cword, ChineseNumberPattern) let matchword = matchstr(cword, ChineseNumberPattern)
let cword = substitute(cword, matchword, s:Chinese2Digit(matchword)) let cword = substitute(cword, matchword, s:Chinese2Digit(matchword))
endif endwhile
if !empty(cword) if !empty(cword)
let save_register = @k let save_register = @k
let save_cursor = getcurpos() let save_cursor = getcurpos()
@ -57,39 +77,40 @@ endfunction
let s:list = SpaceVim#api#import('data#list') let s:list = SpaceVim#api#import('data#list')
function! s:Chinese2Digit(cnDigitString) abort function! s:Chinese2Digit(cnDigitString) abort
let CN_NUM = { let CN_NUM = {
'': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, \ '': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9,
'零': 0, '壹': 1, '贰': 2, '叁': 3, '肆': 4, '伍': 5, '陆': 6, '柒': 7, '捌': 8, '玖': 9, \ '零': 0, '壹': 1, '贰': 2, '叁': 3, '肆': 4, '伍': 5, '陆': 6, '柒': 7, '捌': 8, '玖': 9,
'貮': 2, '两': 2 \ '貮': 2, '两': 2
} \ }
let CN_UNIT = { let CN_UNIT = {
'十': 10, '拾': 10, '百': 100, '佰': 100, '千': 1000, '仟': 1000, '万': 10000, '萬': 10000, \ '十': 10, '拾': 10, '百': 100, '佰': 100, '千': 1000, '仟': 1000, '万': 10000, '萬': 10000,
'亿': 100000000, '億': 100000000, '兆': 1000000000000 \ '亿': 100000000, '億': 100000000, '兆': 1000000000000
} \ }
let cnList = split(a:cnDigitString, "点") let cnList = split(a:cnDigitString, "点")
let integer = cnList[0] # 整数部分 let integer = cnList[0] " 整数部分
let decimal = len(cnList) == 2 ? cnList[1] : [] # 小数部分 let decimal = len(cnList) == 2 ? cnList[1] : [] " 小数部分
let unit = 0 # 当前单位 let unit = 0 " 当前单位
let parse = [] # 解析数组 let parse = [] " 解析数组
let i = len(integer) let i = len(integer)
while i >= 0 while i >= 0
let i -= 1 let i -= 1
let x = integer[i] let x = integer[i]
if has_key(CN_UNIT, x) if has_key(CN_UNIT, x)
# 当前字符是单位 " 当前字符是单位
let unit = CN_UNIT[x] let unit = CN_UNIT[x]
if unit == 10000 # 万位 if unit == 10000 " 万位
s:list.push(parse, "w") s:list.push(parse, "w")
let unit = 1 let unit = 1
elseif unit == 100000000 # 亿位 elseif unit == 100000000 " 亿位
s:list.push(parse, "y") s:list.push(parse, "y")
let unit = 1 let unit = 1
elseif unit == 1000000000000 # 兆位 elseif unit == 1000000000000 " 兆位
s:list.push(parse, "z") s:list.push(parse, "z")
let unit = 1 let unit = 1
continue continue
endif
else else
# 当前字符是数字 " 当前字符是数字
let dig = CN_NUM[x] let dig = CN_NUM[x]
if unit if unit
let dig = dig * unit let dig = dig * unit
@ -99,26 +120,26 @@ function! s:Chinese2Digit(cnDigitString) abort
endif endif
endwhile endwhile
if unit == 10: # 处理10-19的数字 if unit == 10 " 处理10-19的数字
s:list.push(parse, 10) s:list.push(parse, 10)
endif endif
let result = 0 let result = 0
let tmp = 0 let tmp = 0
while parse while parse
let x = s:list.pop(parse) let x = s:list.pop(parse)
if x == 'w': if x == 'w'
let tmp *= 10000 let tmp *= 10000
let result += tmp let result += tmp
let tmp = 0 let tmp = 0
elseif x == 'y': elseif x == 'y'
let tmp *= 100000000 let tmp *= 100000000
let result += tmp let result += tmp
let tmp = 0 let tmp = 0
elseif x == 'z': elseif x == 'z'
let tmp *= 1000000000000 let tmp *= 1000000000000
let result += tmp let result += tmp
let tmp = 0 let tmp = 0
else: else
let tmp += x let tmp += x
endif endif
let result += tmp let result += tmp

View File

@ -85,128 +85,129 @@ CONTENTS *SpaceVim-contents*
4. Commands..............................................|SpaceVim-commands| 4. Commands..............................................|SpaceVim-commands|
5. Public functions.....................................|SpaceVim-functions| 5. Public functions.....................................|SpaceVim-functions|
6. Layers..................................................|SpaceVim-layers| 6. Layers..................................................|SpaceVim-layers|
1. autocomplete...........................|SpaceVim-layers-autocomplete| 1. Chinese.....................................|SpaceVim-layers-chinese|
2. chat...........................................|SpaceVim-layers-chat| 2. autocomplete...........................|SpaceVim-layers-autocomplete|
3. checkers...................................|SpaceVim-layers-checkers| 3. chat...........................................|SpaceVim-layers-chat|
4. colorscheme.............................|SpaceVim-layers-colorscheme| 4. checkers...................................|SpaceVim-layers-checkers|
5. core...........................................|SpaceVim-layers-core| 5. colorscheme.............................|SpaceVim-layers-colorscheme|
6. core#statusline.....................|SpaceVim-layers-core-statusline| 6. core...........................................|SpaceVim-layers-core|
7. core#tabline...........................|SpaceVim-layers-core-tabline| 7. core#statusline.....................|SpaceVim-layers-core-statusline|
8. cscope.......................................|SpaceVim-layers-cscope| 8. core#tabline...........................|SpaceVim-layers-core-tabline|
9. ctrlp.........................................|SpaceVim-layers-ctrlp| 9. cscope.......................................|SpaceVim-layers-cscope|
10. debug........................................|SpaceVim-layers-debug| 10. ctrlp........................................|SpaceVim-layers-ctrlp|
11. exprfold..................................|SpaceVim-layers-exprfold| 11. debug........................................|SpaceVim-layers-debug|
12. format......................................|SpaceVim-layers-format| 12. exprfold..................................|SpaceVim-layers-exprfold|
13. git............................................|SpaceVim-layers-git| 13. format......................................|SpaceVim-layers-format|
14. github......................................|SpaceVim-layers-github| 14. git............................................|SpaceVim-layers-git|
15. gtags........................................|SpaceVim-layers-gtags| 15. github......................................|SpaceVim-layers-github|
16. incsearch................................|SpaceVim-layers-incsearch| 16. gtags........................................|SpaceVim-layers-gtags|
17. indentmove..............................|SpaceVim-layers-indentmove| 17. incsearch................................|SpaceVim-layers-incsearch|
18. lang#actionscript................|SpaceVim-layers-lang-actionscript| 18. indentmove..............................|SpaceVim-layers-indentmove|
19. lang#agda................................|SpaceVim-layers-lang-agda| 19. lang#actionscript................|SpaceVim-layers-lang-actionscript|
20. lang#asciidoc........................|SpaceVim-layers-lang-asciidoc| 20. lang#agda................................|SpaceVim-layers-lang-agda|
21. lang#asepctj..........................|SpaceVim-layers-lang-asepctj| 21. lang#asciidoc........................|SpaceVim-layers-lang-asciidoc|
22. lang#assembly........................|SpaceVim-layers-lang-assembly| 22. lang#asepctj..........................|SpaceVim-layers-lang-asepctj|
23. lang#autohotkey....................|SpaceVim-layers-lang-autohotkey| 23. lang#assembly........................|SpaceVim-layers-lang-assembly|
24. lang#autoit............................|SpaceVim-layers-lang-autoit| 24. lang#autohotkey....................|SpaceVim-layers-lang-autohotkey|
25. lang#batch..............................|SpaceVim-layers-lang-batch| 25. lang#autoit............................|SpaceVim-layers-lang-autoit|
26. lang#c......................................|SpaceVim-layers-lang-c| 26. lang#batch..............................|SpaceVim-layers-lang-batch|
27. lang#chapel............................|SpaceVim-layers-lang-chapel| 27. lang#c......................................|SpaceVim-layers-lang-c|
28. lang#clojure..........................|SpaceVim-layers-lang-clojure| 28. lang#chapel............................|SpaceVim-layers-lang-chapel|
29. lang#coffeescript................|SpaceVim-layers-lang-coffeescript| 29. lang#clojure..........................|SpaceVim-layers-lang-clojure|
30. lang#crystal..........................|SpaceVim-layers-lang-crystal| 30. lang#coffeescript................|SpaceVim-layers-lang-coffeescript|
31. lang#csharp............................|SpaceVim-layers-lang-csharp| 31. lang#crystal..........................|SpaceVim-layers-lang-crystal|
32. lang#d......................................|SpaceVim-layers-lang-d| 32. lang#csharp............................|SpaceVim-layers-lang-csharp|
33. lang#dart................................|SpaceVim-layers-lang-dart| 33. lang#d......................................|SpaceVim-layers-lang-d|
34. lang#dockerfile....................|SpaceVim-layers-lang-dockerfile| 34. lang#dart................................|SpaceVim-layers-lang-dart|
35. lang#e......................................|SpaceVim-layers-lang-e| 35. lang#dockerfile....................|SpaceVim-layers-lang-dockerfile|
36. lang#eiffel............................|SpaceVim-layers-lang-eiffel| 36. lang#e......................................|SpaceVim-layers-lang-e|
37. lang#elixir............................|SpaceVim-layers-lang-elixir| 37. lang#eiffel............................|SpaceVim-layers-lang-eiffel|
38. lang#elm..................................|SpaceVim-layers-lang-elm| 38. lang#elixir............................|SpaceVim-layers-lang-elixir|
39. lang#erlang............................|SpaceVim-layers-lang-erlang| 39. lang#elm..................................|SpaceVim-layers-lang-elm|
40. lang#extra..............................|SpaceVim-layers-lang-extra| 40. lang#erlang............................|SpaceVim-layers-lang-erlang|
41. lang#fennel............................|SpaceVim-layers-lang-fennel| 41. lang#extra..............................|SpaceVim-layers-lang-extra|
42. lang#forth..............................|SpaceVim-layers-lang-forth| 42. lang#fennel............................|SpaceVim-layers-lang-fennel|
43. lang#fortran..........................|SpaceVim-layers-lang-fortran| 43. lang#forth..............................|SpaceVim-layers-lang-forth|
44. lang#foxpro............................|SpaceVim-layers-lang-foxpro| 44. lang#fortran..........................|SpaceVim-layers-lang-fortran|
45. lang#fsharp............................|SpaceVim-layers-lang-fsharp| 45. lang#foxpro............................|SpaceVim-layers-lang-foxpro|
46. lang#go....................................|SpaceVim-layers-lang-go| 46. lang#fsharp............................|SpaceVim-layers-lang-fsharp|
47. lang#goby................................|SpaceVim-layers-lang-goby| 47. lang#go....................................|SpaceVim-layers-lang-go|
48. lang#gosu................................|SpaceVim-layers-lang-gosu| 48. lang#goby................................|SpaceVim-layers-lang-goby|
49. lang#graphql..........................|SpaceVim-layers-lang-graphql| 49. lang#gosu................................|SpaceVim-layers-lang-gosu|
50. lang#groovy............................|SpaceVim-layers-lang-groovy| 50. lang#graphql..........................|SpaceVim-layers-lang-graphql|
51. lang#hack................................|SpaceVim-layers-lang-hack| 51. lang#groovy............................|SpaceVim-layers-lang-groovy|
52. lang#haskell..........................|SpaceVim-layers-lang-haskell| 52. lang#hack................................|SpaceVim-layers-lang-hack|
53. lang#html................................|SpaceVim-layers-lang-html| 53. lang#haskell..........................|SpaceVim-layers-lang-haskell|
54. lang#hy....................................|SpaceVim-layers-lang-hy| 54. lang#html................................|SpaceVim-layers-lang-html|
55. lang#idris..............................|SpaceVim-layers-lang-idris| 55. lang#hy....................................|SpaceVim-layers-lang-hy|
56. lang#io....................................|SpaceVim-layers-lang-io| 56. lang#idris..............................|SpaceVim-layers-lang-idris|
57. lang#j......................................|SpaceVim-layers-lang-j| 57. lang#io....................................|SpaceVim-layers-lang-io|
58. lang#janet..............................|SpaceVim-layers-lang-janet| 58. lang#j......................................|SpaceVim-layers-lang-j|
59. lang#java................................|SpaceVim-layers-lang-java| 59. lang#janet..............................|SpaceVim-layers-lang-janet|
60. lang#javascript....................|SpaceVim-layers-lang-javascript| 60. lang#java................................|SpaceVim-layers-lang-java|
61. lang#json................................|SpaceVim-layers-lang-json| 61. lang#javascript....................|SpaceVim-layers-lang-javascript|
62. lang#julia..............................|SpaceVim-layers-lang-julia| 62. lang#json................................|SpaceVim-layers-lang-json|
63. lang#kotlin............................|SpaceVim-layers-lang-kotlin| 63. lang#julia..............................|SpaceVim-layers-lang-julia|
64. lang#latex..............................|SpaceVim-layers-lang-latex| 64. lang#kotlin............................|SpaceVim-layers-lang-kotlin|
65. lang#lisp................................|SpaceVim-layers-lang-lisp| 65. lang#latex..............................|SpaceVim-layers-lang-latex|
66. lang#livescript....................|SpaceVim-layers-lang-livescript| 66. lang#lisp................................|SpaceVim-layers-lang-lisp|
67. lang#lua..................................|SpaceVim-layers-lang-lua| 67. lang#livescript....................|SpaceVim-layers-lang-livescript|
68. lang#markdown........................|SpaceVim-layers-lang-markdown| 68. lang#lua..................................|SpaceVim-layers-lang-lua|
69. lang#moonscript....................|SpaceVim-layers-lang-moonscript| 69. lang#markdown........................|SpaceVim-layers-lang-markdown|
70. lang#nim..................................|SpaceVim-layers-lang-nim| 70. lang#moonscript....................|SpaceVim-layers-lang-moonscript|
71. lang#nix..................................|SpaceVim-layers-lang-nix| 71. lang#nim..................................|SpaceVim-layers-lang-nim|
72. lang#ocaml..............................|SpaceVim-layers-lang-ocaml| 72. lang#nix..................................|SpaceVim-layers-lang-nix|
73. lang#pact................................|SpaceVim-layers-lang-pact| 73. lang#ocaml..............................|SpaceVim-layers-lang-ocaml|
74. lang#pascal............................|SpaceVim-layers-lang-pascal| 74. lang#pact................................|SpaceVim-layers-lang-pact|
75. lang#perl................................|SpaceVim-layers-lang-perl| 75. lang#pascal............................|SpaceVim-layers-lang-pascal|
76. lang#php..................................|SpaceVim-layers-lang-php| 76. lang#perl................................|SpaceVim-layers-lang-perl|
77. lang#pony................................|SpaceVim-layers-lang-pony| 77. lang#php..................................|SpaceVim-layers-lang-php|
78. lang#processing....................|SpaceVim-layers-lang-processing| 78. lang#pony................................|SpaceVim-layers-lang-pony|
79. lang#prolog............................|SpaceVim-layers-lang-prolog| 79. lang#processing....................|SpaceVim-layers-lang-processing|
80. lang#puppet............................|SpaceVim-layers-lang-puppet| 80. lang#prolog............................|SpaceVim-layers-lang-prolog|
81. lang#purescript....................|SpaceVim-layers-lang-purescript| 81. lang#puppet............................|SpaceVim-layers-lang-puppet|
82. lang#python............................|SpaceVim-layers-lang-python| 82. lang#purescript....................|SpaceVim-layers-lang-purescript|
83. lang#racket............................|SpaceVim-layers-lang-racket| 83. lang#python............................|SpaceVim-layers-lang-python|
84. lang#racket...............................|SpaceVim-layers-lang-red| 84. lang#racket............................|SpaceVim-layers-lang-racket|
85. lang#reason............................|SpaceVim-layers-lang-reason| 85. lang#racket...............................|SpaceVim-layers-lang-red|
86. lang#ring...................................|SpaceVim-layers-lang-r| 86. lang#reason............................|SpaceVim-layers-lang-reason|
87. lang#ring................................|SpaceVim-layers-lang-ring| 87. lang#ring...................................|SpaceVim-layers-lang-r|
88. lang#ruby................................|SpaceVim-layers-lang-ruby| 88. lang#ring................................|SpaceVim-layers-lang-ring|
89. lang#rust................................|SpaceVim-layers-lang-rust| 89. lang#ruby................................|SpaceVim-layers-lang-ruby|
90. lang#scala..............................|SpaceVim-layers-lang-scala| 90. lang#rust................................|SpaceVim-layers-lang-rust|
91. lang#scheme............................|SpaceVim-layers-lang-scheme| 91. lang#scala..............................|SpaceVim-layers-lang-scala|
92. lang#sh....................................|SpaceVim-layers-lang-sh| 92. lang#scheme............................|SpaceVim-layers-lang-scheme|
93. lang#smalltalk......................|SpaceVim-layers-lang-smalltalk| 93. lang#sh....................................|SpaceVim-layers-lang-sh|
94. lang#sml..................................|SpaceVim-layers-lang-sml| 94. lang#smalltalk......................|SpaceVim-layers-lang-smalltalk|
95. lang#swig...............................|SpaceVim-layers-lang-swift| 95. lang#sml..................................|SpaceVim-layers-lang-sml|
96. lang#swig................................|SpaceVim-layers-lang-swig| 96. lang#swig...............................|SpaceVim-layers-lang-swift|
97. lang#tcl..................................|SpaceVim-layers-lang-tcl| 97. lang#swig................................|SpaceVim-layers-lang-swig|
98. lang#toml................................|SpaceVim-layers-lang-toml| 98. lang#tcl..................................|SpaceVim-layers-lang-tcl|
99. lang#typescript....................|SpaceVim-layers-lang-typescript| 99. lang#toml................................|SpaceVim-layers-lang-toml|
100. lang#v.....................................|SpaceVim-layers-lang-v| 100. lang#typescript...................|SpaceVim-layers-lang-typescript|
101. lang#vala...............................|SpaceVim-layers-lang-vala| 101. lang#v.....................................|SpaceVim-layers-lang-v|
102. lang#vbnet.............................|SpaceVim-layers-lang-vbnet| 102. lang#vala...............................|SpaceVim-layers-lang-vala|
103. lang#vim.................................|SpaceVim-layers-lang-vim| 103. lang#vbnet.............................|SpaceVim-layers-lang-vbnet|
104. lang#vue.................................|SpaceVim-layers-lang-vue| 104. lang#vim.................................|SpaceVim-layers-lang-vim|
105. lang#wolfram.........................|SpaceVim-layers-lang-wolfram| 105. lang#vue.................................|SpaceVim-layers-lang-vue|
106. lang#xml.................................|SpaceVim-layers-lang-xml| 106. lang#wolfram.........................|SpaceVim-layers-lang-wolfram|
107. lang#xquery...........................|SpaceVim-layers-lang-xquery| 107. lang#xml.................................|SpaceVim-layers-lang-xml|
108. lang#zig.................................|SpaceVim-layers-lang-zig| 108. lang#xquery...........................|SpaceVim-layers-lang-xquery|
109. language server protocol......................|SpaceVim-layers-lsp| 109. lang#zig.................................|SpaceVim-layers-lang-zig|
110. leaderf...................................|SpaceVim-layers-leaderf| 110. language server protocol......................|SpaceVim-layers-lsp|
111. mail.........................................|SpaceVim-layers-mail| 111. leaderf...................................|SpaceVim-layers-leaderf|
112. operator.................................|SpaceVim-layers-operator| 112. mail.........................................|SpaceVim-layers-mail|
113. shell.......................................|SpaceVim-layers-shell| 113. operator.................................|SpaceVim-layers-operator|
114. ssh...........................................|SpaceVim-layers-ssh| 114. shell.......................................|SpaceVim-layers-shell|
115. test.........................................|SpaceVim-layers-test| 115. ssh...........................................|SpaceVim-layers-ssh|
116. tmux.........................................|SpaceVim-layers-tmux| 116. test.........................................|SpaceVim-layers-test|
117. tools#dash.............................|SpaceVim-layers-tools-dash| 117. tmux.........................................|SpaceVim-layers-tmux|
118. tools#mpv...............................|SpaceVim-layers-tools-mpv| 118. tools#dash.............................|SpaceVim-layers-tools-dash|
119. tools#zeal.............................|SpaceVim-layers-tools-zeal| 119. tools#mpv...............................|SpaceVim-layers-tools-mpv|
120. treesitter.............................|SpaceVim-layers-treesitter| 120. tools#zeal.............................|SpaceVim-layers-tools-zeal|
121. ui.............................................|SpaceVim-layers-ui| 121. treesitter.............................|SpaceVim-layers-treesitter|
122. unite.......................................|SpaceVim-layers-unite| 122. ui.............................................|SpaceVim-layers-ui|
123. unite.......................................|SpaceVim-layers-unite|
7. Usage....................................................|SpaceVim-usage| 7. Usage....................................................|SpaceVim-usage|
1. buffers-and-files..................|SpaceVim-usage-buffers-and-files| 1. buffers-and-files..................|SpaceVim-usage-buffers-and-files|
2. command-line-mode..................|SpaceVim-usage-command-line-mode| 2. command-line-mode..................|SpaceVim-usage-command-line-mode|
@ -1530,6 +1531,27 @@ Some layers are enabled by default. The following example shows how to disable
enable = false enable = false
< <
==============================================================================
CHINESE *SpaceVim-layers-chinese*
`chinese` layer provides Chinese specific function for SpaceVim. This layer is
not loaded by default, to use this layer, add following snippet into your
SpaceVim configuration file.
>
[[layers]]
name = 'chinese'
<
KEY BINDINGS
>
Key binding Description
SPC l c check with ChineseLinter
SPC x g t translate current word
SPC n c d convert chinese number to digit
<
============================================================================== ==============================================================================
AUTOCOMPLETE *SpaceVim-layers-autocomplete* AUTOCOMPLETE *SpaceVim-layers-autocomplete*