कैसे पता लगाया जाए कि किस कुंजी को मैप किया गया है?


13

मुझे पता है कि :mapतर्कों के बिना चलने वाले कमांडों को मुझे उपयोगकर्ता-परिभाषित मैपिंग की एक सूची देनी चाहिए, लेकिन, उदाहरण के लिए, जब मैं Ctrl-W Ctrl-I दबाता हूं तो कुछ होता है, फिर भी मुझे पता नहीं है कि क्या कार्य केवल निर्मित मैपिंग के रूप में हुआ था :mapआदेशों में प्रकट न हों ।

मुझे कैसे पता चलेगा कि एक कुंजी क्या करती है?



ज़रुरी नहीं। Emacs में, मैं Ctrl-H k कुंजी को दबा सकता हूं जिसके बारे में मैं जानना चाहता हूं और यह मुझे बाध्यकारी जानकारी देगा। विम को उस फंक्शन की कमी लगती है। मुझे कैसे पता चलेगा कि किसी विशेष कुंजी संयोजन को मैप किया गया है?
मैड वॉम्बैट

क्या आपने चिह्नित डुप्लिकेट पढ़ा? क्योंकि यह आपको बताता है कि इस जानकारी (सूची आइटम नंबर 8) के लिए विम सहायता प्रणाली को कैसे क्वेरी करें: :help CTRL-W_CTRL-Iया:help CTRL-W_i
मार्टिन टूरनोइज

2
मैंने फिर से खोलने के लिए मतदान किया क्योंकि प्रश्न के पोस्ट-एडिट फॉर्म में उपयोगी नेविगेशन के बारे में वर्तमान में लिंक किए गए डुप्लिकेट की तुलना में उपयोगी उत्तर (": मानचित्र <सक्रिय> मैपिंग को प्रिंट करने के लिए") है।

1
लेकिन ओपी को यह पता लगता है कि, यह उनका पहला वाक्यांश है। विम के लिए अच्छा होगा कि वह (समान तरीके से) सभी गैर-मैप की गई कुंजियों को दिखाए, अर्थात वे डिफ़ॉल्ट रूप से क्या करते हैं।
वानलेसर

जवाबों:


10

आप नहीं कर सकते।

यहाँ क्या <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 से अलग है, जहां (मैं मानता हूं) सब कुछ लिस्प में है, और आपके कस्टम मैपिंग Emacs के डिफ़ॉल्ट मैपिंग से अलग नहीं हैं। लेकिन विम में आपके पास "मैजिक" मैपिंग है जो सी कोड द्वारा प्रदान की जाती है जो सी फ़ंक्शन के खिलाफ मैप करते हैं जो कभी भी विम में उजागर नहीं होते हैं। मैं हमेशा कहता हूं कि विम के पास बेहतर विचार है, लेकिन Emacs का बेहतर कार्यान्वयन है ;-)

तो एकमात्र तरीका यह है कि आप इसे मदद फ़ाइलों में देखें। यही कारण है कि मैंने इसे डुप्लिकेट के रूप में बंद कर दिया है कि मैं विम के प्रलेखन में विषयों पर कैसे नेविगेट करूं क्योंकि यह एकमात्र व्यावहारिक उत्तर है जो कोई भी दे सकता है। कोई वास्तव में यह तर्क दे सकता है कि प्रश्न के बारे में अधिक गहराई से स्पष्टीकरण दिया जा सकता है (जैसा कि मैंने अभी किया है), और क्या आपने यह तर्क दिया था कि (अब हटाए गए) जवाब देने के बजाय, मैंने शायद "आप 'कहा होगा सही है, गलती के लिए क्षमा करें "और इसे फिर से खोला ;-)

किसी भी दर पर, कुछ उदाहरणों के साथ सम्मेलनों का संक्षिप्त वर्णन करने के लिए:

  • :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 (मैं इसे "मदद में खोज" कहता हूं) का उपयोग करके विम सहायता में कहा जाता है। :h CTRL-Wफिर टाइप करें <CTRL-D> दबाएं, और आपको स्ट्रिंग "CTRL-W" वाले सभी कमांड्स की एक सूची मिल जाएगी, उदाहरण के लिए CTRL-W, CTRL-W_^, CTRL-W-<Down>, ...। टाइप करें :h g8<CTRL-D>और आप देखेंगे g8और 8g8उपलब्ध सहायता विषयों के रूप में। इसके बिना, आपको सहायता विषय को सटीक रूप से लिखना होगा और सटीक स्ट्रिंग ढूंढना होगा जो काम करता है मुश्किल है।
JESii

9

यह vim help files पर है :help index

यदि आप जानना चाहते हैं कि कौन सी कुंजी डिफ़ॉल्ट रूप से मैप नहीं की गई है, तो देखें :help map-which-keys

नोट: उपरोक्त नवीनतम विम संदर्भ मैनुअल के लिए क्लिक करने योग्य लिंक हैं


1

मुझे लगता है कि आप निम्न आदेशों के माध्यम से मैपिंग प्राप्त कर सकते हैं

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

आशा करता हूँ की ये काम करेगा!


2
मुझे नहीं लगता कि प्रश्न की पहली पंक्ति के पहले कुछ शब्दों के कारण यह मदद करेगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.