我找到了一个很棒的提示如何为gVim中的unicode字符实现删除线 - http://vim.wikia.com/wiki/Create_underlines,_overlines,_and_strikethroughs_using_combining_characters
它对我很有用,但我仍然坚持创造"反向功能"我想要达成的最终结果将是例如t to striketrough characters并重复这个将删除字符中的striketrough。 我想我可以创建这样的功能,但我错过了一个核心的东西,那就是如何删除组合字符。在提到的文章中提到你可以
:set delcombine
可以让您删除' x'只有组合字符。但这不是我想做的事情:)
那么是否有人能够更改该文章中所述的以下脚本以添加其他功能以从选择中删除删除线?
" modify selected text using combining diacritics
command! -range -nargs=0 Overline call s:CombineSelection(<line1>, <line2>, '0305')
command! -range -nargs=0 Underline call s:CombineSelection(<line1>, <line2>, '0332')
command! -range -nargs=0 DoubleUnderline call s:CombineSelection(<line1>, <line2>, '0333')
command! -range -nargs=0 Strikethrough call s:CombineSelection(<line1>, <line2>, '0336')
function! s:CombineSelection(line1, line2, cp)
execute 'let char = "\u'.a:cp.'"'
execute a:line1.','.a:line2.'s/\%V[^[:cntrl:]]/&'.char.'/ge'
endfunction
我真的很感激:)
答案 0 :(得分:0)
此功能要么删除传递的组合字符,要么将其添加到文本中。
function! ToggleCombining( character, text )
let l:cleanedText = ''
let l:idx = 0
while l:idx < len(a:text)
let l:codepoint = nr2char(char2nr(a:text[l:idx :]))
if l:codepoint !=# a:character
let l:cleanedText .= l:codepoint
endif
let l:idx += len(l:codepoint)
endwhile
if l:cleanedText !=# a:text
return l:cleanedText
else
return substitute(a:text, '[^[:cntrl:]]', '&' . a:character, 'g')
endif
endfunction
调用
:call ToggleCombining("\u0332", "sample text")