Bagaimana cara mengetahui kunci yang dipetakan?

13

Saya tahu bahwa menjalankan :mapperintah tanpa argumen harus memberi saya daftar pemetaan yang ditentukan pengguna, tetapi, misalnya, ketika saya menekan Ctrl-W Ctrl-I sesuatu terjadi, namun saya tidak tahu fungsi apa yang baru saja terjadi sebagai pemetaan bawaan tidak muncul dalam :mapperintah.

Bagaimana cara mengetahui apa yang dilakukan kunci?

Gila Wombat
sumber
Tidak juga. Di emacs, saya bisa pergi Ctrl-Hk tekan tombol yang ingin saya ketahui dan itu akan memberi saya informasi yang mengikat. Vim tampaknya tidak memiliki fungsi itu. Bagaimana cara mengetahui kombinasi tombol tertentu yang dipetakan?
Mad Wombat
Apakah Anda membaca duplikat yang ditandai? Karena itu memberitahu Anda bagaimana cara meminta sistem bantuan Vim untuk informasi ini (daftar item no. 8): :help CTRL-W_CTRL-Iatau:help CTRL-W_i
Martin Tournoij
2
Saya memilih untuk membuka kembali karena bentuk post-edit dari pertanyaan memiliki jawaban yang sangat berguna (": map <Keys> untuk mencetak pemetaan aktif") daripada apa yang ada dalam duplikat yang ditautkan saat ini tentang navigasi bantuan.
1
Tapi OP sepertinya tahu itu, itu frase pertamanya. Akan menyenangkan bagi Vim untuk memiliki cara untuk menunjukkan (dengan cara yang sama) semua kunci yang tidak dipetakan, yaitu apa yang mereka lakukan secara default.
VanLaser

Jawaban:

10

Kamu tidak bisa

Berikut kode sumber C untuk apa <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;

Saya tidak sepenuhnya yakin di mana typevariabel dijemput, saya tidak merasa ingin melihat itu, tetapi intinya, bahwa tidak ada fasilitas nyata untuk mengatakan "kunci ini dipetakan ke fungsi ini". Ini pada dasarnya hanya structyang memetakan charfungsi, dan implementasi keystroke kedua ( <C-i>) hanyalah keburukan ad-hoc!

Ini berbeda dari Emacs, di mana (saya kira) semuanya ada di Lisp, dan pemetaan kustom Anda tidak berbeda dengan pemetaan default Emacs. Tetapi dalam Vim Anda memiliki pemetaan "ajaib" yang disediakan oleh kode C yang memetakan terhadap fungsi C yang tidak pernah terpapar di Vim. Saya selalu mengatakan bahwa Vim memiliki ide yang lebih baik, tetapi Emacs memiliki implementasi yang lebih baik ;-)

Jadi satu-satunya cara adalah mencarinya di file bantuan. Inilah mengapa saya menutup ini sebagai duplikat dari Bagaimana saya menavigasi ke topik dalam dokumentasi Vim karena itulah satu-satunya jawaban praktis yang dapat diberikan oleh siapa pun. Seseorang memang dapat berdebat bahwa penjelasan yang lebih mendalam untuk pertanyaan itu dapat diberikan (seperti yang baru saja saya lakukan), dan seandainya Anda berargumen bahwa , alih-alih memberikan respons (yang sekarang dihapus), saya mungkin akan mengatakan "Anda" benar, maaf atas kesalahan "dan membukanya kembali ;-)

Bagaimanapun, untuk menggambarkan secara singkat konvensi dengan beberapa contoh:

  • :help w- pemetaan mode normal untuk w(case-sensitive);
  • :help g8- pemetaan mode normal untuk g8;
  • :help v_o- Pemetaan mode visual untuk o; mode lain adalah cuntuk baris perintah dan iuntuk memasukkan;
  • :help CTRL-W- pemetaan mode normal untuk <C-w>;
  • :help i_CTRL-W- Masukkan pemetaan mode untuk <C-w>;
  • :help CTRL-W_CTRL-I- pemetaan mode normal untuk <C-w><C-i>;
  • :help i_CTRL-G_<Down>- masukkan pemetaan mode untuk <C-g><Down>.
Martin Tournoij
sumber
1
Satu poin penting tentang: bantuan yang sepertinya selalu ditinggalkan adalah apa yang disebut commandline completionbantuan vim menggunakan CTRL-D (Saya menyebutnya "search in help"). Ketik :h CTRL-Wkemudian tekan <CTRL-D>, dan Anda akan mendapatkan daftar semua perintah yang berisi string "CTRL-W", misalnya CTRL-W, CTRL-W_^, CTRL-W-<Down>, ...,. Ketik :h g8<CTRL-D>dan Anda akan melihat g8dan 8g8sebagai subjek bantuan yang tersedia. Tanpa ini, Anda harus mengetikkan subjek bantuan dengan tepat dan menemukan string yang berfungsi pasti sulit.
YESUS
9

Ada di file bantuan vim di :help index

Jika Anda ingin tahu kunci mana yang tidak dipetakan secara default, lihat :help map-which-keys

Catatan: di atas adalah tautan yang dapat diklik ke manual referensi vim terbaru

Tom Hale
sumber
1

Saya pikir Anda bisa mendapatkan pemetaan melalui perintah berikut

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

Semoga ini bisa membantu!

David Yew
sumber
2
Saya tidak berpikir itu akan membantu karena beberapa kata pertama dari baris pertama pertanyaan.