จะค้นหาคีย์ที่ถูกแมปไปได้อย่างไร?


13

ฉันรู้ว่าการรัน:mapคำสั่งที่ไม่มีอาร์กิวเมนต์ควรให้รายการของการจับคู่ที่ผู้ใช้กำหนดเอง แต่ตัวอย่างเช่นเมื่อฉันกด Ctrl-W Ctrl-I จะเกิดอะไรขึ้น ไม่ปรากฏใน:mapคำสั่ง

ฉันจะรู้ได้อย่างไรว่ากุญแจทำอะไร?



ไม่ได้จริงๆ ใน emacs ฉันสามารถกด Ctrl-H k ปุ่มที่ฉันต้องการรู้และมันจะให้ข้อมูลการเชื่อมโยงกับฉัน เสียงเรียกเข้าดูเหมือนจะขาดฟังก์ชั่นนั้น ฉันจะทราบได้อย่างไรว่ามีการจับคู่คีย์ผสมประเภทใดกับคีย์ใด
Mad Wombat

คุณอ่านสำเนาที่ทำเครื่องหมายไว้แล้วหรือยัง เพราะนั่นจะบอกคุณถึงวิธีการสอบถามระบบช่วยเหลือเป็นกลุ่มสำหรับข้อมูลนี้ (รายการหมายเลข 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แผนที่charสำหรับฟังก์ชั่นและการใช้งานการกดแป้นที่สอง ( <C-i>) เป็นเพียงความน่าเกลียดแบบเฉพาะกิจ!

สิ่งนี้แตกต่างจาก Emacs โดยที่ (ฉันเข้าใจ) ทุกอย่างอยู่ใน Lisp และการแมปแบบกำหนดเองของคุณจะไม่แตกต่างจากการแม็พเริ่มต้นของ Emacs แต่ใน Vim คุณมีการแมป "เวทมนต์" ที่จัดทำโดยรหัส C ซึ่งแมปกับฟังก์ชั่น C ที่ไม่เคยเปิดเผยใน Vim ฉันมักจะพูดว่าเป็นกลุ่มที่มีความคิดที่ดีกว่า แต่ Emacs มีการใช้งานที่ดีกว่า ;-)

ดังนั้นวิธีเดียวคือค้นหาในไฟล์ช่วยเหลือ นี่คือเหตุผลที่ฉันปิดนี้เป็นซ้ำของฉันจะนำทางไปยังหัวข้อวิธีในเอกสารที่เป็นกลุ่มของตั้งแต่ที่เป็นเพียงการปฏิบัติคำตอบที่ทุกคนสามารถให้ เราอาจโต้แย้งว่าคำอธิบายในเชิงลึกเกี่ยวกับคำถามนั้นสามารถให้ได้ (อย่างที่ฉันเพิ่งทำไป) และถ้าคุณเถียงว่าแทนที่จะให้คำตอบ (ลบตอนนี้) ฉันอาจจะบอกว่า "คุณ ' ถูกต้องขออภัยในความผิดพลาด "และเปิดใหม่อีกครั้ง ;-)

ไม่ว่าจะด้วยวิธีใดก็ตามให้แสดงตัวอย่างสั้น ๆ ของการประชุมด้วยตัวอย่าง:

  • :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>การทำแผนที่โหมดแทรก

1
ประเด็นสำคัญประการหนึ่งเกี่ยวกับ: ความช่วยเหลือที่ดูเหมือนว่าจะถูกทิ้งไว้เสมอคือสิ่งที่เรียกว่าcommandline completionเป็นกลุ่มความช่วยเหลือในการใช้ CTRL-D (ฉันเรียกมันว่า "ค้นหาความช่วยเหลือ") พิมพ์:h CTRL-Wแล้วกด <CTRL-D> และคุณจะได้รับรายชื่อของคำสั่งทั้งหมดที่มีสตริง "CTRL-W", CTRL-W, CTRL-W_^, CTRL-W-<Down>, ...เช่น, พิมพ์:h g8<CTRL-D>และคุณจะเห็นg8และ8g8เป็นวิชาช่วยเหลือที่มีอยู่ หากไม่มีสิ่งนี้คุณจะต้องพิมพ์หัวข้อความช่วยเหลืออย่างแน่นอนและค้นหาสตริงที่แน่นอนซึ่งใช้งานได้ยาก
JESii

9

มันอยู่ในไฟล์ช่วยเหลือเป็นกลุ่มที่ :help index

หากคุณต้องการทราบว่าคีย์ใดที่ไม่ได้รับการแมปตามค่าเริ่มต้นให้ดู :help map-which-keys

หมายเหตุ: ข้างต้นเป็นลิงค์ที่คลิกได้ไปยังคู่มืออ้างอิง vimล่าสุด


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.