因此,我使用Vim在工作中编写报告,报告基本上是我们反复编写的一堆“常见问题”,因此它们是模板化的。这些模板具有占位符块{==BLOCK==}
,以确保人们根据需要修改内容,因此,这是一个示例:
The test revealed that it was possible to access {==sensitive data==},
as shown in the examples below...
该块可能需要修改,也可以不修改。因此,我的想法是,我正在编辑常见问题,我看到有3或4个块,例如示例中的块,我想按下[leader] b,最后得到模板文本在可视模式下选择的第一个块,但周围没有{==
和==}
。
我尝试了几件事,但是我没有走太远,有什么建议吗?
谢谢!
答案 0 :(得分:2)
您可以定义以下功能:
function! VisualSelect()
call search("==}")
norm hvT=
endfunction
nnoremap <leader>b :call VisualSelect()<cr>
vnoremap <leader>b Ol<esc>:call VisualSelect()<cr>
这将直观地选择{==
和==}
之间的内容。重复输入<leader>b
将选择下一个出现的地方。
答案 1 :(得分:0)
大多数模板/摘要扩展插件都支持此功能。
使用我的lh-brackets插件,您可以执行
:SetMarkers {== ==}
,然后使用vim的CTRL+J
或gvim的META-DEL
从一个占位符跳到下一个占位符。 lh-brackets不会加载/扩展模板。 mu-template将添加此层。
如果相反,您选择使用一种较为流行的代码段插件,则肯定会有一个选项可以更改占位符的语法,但我不知道。
穷人的解决方案如下:
nnoremap <c-j> <c-\><c-n>/{==.*==}<cr>v/==}/e<cr><c-g>
snoremap <c-j> <c-\><c-n>/{==.*==}<cr>v/==}/e<cr><c-g>
但是它不会处理恢复搜索模式,光标已经位于占位符之内的情况,等等。
编辑:自动删除占位符标记的版本是
nnoremap <c-j> <c-\><c-n>/{==.*==}<cr>v/==}/e<cr>s<c-r>=matchstr(@", '{==\zs.*\ze==}')<cr><esc>gv6h<c-g>
snoremap
中的答案 2 :(得分:0)
简而言之:
/{==.*==}<cr>
它的作用:
1。)找到图案
xxx
2。)删除第一个“ {==“
vt=
3。)视觉选择文本,直到第一个=为止(也许也可以针对使用正则表达式进行优化,而不是简单地搜索下一个=)
/==}<cr>
4。)转到结束序列
xxx
5。)将其删除
gv
6。)再次选择您的最后选择
{{1}}
答案 3 :(得分:0)
我已经找到了一种基于@snap所说的方式,我最终将代码添加到Python插件中以通过它运行它,因为这与我尝试做的事情更加吻合,如以下代码段所示:
@neovim.command('VimisEditTemplateBlock')
def urlify(self):
"""Search next codify block and prepare for editing"""
[...]
self.nvim.command('call search("{==")') # Find beginning of codify block
self.nvim.command('norm xxx') # Delete {==
self.nvim.command('norm vf=') # Select the inner text
self.nvim.command('norm v')
self.nvim.command('norm xxxgvh') #Delete ==} and leave the inner text selected in Visual Mode