分页: 1 / 1

vim 执行一自定义函数如何保持状态

发表于 : 2010-12-02 2:08
自由建客
我在一脚本中有

代码: 全选

noremap <F10> :call <SID>Main()<CR>
inoremap <F10> <Esc>:call <SID>Main()<CR>
我想,若之前是插入模式,在按 F10 执行完 Main() 后恢复到插入模式。
若之前是可视模式或选择模式,在按 F10 执行完 Main() 后恢复到可视或选择模式,且保持原来的选择范围依旧被选。
是需要改写 map 和 Main() 两方面吗,如何该?

Re: vim 执行一自定义函数如何保持状态

发表于 : 2010-12-02 12:33
lilydjwg
这样?

代码: 全选

nnoremap <F10> :call <SID>Main()<CR>
inoremap <F10> <Esc>:call <SID>Main()<CR>i
vnoremap <F10> <Esc>:call <SID>Main()<CR>gv

Re: vim 执行一自定义函数如何保持状态

发表于 : 2010-12-03 2:07
自由建客
inoremap 用 i 光标会回退一字符,除非光标本来在行首,用 a 则一般正常,但光标若本在行首则会落到第一个字符后。不知有否完全之策。
若能让 vim 在 Esc 时,光标不回退,那就可以放心用 i 了。
另外最关键的是 Main() 的定义必须在开始 call inputsave() 在返回前 call inputrestore() ,否则 map 中 <CR> 之后的键会被其吞并。

Re: vim 执行一自定义函数如何保持状态

发表于 : 2010-12-03 2:58
自由建客
还是有问题,当我调用的函数如果又调用了 inputsave() 就完蛋了,插入模式还是用 <C-O> 好了,不用 <Esc> ,也解决了光标位置问题。
就是不知道选择模式的选择范围在 Main() 中如何使用。我 Main() 的定义加了 range 的。