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

Vim、Emacs配置和使用
回复
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

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

#1

帖子 自由建客 » 2010-12-02 2:08

我在一脚本中有

代码: 全选

noremap <F10> :call <SID>Main()<CR>
inoremap <F10> <Esc>:call <SID>Main()<CR>
我想,若之前是插入模式,在按 F10 执行完 Main() 后恢复到插入模式。
若之前是可视模式或选择模式,在按 F10 执行完 Main() 后恢复到可视或选择模式,且保持原来的选择范围依旧被选。
是需要改写 map 和 Main() 两方面吗,如何该?
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

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

#2

帖子 lilydjwg » 2010-12-02 12:33

这样?

代码: 全选

nnoremap <F10> :call <SID>Main()<CR>
inoremap <F10> <Esc>:call <SID>Main()<CR>i
vnoremap <F10> <Esc>:call <SID>Main()<CR>gv
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

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

#3

帖子 自由建客 » 2010-12-03 2:07

inoremap 用 i 光标会回退一字符,除非光标本来在行首,用 a 则一般正常,但光标若本在行首则会落到第一个字符后。不知有否完全之策。
若能让 vim 在 Esc 时,光标不回退,那就可以放心用 i 了。
另外最关键的是 Main() 的定义必须在开始 call inputsave() 在返回前 call inputrestore() ,否则 map 中 <CR> 之后的键会被其吞并。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

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

#4

帖子 自由建客 » 2010-12-03 2:58

还是有问题,当我调用的函数如果又调用了 inputsave() 就完蛋了,插入模式还是用 <C-O> 好了,不用 <Esc> ,也解决了光标位置问题。
就是不知道选择模式的选择范围在 Main() 中如何使用。我 Main() 的定义加了 range 的。
回复