vim - 如何在vim中进行键绑定(bind),让用户插入,重复插入?

标签 vim latex vi keymapping

我想制作一个键绑定(bind),让用户在插入模式下键入内容,然后转到另一行,并将用户键入的内容放在那里。这样做的目的是为了 LaTeX \begin\end .这是我到目前为止所拥有的:

autocmd Filetype tex inoremap `d \begin{}<CR><++><CR>\end{}<esc>2kf{a
最后,a让用户输入 \begin字段,我想这样当我退出插入模式时,我输入的内容被放入 \end field 。老实说,我不知道该怎么做。任何帮助表示赞赏。

最佳答案

这对于单个映射来说是相当困难的。
如果您真的想自己动手,我认为我可以在这里建议的最简单的方法是提示用户输入环境类型(使用 input() ),然后在插入 block 时使用该名称两次。
这应该有效:

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 - 如何在vim中进行键绑定(bind),让用户插入,重复插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63758755/

相关文章:

vim - vim 上有 cit、dit、yit(更改、删除、猛拉标签内)...是否有类似 pit(粘贴到标签内?)

layout - pdflatex中的页边距变化

vim - 为什么 Vim 会自动将逗号分隔的 CSV 更改为管道?

batch-file - 使用语法高亮在 Unix 中打开 .bat 文件

vim - 如何在 Vim 中交叉重做,即在撤消后进行一些编辑后重做更改?

vim - 即使文件模式明确为 DOS,gVim 也会显示回车符 (^M)

c++ - Vim:将连续的行与空格对齐

vim - vim 中类型推断的 ctags 跳转可能吗?

latex - 我如何才能在 Latex 中将其他三位作者中的一位作者居中对齐

latex - 如何减少 latex 中图形之间的垂直间距?