Ultisnips如何在Vim中即时转换文本?

Ultisnips如何在Vim中即时转换文本?,vim,transform,ultisnips,Vim,Transform,Ultisnips,是一个非常高效的插件,用于在Vim中编写脚本。但是任何人都知道Ultisnips如何在Vim中即时转换文本,如gif所示。本例中的Ultisnips在输入字符后立即将文本“this is the subtitle”中的每个字符转换为减号 它看起来像什么 据我所知,他们似乎在作弊;) 这里有一个提示可以给你一个基本的想法。 第一步,输入一些文本。 然后只要yyp和s//\ug就可以了 或s/-/g: 它是如何完成的(很可能是这样的) 因此,它们基本上是截取每个符号插入。 但是怎么做呢?看起来他

是一个非常高效的插件,用于在Vim中编写脚本。但是任何人都知道Ultisnips如何在Vim中即时转换文本,如gif所示。本例中的Ultisnips在输入字符后立即将文本“this is the subtitle”中的每个字符转换为减号


它看起来像什么

据我所知,他们似乎在作弊;) 这里有一个提示可以给你一个基本的想法。 第一步,输入一些文本。 然后只要
yyp
s//\ug
就可以了

s/-/g

它是如何完成的(很可能是这样的)

因此,它们基本上是截取每个符号插入。 但是怎么做呢?看起来他们正在为特定事件(即for)使用自动命令,该事件是“在插入模式下移动光标后”触发的

如果查看,可以很容易地找到自动命令绑定

替代方法

VIM是一个控制台文本编辑器,这种文本格式在终端中并没有得到广泛支持。不过也有一些解决方法,比如使用特殊的utf-8字符(当然,文本应该相应地进行编码)。可用于此方法的代码段:

" 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
“使用组合变音符号修改所选文本
命令!-范围-nargs=0跨线调用s:CombineSelection(,'0305')
命令!-范围-nargs=0下划线调用s:CombineSelection(,'0332')
命令!-范围-nargs=0双下划线调用s:CombineSelection(,'0333')
命令!-范围-nargs=0删除线通过调用s:CombineSelection(,'0336')
函数!s:组合选择(第1行、第2行、cp)
执行'let char=“\u.a:cp.”
执行a:line1.','.a:line2.s/\%V[^[:cntrl:]/&.char.'/ge'
端功能
但正如你所见,这并不理想:

您可以使用以下内容:

snippet ssec "Subsection" b
${1:${VISUAL:Subsection name}}
`!p snip.rv = rst_char_len(t[1])*'-'`
上面的代码用于具有“ssec”小节的
rst.snippets
但是您必须看到整个代码,因为函数“rst_char_len”是在同一个文件中定义的,用于提供您正在键入的字符串的长度
可以阅读。

是的,我理解这一点。那么如何实现它,以便每次我键入字符时都能执行vim替换?如果文本正在更改或未更改,是否应该有线程来观察行?谢谢你的回答,这非常鼓舞人心。但我的问题主要是因为需要解释y当输入字符时,Vim可以进行即时更改。Vim如何能够立即进行替换?@Life稍等片刻,我将添加解释)谢谢!我将等待并感觉到它有点超出我目前对Vim的理解。@shabunc是的,它真的帮助了我!我应该学习一些autocmd。谢谢!@shabunc