首页 > 解决方案 > 有没有办法让 Vim 函数为你创建映射?

问题描述

我正在尝试在 Vim 中创建一个能够为我创建映射的函数(因此我不必在我的配置中一遍又一遍地输入非常相似的命令)。

以这些映射为例:

onoremap <buffer> in( :<c-u>execute "normal! /(\r:noh\rvi("<cr>
onoremap <buffer> in[ :<c-u>execute "normal! /[\r:noh\rvi["<cr>
onoremap <buffer> in{ :<c-u>execute "normal! /{\r:noh\rvi{"<cr>

我希望能够做类似的事情:

CreateNextIn('(')
CreateNextIn('[')
CreateNextIn('{')

标签: vim

解决方案


是的你可以。它应该是这样的:

function! CreateNextIn(foo) abort
  execute 'onoremap <buffer> in'.a:foo.' :<c-u>execute "normal! /[\r:noh\rvi'.a:foo.'"<cr>'
endfunction

然后你用它创建你的映射,比如:

call CreateNextIn('(')
call CreateNextIn('[')
call CreateNextIn('{')

推荐阅读