如何在vim中创建一个键绑定,让用户插入,重复插入?

问题描述

我想创建一个键盘绑定,使用户可以在插入模式下键入内容,然后转到另一行,然后将用户键入的内容放在此处。其目的是用于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

,

停止这种疯狂,并在下面使用所有这些内容:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...