Bir anahtarın ne ile eşleştirildiğini nasıl öğrenebilirim?


13

:mapBağımsız değişkenleri olmayan komutları çalıştırmanın bana kullanıcı tanımlı eşlemelerin bir listesini vermesi gerektiğini biliyorum , ancak örneğin, Ctrl-W Ctrl-I tuşlarına bastığımda bir şey olur, ancak yerleşik işlevler olarak hangi işlevin gerçekleştiğine dair hiçbir fikrim yok :mapkomutlarda görünmez .

Bir anahtarın ne yaptığını nasıl öğrenebilirim?



Pek sayılmaz. Emacs'da, bilmek istediğim tuşa basarak Ctrl-H k tuşuna basabilirim ve bana bağlayıcı bilgileri verecektir. Vim'in bu fonksiyondan yoksun olduğu görülüyor. Belirli bir tuş kombinasyonunun neyle eşlendiğini nasıl öğrenebilirim?
— Mad Wombat

İşaretli kopyayı okudunuz mu? Çünkü bu, bu bilgi için Vim yardım sistemini nasıl sorgulayacağınızı açıklar (liste madde no. 8): :help CTRL-W_CTRL-Iveya:help CTRL-W_i
— Martin Tournoij

2
Sorunun düzenleme sonrası formunun, yardım gezinme ile ilgili şu anda bağlı olan kopyadan daha farklı bir cevaba (": harita <Tuşlar>") sahip olduğu için yeniden açılmaya oy verdim.

1
Ama OP bunun ilk cümlesi olduğunu biliyor gibi görünüyor. Vim'in (benzer şekilde) tüm eşlenmemiş anahtarları, yani varsayılan olarak ne yaptıklarını göstermenin bir yolu olması iyi olurdu.
— VanLaser

Yanıtlar:


10

Yapamazsın.

İşte ne için C kaynak kodu <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;

typeDeğişkenin nereden alındığından tam olarak emin değilim , bunu görmek istemiyordum, ama asıl nokta, "bu anahtar bu işleve eşlendi" demek için gerçek bir tesis olmadığıdır. Temelde sadece bir fonksiyonu ile structeşler charve ikinci tuş vuruşunun ( <C-i>) uygulanması basit bir çirkinliktir!

Bu, her şeyin Lisp'te olduğu ve özel eşlemelerinizin Emacs'ın varsayılan eşlemelerinden farklı olmadığı Emacs'tan farklıdır. Ancak Vim'de, V kodunda hiçbir zaman açığa çıkmayan C işlevlerine karşı eşleşen C kodu tarafından sağlanan "sihirli" eşlemelere sahipsiniz. Her zaman Vim'in daha iyi bir fikre sahip olduğunu söylerim, ancak Emacs daha iyi bir uygulamaya sahiptir ;-)

Tek yol, yardım dosyalarında aramaktır. Bu yüzden bunu herkesin verebileceği tek pratik cevap olduğu için Vim'in belgelerindeki konulara nasıl gidebilirim ? Bir gerçekten (ben sadece yaptığım gibi) sorunun daha derinlemesine açıklama verilebilir iddia ve iddia vardı olabilir o yerine (şimdi silinmiş) yanıtı verme, muhtemelen 'Size" derdim yeniden doğru, hata için üzgünüm "ve yeniden açtı ;-)

Her halükarda, bazı örneklerle sözleşmeleri kısaca açıklamak için:

  • :help w- normal mod eşlemesi w(büyük / küçük harfe duyarlı);
  • :help g8- için normal mod eşlemesi g8;
  • :help v_o- için görsel mod eşleme o; diğer modlar ckomut satırı ve iekleme içindir;
  • :help CTRL-W- için normal mod eşlemesi <C-w>;
  • :help i_CTRL-W- için mod eşleme ekle <C-w>;
  • :help CTRL-W_CTRL-I- için normal mod eşlemesi <C-w><C-i>;
  • :help i_CTRL-G_<Down>- için mod eşleme ekle <C-g><Down>.

1
Hakkında önemli bir nokta: her zaman dışarıda bırakılmış gibi görünen commandline completionyardım CTRL-D kullanarak vim yardımında denir (buna "yardımda ara" diyorum). Tür :h CTRL-Wardından basın <CTRL-D> ve örneğin dizesini "CTRL-W" içeren tüm komutların listesini alırsınız CTRL-W, CTRL-W_^, CTRL-W-<Down>, .... Yazın :h g8<CTRL-D>ve göreceksiniz g8ve 8g8kullanılabilir yardım kobay olarak kullandılar. Bu olmadan, yardım konusunu tam olarak yazmanız gerekir ve işe yarayan tam dizeyi bulmak zordur.
— JESii


1

Aşağıdaki komutlarla eşleştirmeleri alabileceğinizi düşünüyorum

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

Umarım yardımcı olur!


2
Sorunun ilk satırındaki ilk birkaç kelime nedeniyle yardımcı olacağını düşünmüyorum.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.