在vim中使用execute for visual命令

在vim中使用execute for visual命令,vim,Vim,我知道这一定很简单 为什么vnoremap rl di[pa]将所选文本用括号括起来,但是: vnoremap <leader>rl :call VisAddRefLink()<CR> function! VisAddRefLink() execute "normal! di[\<esc>pa]" endfunction vnoremap rl:调用VisAddRefLink() 功能!VisAddRefLink() 执行“正常!di[\pa]”

我知道这一定很简单

为什么
vnoremap rl di[pa]
将所选文本用括号括起来,但是:

vnoremap <leader>rl :call VisAddRefLink()<CR>

function! VisAddRefLink()
    execute "normal! di[\<esc>pa]"
endfunction
vnoremap rl:调用VisAddRefLink()
功能!VisAddRefLink()
执行“正常!di[\pa]”
端功能
不是吗


感谢您的帮助

您需要使函数处理一个范围。实现这一点的一种方法是:

vnoremap <leader>rl :call VisAddRefLink()<CR>

function! VisAddRefLink() range
   exe a:firstline . "normal! ^i["
   exe a:lastline . "normal! $a]"
endfunction
这首先使用
结束视觉选择。然后它执行一个只运行一次的普通命令。如果视觉选择被保留,那么它将为视觉选择中的每一行运行一次。一旦它运行,一旦它

“$
移动到视觉选择最后一行的最后一个字符

x2pr]
与前面相同,但方向相反


和往常一样,给猫剥皮的方法不止一种,尤其是vimscript。当您了解更多信息时,您会看到许多完成任务的可能性。

您需要让函数处理一个范围。实现这一点的一种方法是:

vnoremap <leader>rl :call VisAddRefLink()<CR>

function! VisAddRefLink() range
   exe a:firstline . "normal! ^i["
   exe a:lastline . "normal! $a]"
endfunction
这首先使用
结束视觉选择。然后它执行一个只运行一次的普通命令。如果视觉选择被保留,那么它将为视觉选择中的每一行运行一次。一旦它运行,一旦它

“$
移动到视觉选择最后一行的最后一个字符

x2pr]
与前面相同,但方向相反

和往常一样,给猫剥皮的方法不止一种,尤其是vimscript。随着学习的深入,你会发现很多成功的可能性。

试试以下方法:

vnoremap <leader>rl :<C-u>call VisAddRefLink()<CR>

function! VisAddRefLink()
    execute "normal! gvdi[\<esc>pa]"
endfunction
vnoremap rl:调用VisAddRefLink()
功能!VisAddRefLink()
执行“正常!gvdi[\pa]”
端功能
调用前面的
避免映射插入
”尝试以下操作:

vnoremap <leader>rl :<C-u>call VisAddRefLink()<CR>

function! VisAddRefLink()
    execute "normal! gvdi[\<esc>pa]"
endfunction
vnoremap rl:调用VisAddRefLink()
功能!VisAddRefLink()
执行“正常!gvdi[\pa]”
端功能

调用
前面的
避免了映射插入
,同样,您可以使用
而不是另一个示例中的
。我可能把事情搞得太复杂了!:)类似地,您可以使用
而不是另一个示例中的
。我可能把事情搞得太复杂了!:)非常感谢您的输入Conner,它工作了,但是我使用了Ingo的解决方案,因为它看起来更简单。非常感谢您的输入Conner,它工作了,但是我使用了Ingo的解决方案,因为它看起来更简单。