:map
命令应该会给我一个用户定义的映射列表,但是,例如,当我按Ctrl-W Ctrl-I时,发生了一些事情,但是我不知道内置的函数只是发生了什么映射不会出现在:map
命令中。如何找出键的作用?
#1 楼
您不能。这是
<C-w><C-i>
的作用的C源代码:normal.c
:/*
* This table contains one entry for every Normal or Visual mode command.
* The order doesn't matter, init_normal_cmds() will create a sorted index.
* It is faster when all keys from zero to '~' are present.
*/
static const struct nv_cmd
{
int cmd_char; /* (first) command character */
nv_func_T cmd_func; /* function for this command */
short_u cmd_flags; /* NV_ flags */
short cmd_arg; /* value for ca.arg */
} nv_cmds[] =
{
[...]
{Ctrl_W, nv_window, 0, 0},
};
[...]
/*
* CTRL-W: Window commands
*/
static void
nv_window(cmdarg_T *cap)
{
if (!checkclearop(cap->oap))
do_window(cap->nchar, cap->count0, NUL); /* everything is in window.c */
}
window.c
:/*
* all CTRL-W window commands are handled here, called from normal_cmd().
*/
void
do_window(
[..]
) {
switch (nchar)
{
[..]
case 'i': /* Go to any match */
case Ctrl_I:
type = FIND_ANY;
/* FALLTHROUGH */
[..]
default: beep_flush();
break;
我不完全确定
type
变量是从哪里获取的,我并不希望查找该变量,但重点是,在那里说“此键已映射到此功能”并不是真正的工具。它基本上只是一个struct
,它将一个char
映射到一个函数,并且第二个击键(<C-i>
)的实现只是临时的丑陋!这与Emacs有所不同,在Emacs中,我假设一切在Lisp中,您的自定义映射与Emacs的默认映射没有任何不同。但是在Vim中,C代码提供了“魔术”映射,这些映射映射到Vim中从未公开的C函数。我总是说Vim有更好的主意,但Emacs有更好的实现;-)
所以唯一的方法是在帮助文件中查找它。这就是为什么我将其作为“如何导航到Vim文档中的主题”的副本而关闭的原因,因为这是任何人都可以给出的唯一实用答案。确实有人可能会争辩说,可以对这个问题进行更深入的解释(就像我刚才所做的那样),而您是否曾争辩说,与其给出(现在删除的)答复,我可能会说“您”正确,为错误感到抱歉”,然后重新打开它;-)
无论如何,用一些示例简要说明这些约定:
:help w
-w
的普通模式映射(区分大小写); :help g8
-g8
的普通模式映射; :help v_o
-o
的可视模式映射;其他模式是c
(用于命令行)和i
(用于插入); :help CTRL-W
-<C-w>
的普通模式映射; :help i_CTRL-W
-<C-w>
的插入模式映射; :help CTRL-W_CTRL-I
-<C-w><C-i>
的正常模式映射; :help i_CTRL-G_<Down>
-<C-g><Down>
的插入模式映射。评论
关于:help的一个重要点似乎总是被遗漏了,就是使用CTRL-D的vim帮助中的命令行完成(我称其为“在帮助中搜索”)。输入:h CTRL-W,然后按
–JESii
18年7月23日在13:23
#2 楼
它位于:help index
的vim帮助文件中。如果您想知道默认情况下未映射哪些键,请参见
:help map-which-keys
注:以上内容均可单击链接到最新的vim参考手册
#3 楼
我认为您可以通过以下命令获取映射:nmap - Mapping on normal mode
:cmap - Mapping on command mode
:vmap - Mapping on visual mode
希望有帮助!
评论
由于问题第一行的前几句话,我认为这不会有所帮助。
–user859
16 Mar 23 '16 at 14:52
评论
也许我该如何导航到Vim文档中的主题?有用;-)并不是的。在emacs中,我可以按Ctrl-H k按下我想了解的键,它将为我提供绑定信息。 Vim似乎缺少该功能。如何确定特定的组合键映射到什么?
您是否阅读了标记的副本?因为这告诉您如何在Vim帮助系统中查询此信息(清单项目8)::help CTRL-W_CTRL-I或:help CTRL-W_i
我之所以投票决定重新开放,是因为问题的后编辑形式与当前链接的有关帮助导航的副本相比,有一个非常有用的答案(“:map
但是,OP似乎知道,这是他的第一句话。对于Vim来说,有一种方法可以显示(以类似的方式)所有未映射的键,也就是默认情况下它们的作用。