gpt4 book ai didi

vim - 删除 unicode 组合字符 - vim

转载 作者:行者123 更新时间:2023-12-02 05:52:44 25 4
gpt4 key购买 nike

我发现了这个很棒的技巧,如何在 gVim 中为 unicode 字符实现删除线 - http://vim.wikia.com/wiki/Create_underlines,_overlines,_and_strikethroughs_using_combining_characters

它对我来说效果很好,但我一直在创建“反向函数”最终结果,我想实现的结果是按例如t 删除线字符并重复此操作将从字符中删除删除线。我想我能够创建这样的函数,但我缺少一个核心的东西,那就是如何删除组合字符。在提到的文章中提到您可以

: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

我真的很感激:)

最佳答案

此函数要么删除传递的组合字符,要么将其添加到文本中。

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")

关于vim - 删除 unicode 组合字符 - vim,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46141062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com