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.