您尚未登录。

#1 2018-05-30 18:17:24

Mr.I
路人丙
所在地: Kerbal
注册时间: 2015-08-29
帖子: 308

vim 里用 map 关联的函数有什么办法能在 visual 模式下避免被多次调用吗

比如,像下面这样在 vimrc 里面写了一个函数,并把它 map 到某个按键上

function Test()
    echo "Text"
endfunction

map <leader>j :call Test()<CR>

然后,当我在 visual 模式下使用 <leader>j 去调用这个函数的时候,vim 总是会自动给这个函数加上一个作用范围 '<,'>

最终,实际被执行的是这个:

'<,'>call Test()

于是这个函数就被执行了多次了,实际上我只需要执行一次这个函数,有什么好办法可以只执行一次(或避免被加上 '<,'>)吗?

最近编辑记录 Mr.I (2018-05-30 18:19:08)

离线

#2 2018-05-30 19:09:34

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: vim 里用 map 关联的函数有什么办法能在 visual 模式下避免被多次调用吗

:help function-range

离线

#3 2018-05-31 09:38:05

Mr.I
路人丙
所在地: Kerbal
注册时间: 2015-08-29
帖子: 308

Re: vim 里用 map 关联的函数有什么办法能在 visual 模式下避免被多次调用吗

依云 说:
:help function-range

从help里面找到答案了,原来还有这样的特殊参数,写上 range 之后函数前面的作用范围就变成可以在函数内访问的参数了。好独特的处理方式。

function Test() range
    ....
endfunction

离线

#4 2018-05-31 16:51:08

Mr.I
路人丙
所在地: Kerbal
注册时间: 2015-08-29
帖子: 308

Re: vim 里用 map 关联的函数有什么办法能在 visual 模式下避免被多次调用吗

人生中的第一个 vim 插件,在依云大大的帮助下完成了

虽然只是个玩具,不过迈出第一步好有成就感 big_smile

最近编辑记录 Mr.I (2019-11-19 18:55:03)

离线

页脚