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

4
2个回答

4
当我尝试时,我感到“哇,它真的不起作用”。然后我意识到状态消息显示和消失得太快了。因此,为了使您的映射“起作用”,您可以使用变量 v:statusmsg 显示最后一个状态消息。
vnoremap <leader>z g<C-g>:<C-U>echo v:statusmsg<CR>

但这会让你处于普通模式。您可以通过gv重新选择区域(如果将其添加到映射中,它将使用-- VISUAL --重新绘制状态消息)。如果您知道如何保持消息显示(即无需再次使用echo v:statusmsg显示它),则不需要此不太有用的解决方法(在这种情况下,与其映射,似乎最好使用gCTRL+g组合)。

编辑:我发现了一个有趣的函数 sleep(或者gs,像是去睡觉)。

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

现在你可以看到这条消息。你将无法做任何事情两秒钟,但可以通过 MS-DOS 上的 CTRL-CCTRL-Break 打断它。(显然,你可以定义不同的时间段。)

谢谢@ryuichiro。这个可以用。我不介意它过一段时间就消失了。会尝试找到一种保持可视化的方法。 - kowalcj0

2
另一种似乎可行的方法(至少在gVim中):
vnoremap <leader>z :call feedkeys("gvg\<C-G>")<CR>

这里的想法是在执行feedkeys()调用后,“注入”指定字符(即在<leader>z映射运行<CR>之后)。因此需要使用gv重新选择视觉区域。请注意保留HTML标记。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接