如何在Vim中以可视模式映射`g CTRL-G`命令?

时间:2015-11-13 18:00:32

标签: vim keyboard-shortcuts vi

我非常喜欢这个命令,因为它显示了我选择的行数,单词,字符和数字。字节。 http://vimdoc.sourceforge.net/htmldoc/editing.html#v_g_CTRL-G

但不知怎的,我无法让映射工作:

我试过了:

vnoremap <leader>z g<C-g>
vmap <leader>z g<C-g>

2 个答案:

答案 0 :(得分:3)

当我尝试时,我就像“哇,它真的不起作用”。然后我意识到状态信息显示和消失得太快了。因此,为了使您的映射“正常工作”,您可以使用变量v:statusmsg

显示最后一条状态消息
vnoremap <leader>z g<C-g>:<C-U>echo v:statusmsg<CR>

但这使您处于正常模式。您可以通过 g v 重新选择该区域(它不会在映射中添加它,它会使用-- VISUAL --重绘状态消息)。如果你知道一些方法如何保持信息显示(即不需要再次使用echo v:statusmsg显示),那么你不需要这个不是非常有用的解决方法(因为它似乎更好地使用< kbd> g CTRL + g 组合而不是映射到我。)

修改:我找到了有趣的功能sleep(或gs,就像去睡觉)。

vnoremap <leader>z g<C-g>2gs

现在您可以看到该消息。您无法在两秒钟内执行任何操作,但在MS-DOS上可能会被CTRL-CCTRL-Break中断。 (显然,您可以定义不同的时间段。)

答案 1 :(得分:2)

另一种似乎有用的方法(至少在gVim中):

vnoremap <leader>z :call feedkeys("gvg\<C-G>")<CR>

这里的想法是feedkeys()调用中指定的字符是&#34;注入&#34; 之后执行调用(即在<CR>映射运行<leader>z之后)。因此需要使用gv重新选择视觉区域。