在vim中使用占位符
给定一个多次出现特定占位符的vim文档,比如说在vim中使用占位符,vim,Vim,给定一个多次出现特定占位符的vim文档,比如说,我希望能够从文档的开头跳到下一个占位符:更明确地说,如果文档由 $\frac{}{}$ 我想按一个键,这样第一个占位符就会被删除,即 $\frac{}{}$ 其中,光标位于占位符位置,vim处于插入模式 我知道vim latex插件实现了这种行为,但只需要这一个特性。我尝试使用vim的/-search,但没有正确定位光标。 提前谢谢你的建议 使用a可能会有所帮助 在您的示例中,使用/搜索占位符。然后,gg将带您进入文档的开头 然后以qa为例启动宏。
,我希望能够从文档的开头跳到下一个占位符:更明确地说,如果文档由
$\frac{}{}$
我想按一个键,这样第一个占位符就会被删除,即
$\frac{}{}$
其中,光标位于占位符位置,vim处于插入模式
我知道vim latex插件实现了这种行为,但只需要这一个特性。我尝试使用vim的/-search
,但没有正确定位光标。
提前谢谢你的建议 使用a可能会有所帮助
在您的示例中,使用/
搜索占位符。然后,gg
将带您进入文档的开头
然后以
qa
为例启动宏。使用n
转到占位符的下一个匹配项。那么,ca这个映射有帮助吗
:nmap %% /<%%><cr>ni
:nmap%%/ni
它执行搜索(/
),使用n
重复搜索以跳过第一个占位符并转到第二个占位符。然后它将(i
)切换到插入模式。实际上提供了此功能
实现此功能的想法是:
要查找占位符的模式,请选择search()
,以了解是否已找到某个内容:否则不应进行选择
实际上,正确的调用可能需要几个调用<代码> SexChuffes()/Cux>来处理光标位于占位符中间的情况,参见<代码>搜索(…,“C”)< /C> >是不够的;
选择此模式--v
+移动3
最后进入选择模式(gh
)或移除占位符并进入插入模式(s
)
如果您的占位符模式正好是
,那么它的实现将非常简单
" I factorize common code without introducing the exact keybinding
" NB: we have to use the ancestor of map-<expr> as the later doesn't
" permit to move the cursor -> we execute the expression register: :h @=
" NB: As said earlier a correct implementation would require to call searchpair()
" twice in case the cursor is within a placeholder, see lh-brackets code
nnoremap <silent> <Plug>(jump-next) @=(search('<%%>') > 0 ? "v3l<c-g>" : '')<cr>
vmap <silent> <Plug>(jump-next) <c-\><c-n><Plug>(jump-next)
imap <silent> <Plug>(jump-next) <c-\><c-n><Plug>(jump-next)
" Tests shall be done in a real plugin before binding to the chosen shortcut: µ, <f3>, <c-j>, <tab>...
nmap <silent> µ <Plug>(jump-next)
vmap <silent> µ <Plug>(jump-next)
imap <silent> µ <Plug>(jump-next)
“我对普通代码进行分解,而不引入精确的键绑定
“注意:我们必须使用map的祖先,因为后者没有
“允许移动光标->我们执行表达式register::h@=
“注意:如前所述,正确的实现需要调用searchpair()
“两次如果光标位于占位符内,请参见左括号代码
nnoremap(跳转下一步)@=(搜索(“”)>0?“v3l”:“”)
vmap(下一跳)(下一跳)
imap(下一跳)(下一跳)
“在绑定到所选快捷方式之前,应在真实插件中进行测试:µ。。。
nmapµ(跳转下一步)
vmapµ(跳转下一步)
imapµ(跳转下一步)
如果有时它会变成
,那么我会明确建议使用左括号或任何已经解决了这一问题的代码段引擎——例如,通过在本地使用VimL:let s:marker_open='
(我还在维护依赖于左括号的mu模板)
注意:左侧括号还提供环绕(非侵入式)和括号对插入(可禁用:添加:在中设置g:cb_no_default_括号=1
。vimrc
)是的,这正是我想要的功能。但是,我更喜欢使用键,因为我想经常使用此功能在代码中跳跃。但是你的答案应该在键映射中工作,而不是在宏中使用相同的命令,对吗?是的,我认为@phd answer在这方面非常出色。谢谢,但是你所说的搜索()是什么意思-函数?只是vim的/-search?如何在映射或vim中调用搜索函数?使用/-search您的答案似乎完全正常。如果/
失败,您将得到一个错误。使用nnoremapµ@=(search(“”)>=0?“v3l”:“”)
,它变得愚蠢抱歉我的愚蠢问题,但我无法让它工作。我编辑了我的.vimrc文件并添加了一行nnoremapµ@=(search(“”)>=0?”v3l:“”)
我以前从未在任何命令中使用过此mu符号…µ
只是我在测试映射时使用的键盘上的一个键。请随意使用,如
,进行导航。顺便说一句,还需要定义插入和视觉模式映射(它们是相同的,只是在前面转义)啊,我明白了;这太棒了,效果绝对不错;也许这里应该使用>0而不是>=0。