Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
200 lines
7.6 KiB
VimL
200 lines
7.6 KiB
VimL
"=============================================================================
|
||
" chinese.vim --- SpaceVim chinese layer
|
||
" Copyright (c) 2016-2024 Wang Shidong & Contributors
|
||
" Author: Wang Shidong < wsdjeg@outlook.com >
|
||
" URL: https://spacevim.org
|
||
" 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
|
||
let plugins = [
|
||
\ ['yianwillis/vimcdoc' , {'merged' : 0}],
|
||
\ ['NamelessUzer/Vim-Natural-Language-Number-Translator' , {'merged' : 0}],
|
||
\ ['voldikss/vim-translator' , {'merged' : 0, 'on_cmd' : ['Translate', 'TranslateW', 'TranslateR', 'TranslateX']}],
|
||
\ ]
|
||
call add(plugins, [g:_spacevim_root_dir . 'bundle/ChineseLinter.vim' , {'merged' : 0, 'on_cmd' : 'CheckChinese', 'on_ft' : ['markdown', 'text']}])
|
||
if SpaceVim#layers#isLoaded('ctrlp')
|
||
call add(plugins, ['vimcn/ctrlp.cnx', {'merged' : 0}])
|
||
endif
|
||
return plugins
|
||
endfunction
|
||
|
||
function! SpaceVim#layers#chinese#config() abort
|
||
if has_key(g:_spacevim_mappings_space.x, 't')
|
||
let g:_spacevim_mappings_space.x.t.name = '+Transpose/Translate'
|
||
else
|
||
let g:_spacevim_mappings_space.x.t = {'name' : '+Translate'}
|
||
endif
|
||
call SpaceVim#mapping#space#def('nnoremap', ['x', 't', 't'], 'Translate' , 'translate-current-word' , 1)
|
||
if !has_key(g:_spacevim_mappings_space.x, 'g')
|
||
let g:_spacevim_mappings_space.x.g = {'name' : '+Grammarous'}
|
||
endif
|
||
call SpaceVim#mapping#space#def('nnoremap', ['x', 'g', 'c'] , 'CheckChinese', 'check-with-ChineseLinter', 1)
|
||
let g:_spacevim_mappings_space.n.c = {'name' : '+Convert'}
|
||
call SpaceVim#mapping#space#def('nmap', ['n', 'c', 'd'], '<Plug>ConvertChineseNumberToDigit', 'convert Chinese number to digit', 0, 1)
|
||
call SpaceVim#mapping#space#def('nmap', ['n', 'c', 'z'], '<Plug>ConvertDigitToChineseNumberLower', 'convert digit to Lower Chinese number', 0, 1)
|
||
call SpaceVim#mapping#space#def('nmap', ['n', 'c', 'Z'], '<Plug>ConvertDigitToChineseNumberUpper', 'convert digit to Upper Chinese number', 0, 1)
|
||
" do not load vimcdoc plugin
|
||
let g:loaded_vimcdoc = 1
|
||
endfunction
|
||
|
||
function! SpaceVim#layers#chinese#health() abort
|
||
call SpaceVim#layers#chinese#plugins()
|
||
call SpaceVim#layers#chinese#config()
|
||
return 1
|
||
endfunction
|
||
|
||
|
||
" 定义快捷键映射
|
||
nnoremap <silent> <Plug>ConvertChineseNumberToDigit :call <sid>ConvertChineseNumberToDigit('normal')<cr>
|
||
vnoremap <silent> <Plug>ConvertChineseNumberToDigit :call <sid>ConvertChineseNumberToDigit('visual')<cr>
|
||
|
||
" 函数定义
|
||
function! s:ConvertChineseNumberToDigit(mode) range
|
||
let save_cursor = getcurpos()
|
||
let save_register = @k
|
||
if a:mode == 'normal'
|
||
" 正常模式处理
|
||
let cword = expand('<cword>')
|
||
let rst = substitute(cword, Zh2Num#getZhNumPattern(), '\=Zh2Num#Translator(submatch(0))', "g")
|
||
if rst != cword
|
||
let @k = rst
|
||
normal! viw"kp
|
||
endif
|
||
else
|
||
" 可视模式处理
|
||
normal! gv
|
||
if mode() == "\<C-V>"
|
||
" 块选择模式
|
||
let [line_start, column_start] = getpos("'<")[1:2]
|
||
let [line_end, column_end] = getpos("'>")[1:2]
|
||
if column_end < column_start
|
||
let [column_start, column_end] = [column_end, column_start]
|
||
endif
|
||
for line_num in range(line_start, line_end)
|
||
let line = getline(line_num)
|
||
let line_utf8 = iconv(line, &encoding, 'UTF-8')
|
||
let selectedText = line_utf8[column_start - 1: column_end - 1]
|
||
let translatedText = substitute(selectedText, Zh2Num#getZhNumPattern(), '\=Zh2Num#Translator(submatch(0))', 'g')
|
||
let newLine = line[:column_start - 2] . translatedText . line[column_end:]
|
||
call setline(line_num, newLine)
|
||
endfor
|
||
else
|
||
" 其他可视模式
|
||
normal! "ky
|
||
let selectedText = iconv(@k, &encoding, 'UTF-8')
|
||
let translatedText = substitute(selectedText, Zh2Num#getZhNumPattern(), '\=Zh2Num#Translator(submatch(0))', 'g')
|
||
if translatedText != selectedText
|
||
call setreg('k', translatedText)
|
||
normal! gv"kp
|
||
endif
|
||
endif
|
||
endif
|
||
call setpos('.', save_cursor)
|
||
let @k = save_register
|
||
endfunction
|
||
|
||
nnoremap <silent> <Plug>ConvertDigitToChineseNumberLower :call <sid>ConvertDigitToChineseNumber('normal', "lower")<cr>
|
||
vnoremap <silent> <Plug>ConvertDigitToChineseNumberLower :call <sid>ConvertDigitToChineseNumber('visual', "lower")<cr>
|
||
|
||
nnoremap <silent> <Plug>ConvertDigitToChineseNumberUpper :call <sid>ConvertDigitToChineseNumber('normal', "upper")<cr>
|
||
vnoremap <silent> <Plug>ConvertDigitToChineseNumberUpper :call <sid>ConvertDigitToChineseNumber('visual', "upper")<cr>
|
||
|
||
function! s:ConvertDigitToChineseNumber(mode, caseType) abort
|
||
let save_cursor = getcurpos()
|
||
let save_register = @k
|
||
let cword = expand('<cword>')
|
||
if a:mode == 'normal'
|
||
if !empty(cword)
|
||
let rst = substitute(cword, Num2Zh#getNumberPattern(), '\=Num2Zh#Translator(submatch(0), "'. a:caseType .'")', "g")
|
||
if rst != cword
|
||
let @k = rst
|
||
normal! viw"kp
|
||
endif
|
||
endif
|
||
" 如果是block模式,则特别处理
|
||
elseif a:mode == 'visual'
|
||
normal! gv
|
||
if mode() == "\<C-V>"
|
||
let [line_start, column_start] = getpos("'<")[1:2]
|
||
let [line_end, column_end] = getpos("'>")[1:2]
|
||
if column_end < column_start
|
||
let [column_start, column_end] = [column_end, column_start]
|
||
endif
|
||
for line_num in range(line_start, line_end)
|
||
let line = getline(line_num)
|
||
" 将行文本转换为UTF-8编码
|
||
let line_utf8 = iconv(line, &encoding, 'UTF-8')
|
||
let selectedText = line_utf8[column_start - 1: column_end - 1]
|
||
let translatedText = substitute(selectedText, Num2Zh#getNumberPattern(), '\=Num2Zh#Translator(submatch(0), "' . a:caseType . '")', 'g')
|
||
let newLine = line[:column_start - 2] . translatedText . line[column_end:]
|
||
call setline(line_num, newLine)
|
||
endfor
|
||
else
|
||
" 对其他模式的处理
|
||
if mode() == 'line'
|
||
normal! '[V']
|
||
elseif mode() == 'char'
|
||
normal! `[v`]
|
||
elseif mode() ==? 'v'
|
||
normal! gv
|
||
else
|
||
normal! '[v']
|
||
endif
|
||
|
||
" 获取选择的文本,将其保存在寄存器t中
|
||
normal! "ky
|
||
let selectedText = iconv(@k, &encoding, 'UTF-8')
|
||
|
||
" 转换文本
|
||
let translatedText = substitute(selectedText, Num2Zh#getNumberPattern(), '\=Num2Zh#Translator(submatch(0), "' . a:caseType . '")', 'g')
|
||
|
||
if translatedText != selectedText
|
||
" 替换原文本
|
||
call setreg('k', translatedText)
|
||
normal! gv"kp
|
||
endif
|
||
endif
|
||
endif
|
||
call setpos('.', save_cursor)
|
||
let @k = save_register
|
||
endfunction
|
||
|
||
" function() wrapper
|
||
if v:version > 703 || v:version == 703 && has('patch1170')
|
||
function! s:_function(fstr) abort
|
||
return function(a:fstr)
|
||
endfunction
|
||
else
|
||
function! s:_SID() abort
|
||
return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$')
|
||
endfunction
|
||
let s:_s = '<SNR>' . s:_SID() . '_'
|
||
function! s:_function(fstr) abort
|
||
return function(substitute(a:fstr, 's:', s:_s, 'g'))
|
||
endfunction
|
||
endif
|
||
|
||
" vim:set et nowrap sw=2 cc=80:
|