如何编写Vim宏为选中的LaTeX代码自动添加环境包围标记
Vim行可视模式包裹LaTeX环境实现方案
功能目标:行可视化模式选中多行LaTeX代码后,自动在选中段首尾插入指定环境的起止标签,完成格式转换,转换效果如下:
原始选中代码:
formula转换后输出:
\begin{env} formula \end{env}
方案1:录制固定环境宏(适合高频单一环境场景)
不需要改配置,原生Vim直接操作即可:
- 录制步骤:
- 按
Esc回到普通模式,按qa启动宏录制,宏将存储在a寄存器(可替换为b/c等任意字母寄存器) - 按
V进入行可视化模式,任意选几行测试文本 - 按
`<跳转至选中段第一行行首,按O在选中段上方新开一行,输入\begin{env},将env替换为你高频使用的环境名(如align、equation、itemize) - 按
Esc退回普通模式,按`>跳转至选中段最后一行行尾,按o在选中段下方新开一行,输入\end{env} - 按
q结束录制
- 按
- 使用方法:后续需要包裹内容时,行可视化选中目标段,直接按
@a即可一键完成包裹。
方案2:自定义交互映射(推荐,支持任意环境)
把以下配置写入你的.vimrc文件,重启Vim生效,不需要安装任何第三方插件:
vnoremap <silent> <leader>b :<C-U>let env_name = input('请输入LaTeX环境名: ')<CR>`<O\begin{<C-R>=env_name<CR>}<CR>`>o\end{<C-R>=env_name<CR>}<CR>
- 映射说明:
- 触发快捷键默认是
\b(Vim默认leader键为\,可根据自己的配置修改) - 触发后底部命令行会提示输入环境名,输入后按回车即可自动完成首尾标签插入
- 代码逻辑:自动定位选中段首尾位置,分别在上、下新行插入对应起止标签,不会破坏原有代码的缩进结构
- 触发快捷键默认是
- 使用方法:
- 按
V进入行可视化模式,选中需要包裹的代码段 - 按
\b触发功能,在底部提示栏输入需要的环境名(如env、tabular)后回车 - 自动完成格式转换,效果和需求示例完全一致。
- 按
可选优化配置
如果需要包裹后自动格式化代码缩进,可以在上述映射的末尾加上gv=,修改后完整配置如下:
vnoremap <silent> <leader>b :<C-U>let env_name = input('请输入LaTeX环境名: ')<CR>`<O\begin{<C-R>=env_name<CR>}<CR>`>o\end{<C-R>=env_name<CR>}<CR>gv=
如果需要绑定固定环境的快捷键,比如按\a直接给选中段加align环境包裹,可以加单独映射:
vnoremap <silent> <leader>a `<O\begin{align}<CR>`>o\end{align}<CR>gv=
内容的提问来源于stack exchange,提问作者Alexander Ushakov
相关产品推荐
相关产品推荐

