SirVer/ultisnips是一个用于在 Vim 中编写脚本的高效插件。但是任何人都知道Ultisnips 如何在 Vim 中立即转换文本,如图 gif 所示。此示例中的 Ultisnips 正在将文本“This is the subtitle”中的每个字符在输入字符后立即转换为减号。
问问题
426 次
2 回答
1
它看起来像什么
据我了解,他们看起来像是在作弊;)这里有一个提示,可以为您提供基本的想法。所以第一步,输入一些文字。
然后你就完成yyp
了s/./_/g
或者s/./-/g
:
它是如何完成的(嗯,很可能)
所以他们基本上是在拦截每个符号插入。但是怎么做?看起来他们正在对特定事件使用自动命令,即CursorMovedI,它是“在光标在插入模式下移动后”触发的。
如果您查看源代码,您可以轻松找到自动命令绑定。
替代方法
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
但正如您所见,这并不理想:
于 2015-07-16T02:39:04.583 回答
0
你可以像这样使用ultisnips :
snippet ssec "Subsection" b
${1:${VISUAL:Subsection name}}
`!p snip.rv = rst_char_len(t[1])*'-'`
上面的代码适用于rst.snippets
具有“ssec”小节的代码,但您必须查看整个代码,因为在同一文件中定义了函数“rst_char_len”以提供您正在键入的字符串的长度。可以在此处阅读允许我们执行此特技的全局定义。
于 2017-01-03T20:45:53.630 回答