Wykryj, czy klucz jest powiązany z czymś w vimie

89

Chciałbym wiedzieć, czy istnieje sposób, aby dowiedzieć się, czy klucz robi coś w vimie. Wiem, że mogę użyć :mapdo wyświetlenia mapowań zdefiniowanych przez użytkownika, ale czy jest coś dla wbudowanych rzeczy?

Na przykład, zawsze miałem CTRL- Wzobowiązany do ścisłej karcie, bo myślałem, że to był nieużywany. Po pół roku dowiedziałem się, że są sekwencje, które go używają, na przykład CTRL- W CTRL- Sdo dzielenia okna, a przekwalifikowanie się było koszmarem.

K. Norbert
źródło
4
Mówiąc o przypadkowych kolizjach mapowań zdefiniowanych przez użytkownika, naprawdę dobrą praktyką jest używanie mapleadera
derenio,

Odpowiedzi:

79

Jeśli sprawdzisz sugerowaną odpowiedź Randy'ego Morrisa, przekonasz się, że

:help index 

poda ci listę, którą chcesz.

skeept
źródło
bardzo przydatne! dobrze wiedzieć, że jest miejsce, do którego możesz pójść, jeśli chcesz tylko
poszperać,
40

Aby sprawdzić domyślne mapowanie:

:help index

W przypadku innego mapowania wykonanego przez użytkowników lub wtyczkę:

:map
:map!

Z http://vim.wikia.com/wiki/Mapping_keys_in_Vim_- Tutorial (Part_1) :

Pierwsze polecenie wyświetla mapy, które działają w trybie normalnym, wizualnym oraz w trybie wyboru i oczekiwania operatora. Drugie polecenie wyświetla mapy działające w trybie wstawiania i linii poleceń.

Zwykle dane wyjściowe powyższych poleceń obejmują kilka stron. Możesz użyć następującego zestawu poleceń, aby przekierować dane wyjściowe do pliku vim_maps.txt:

:redir! > vim_maps.txt
:map
:map!
:redir END
Hieu
źródło
O ile nowsze wersje Vima nagle nie oferują lepszej alternatywy, wydaje się, że jest to jedyny sposób na przeszukanie zarówno dołączonych, jak i niestandardowych map klawiszy. mapcheck(jak wspomniano w innej odpowiedzi ) obejmuje również tylko niestandardowe skróty klawiszowe. Główna różnica między wyjściem do pliku tekstowego a kontrolą mapy polega na tym, że wyprowadzanie do pliku tekstowego i / lub używanie :help indexpozwala /C-ww Vimie znaleźć wszystko przy użyciuC-w
Zoe
33

Nie jest to pełna odpowiedź, ale możesz chcieć sprawdzić :help map-which-keyslistę kluczy, które vim zaleca ci używać w twoich niestandardowych mapach.

Ta sekcja pomocy zawiera zalecenie, jak sprawdzić, czy określony klawisz jest przypisany do akcji.

Randy Morris
źródło
19

Użyj :map!i :mapdo ręcznego ustawiania kluczy i :help 'char(-combination)'aby dowiedzieć się, które klucze są już zmapowane w vimie po wyjęciu z pudełka (/ poza twoimi określonymi opcjami kompilacji). (Nieco niezwiązane z tematem, ale nadal istotne (myślę): użyj, :scriptnamesaby zobaczyć, które pliki zostały pobrane w jakiej kolejności.)

shindojin
źródło
Jeśli chcesz wyszukać klawisze wywołujące określone polecenie, możesz to zrobić:: redir keys.txt: map: redir end Następnie otwórz keys.txt i wyszukaj, jakie polecenia są powiązane.
Christian Oudard,
18

Przejrzałem :help indexi sporządziłem listę niektórych nieużywanych nmapkluczy:

  • Q (przełącz na tryb „Ex”)
  • Z oprócz ZZ, ZQ
  • \
  • <Space>(taki sam jak lw trybie normalnym; największy i najczęściej niewykorzystywany klawisz w trybie normalnym)
  • gb, gc, gl, gx, gy, gz
  • gs (sen)
  • zp, zq, zu, zy
  • cd, cm, co, cp, cq, cr, cs, cu, cx, cy
  • dc, dm, do, dp, dq, dr, ds, du, dx, dy
  • gA, gB, gC, gG, gK, gL, gM, gO, gS, gX, gY, gZ
  • zB, zI, zJ, zK, zP, zQ, zP, zS, zT, zU, zV, zY, zZ
  • ] a,] b,] e,] g,] h,] j,] k,] l,] n,] o,] q,] r,] t,] u,] v,] w,] x ,] y
  • [a, [b, [e, [g, [h, [j, [k, [l, [n, [o, [q, [r, [t, [u, [v, [w, [x] , [y
  • CTRL-G, CTRL-K
  • CTRL- \ a - z (zarezerwowane dla rozszerzeń)
  • CTRL- \ A - Z (nie używane)

Proszę zaktualizować / skomentować.

Michal Čizmazia
źródło
12

Możesz użyć mapcheck.: -

Na przykład chciałem mapować <CR> ,ido gg=Gpliku z wcięciem. Aby sprawdzić, czy istnieje już mapowanie dla<CR> , i

if mapcheck("\<CR>", "I") == "" |echo "no mapping"

... ale to nie wykryje, czy mapowanie jest częścią sekwencji.

Moha, wszechmocny wielbłąd
źródło
Próbowałem sprawdzić, czy "o" jest przypisane do czegoś w trybie normalnym, z następującymi wskazówkami: if mapcheck ("o", "N") == "" | echo "brak mapowania", ale zgłasza "brak mapowania", gdy o jest zdecydowanie powiązane z "otwarciem nowej linii". Czy źle go używam?
K. Norbert,
@ K.Norbert: Wierzę w to w przypadku mapowań zdefiniowanych przez użytkownika
Moha the allmighty camel