키가 매핑 된 것을 찾는 방법은 무엇입니까?


13

:map인수없이 명령 을 실행 하면 사용자 정의 매핑 목록이 표시되어야하지만 예를 들어 Ctrl-W Ctrl-I를 누르면 문제가 발생하지만 내장 매핑으로 어떤 기능이 발생했는지 전혀 알 수 없습니다. :map명령에 나타나지 않습니다 .

키의 기능을 어떻게 알 수 있습니까?



실제로는 아닙니다. emacs에서는 Ctrl-H를 사용할 수 있습니다. k 알고 싶은 키를 누르면 바인딩 정보가 표시됩니다. Vim에는 그 기능이없는 것 같습니다. 특정 키 조합이 매핑 된 것을 어떻게 알 수 있습니까?
Mad Wombat

표시된 사본을 읽었습니까? 이 정보에 대해 Vim 도움말 시스템을 쿼리하는 방법을 알려주기 때문에 (목록 8 번) : :help CTRL-W_CTRL-I또는:help CTRL-W_i
Martin Tournoij

2
질문의 편집 후 양식에 현재 링크 된 도움말 탐색과 중복되는 내용과는 다른 답변 ( ": map <Keys>를 사용하여 활성 매핑을 인쇄하는 방법")이 있으므로 다시 열기로 투표했습니다.

1
그러나 OP는 그것이 그의 첫 문구라는 것을 알고있는 것 같습니다. Vim이 매핑되지 않은 모든 키, 즉 기본적으로 수행하는 작업을 (유사한 방식으로) 표시하는 방법이 좋을 것입니다.
VanLaser

답변:


10

당신은 할 수 없습니다.

다음은 C 소스 코드입니다 <C-w><C-i>.

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는 a char를 함수에 매핑하는 것입니다. 두 번째 키 입력 ( <C-i>) 의 구현 은 단순히 추악합니다!

이것은 Emacs와 다릅니다. 여기서는 모든 것이 Lisp에 있으며 사용자 정의 매핑은 Emacs의 기본 매핑과 다르지 않습니다. 그러나 Vim에는 C 코드에서 제공하는 "매직"매핑이 있으며 Vim에서는 절대 노출되지 않는 C 함수에 매핑됩니다. 나는 항상 Vim이 더 나은 아이디어를 가지고 있다고 말하지만, Emacs는 더 나은 구현을 가지고 있습니다 ;-)

따라서 유일한 방법은 도움말 파일에서 찾아 보는 것입니다. 그렇기 때문에 Vim의 문서에서 주제를 탐색하는 방법은 누구에게나 제공 할 수 있는 유일한 실질적인 답변 이기 때문에 이것을 복제했습니다 . 하나는 실제로 (내가 방금했던 것처럼) 질문에 대한보다 자세한 설명이 제공 될 수 있음을 주장하고 주장했다 수있는 것을 대신 (지금 삭제) 응답을주는, 아마도 '당신'에게 말했다 것 다시, 실수로 죄송합니다 "라고 다시 열었습니다 ;-)

어쨌든 몇 가지 예를 통해 협약을 간략하게 설명하십시오.

  • :help ww(대소 문자 구분)에 대한 정상 모드 매핑 ;
  • :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>.

1
항상 제외되는 것처럼 보이는 도움말 중 하나는 commandline completionCTRL-D를 사용하여 vim help에서 호출하는 것입니다 ( "도움을 검색"이라고 함). 입력 한 :h CTRL-W다음를 누릅니다 <CTRL-D>를, 당신은 예를 들어 문자열 "CTRL-W"를 포함하는 모든 명령의 목록을 얻을 것이다 CTRL-W, CTRL-W_^, CTRL-W-<Down>, .... 입력 :h g8<CTRL-D>하면 볼 수 g88g8사용 가능한 도움말 주제로. 이것이 없으면 도움말 주제를 정확하게 입력하고 작동하는 정확한 문자열을 찾기가 어렵습니다.
JESii


1

다음 명령을 통해 매핑을 얻을 수 있다고 생각합니다.

:nmap - Mapping on normal mode
:cmap - Mapping on command mode
:vmap - Mapping on visual mode

그것이 도움이되기를 바랍니다!


2
나는 그것이 첫 번째 질문의 첫 몇 마디 때문에 도움이 될 것이라고 생각하지 않습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.