问题描述
我想创建一个键盘绑定,使用户可以在插入模式下键入内容,然后转到另一行,然后将用户键入的内容放在此处。其目的是用于LaTeX \begin
和\end
。这是我到目前为止所拥有的:
autocmd Filetype tex inoremap `d \begin{}<CR><++><CR>\end{}<esc>2kf{a
最后,a
允许用户在\begin
字段中输入内容,我想这样做,以便在退出插入模式时将输入的内容放入{{1 }}字段。老实说,我不知道该怎么做。任何帮助表示赞赏。
解决方法
这对于单个映射而言相当困难。
如果您真的想自己动手,我认为这里建议的最简单方法是提示用户输入环境类型(使用input()
),然后在插入块时使用该名称两次。 / p>
这应该有效:
function! LatexEnvironment()
let name = input('Environment name: ')
return "\\begin{".name."}\r\\end{".name."}\<C-o>O"
endfunction
autocmd Filetype tex inoremap <expr> `d LatexEnvironment()
一种更好的方法是使用片段引擎。
通常很容易重复地支持多个字段,您甚至可以为代码段引擎中的字段设置默认值。
例如,在UltiSnips中,您可以使用以下代码段:
snippet "\\?b(egin)?" "begin{} / end{}" br
\begin{${1:something}}
${0:${VISUAL}}
\end{$1}
endsnippet
实际上是standard snippet库中的honza/vim-snippets。
,停止这种疯狂,并在下面使用所有这些内容:
- vim-snippets
- UltiSnips
- 最重要的是VimTex。