我在OS X 10.9之上使用iTerm2和Vim 7.4。
在我的bash shell中,我的光标是一条闪烁的线条。我已经安装了Vitality(https://github.com/sjl/vitality.vim/)以使Vim光标在正常模式下成为块,在插入模式下成为一条线。然后,为了让我的光标恢复到退出vim的一行,我已经将以下autocmd添加到我的.vimrc(来自this堆栈溢出问题):
autocmd VimLeave * let &t_me="\<Esc>]50;CursorShape=1\x7"
这一切都很有效;一个问题是,当我通过Ctrl-Z(我经常这样做)暂停Vim时,我的光标仍然是一个块。有没有办法检测到Vim被挂起(可能是通过autocmd)并将光标设置为一行?此外,大概我必须在恢复Vim时将光标重置为一个块。
答案 0 :(得分:3)
暂停没有:autocmd
事件,但您可以通过挂钩<C-z>
命令解决此问题:
:nnoremap <silent> <C-z> :let &t_me=...<CR><C-z>
在恢复时恢复光标更加困难。看起来Vitality插件已经使用autocmd事件来改变形状,因此需要对模式进行一次模式更改(进入/退出插入模式)。
如果这还不够,你必须在上面的映射中安装一个单独的fire-once autocmd(例如在CursorMoved,CursorHold
上)。或者您可以尝试通过:let
发送feedkeys()
命令,希望它只会在Vim唤醒后执行(未经过测试)。
答案 1 :(得分:1)
我使用Ingo的建议以及我在此处找到的内容:
Update Vim after it suspended?
...切换不同的终端设置(称为“括号粘贴模式”)时 我暂停了Vim。您可以为任何其他转义序列对调整此项 需要,因为一般概念不是BPM特定的。这个技巧解决了'fg' 问题。这是:
" (Re)Set Bracketed Paste Mode
function SetBPM(mode)
execute "silent !echo -ne '\033[?2004" . a:mode . "'"
endfunction
" toggle BPM when suspending (hook ctrl-z)...
nnoremap <silent> <C-z> :call SetBPM("l")<CR>:suspend<bar>:call SetBPM("h")<CR>