Wyświetlanie historii poleceń za pomocą showcmd

11

Podczas używania set showcmdVima pokazuje częściowe polecenia w ostatnim wierszu ekranu. Na przykład w trybie normalnym podczas wpisywania polecenia dt.wyświetla się ostatni wiersz, dta następnie po naciśnięciu .polecenia polecenie jest zakończone, a zatem nic nie jest wyświetlane.

Czy istnieje sposób na pokazanie pełnych poleceń? Na przykład podczas pisania zostanie wyświetlony dt.gU(pierwszy dt.; a kiedy zaczniesz wpisywać drugie polecenie, pierwsze zostanie wyczyszczone, tak że na końcu gU(wyświetli się tylko.

Może to być przydatne na przykład w ilustrowaniu plików GIF; i żeby sprawdzić, czy wpisałeś to, co chciałeś, jeśli napotkasz nieoczekiwany wynik.

Gonçalo Ribeiro
źródło
1
Co to jest pełne polecenie? dtJest pokazany, ponieważ jest obecny operator toku. Po otrzymaniu ruchu przestaje być operatorem. Załóżmy, że poszliśmy dalej i tak zrobiliśmy dt.gU(gu)daw. Czy to wszystko to „jedno pełne polecenie”, czy to cztery pełne polecenia, czy coś jeszcze?
davidlowryduda
@mixedmath dla mnie, który liczyłby jako 4 polecenia. Drugi akapit odpowiedzi próbuje ujednoznacznić, co mam na myśli.
Gonçalo Ribeiro
2
Z punktu widzenia Vima dt.gU(są 2 polecenia: dt. i gU(.... Więc tak naprawdę chcesz pokazać jakąś historię poleceń (Vim już pokazuje „pełne komendy”).
Martin Tournoij,
@Carpetsmoker, tak, to może być to, czego chcę. Dziękujemy za edycję tytułu pytania.
Gonçalo Ribeiro
3
Wgrałem kod źródłowy Vima, pracując nad normalną historią . W src/normal.czaproszeniach kodu clear_showcmd()w kilku miejscach ( normal_cmd(), do_pending_operator(), end_visual_mode()). Bawię się zrzucaniem do pliku showcmd_bufw tych momentach, który wyglądał całkiem nieźle, ale daje mi pewność, że nie możesz dostać tego, czego chcesz, bez podobnej modyfikacji kodu źródłowego Vima i przebudowania go. Oczywiście, zrobienie tego może być kłopotliwe, aby tworzyć gify.
John O'M.

Odpowiedzi:

9

W zwykłym Vimie nie mogłem tego zrobić. Jeśli jednak chcesz załatać Vima, poniższe opcje mogą działać dla Ciebie.

Bardzo prosta łatka (zastosowana w Vim-7.4.052) wyłącza aktualną aktualizację ekranu, która usuwa historię po zakończeniu normalnego polecenia. Robi to, zwracając, czy showcmd_is_clearprzed aktualizacją wyświetlacza ustawiono, czy nie . (alternatywnie możesz skomentować instrukcję if i pozostawić tylko jedną oryginalną returnlinię. uwaga : łatka poniżej nie wkleiła się zbyt dobrze; być może będziesz musiał zastosować ją ręcznie, chociaż jest to tylko krótka linijka. uwaga : I nie nie wypowiedzieć się rzeczywista display_showcmd(), ponieważ wydaje się być używany w trybie wizualnym, aby zaktualizować wyświetlanie liczby wybranych linii lub innych ewentualnie inne rzeczy nie mam przetestowane to..

--- src/normal.c    2015-02-14 00:21:23.286352257 -0500
+++ src/normal.c    2015-02-14 00:21:25.238352173 -0500
@@ -4029,6 +4029,7 @@
    /* Don't actually display something if there is nothing to clear. */
    if (showcmd_is_clear)
        return;
+   return;
     }

     display_showcmd()

Wynik wygląda następująco:

Screencast przedstawiający łatkę

Kilka ciekawych rzeczy do zapamiętania:

  • To pokazuje, nawet proste ruchy, jak j, k, bitp
  • xKomenda faktycznie staje dlw showcmd_buf.
  • Polecenia, które zmieniają dolny wiersz, zacierają obszar showcmd (na przykład za pomocą :polecenia lub przejścia do trybu wstawiania (przynajmniej w mojej konfiguracji))
  • Program przechwytujący przestał rejestrować wiele uderzeń po wpisaniu a ", ale moja sekwencja klawiszy jest widoczna w oknie vim dla mojego długiego rejestru określonego szarpnięciem.
  • Nie pokazano w obsadzie, ale trafienie escw trybie normalnym pokazuje ^[w obszarze showcmd
John O'M.
źródło
4

Oprócz rozwiązania Johna istnieje jeszcze jeden sposób pokazania wszystkich naciśnięć klawiszy vima, które zostały naciśnięte przy użyciu -wparametru, który rejestruje wszystkie znaki, które wpisujesz w pliku. Problem polega na tym, że vim zapisuje naciśnięcia klawiszy tylko po wyjściu z Vima. Tak działa VimGolf .

Aby obejść ten problem, Kana Natsuno opracował łatkę jednowierszową , która wyłącza buforowanie -wopcji, dzięki czemu masz dostęp do strumienia naciśnięć klawiszy w czasie rzeczywistym. Następnie należy je odczytać (np. tail -f), Przeanalizować lub spróbować wyświetlić je na pasku stanu ( :set statusline).

Sprawdź niestandardową kompilację Vima, korzystając z gałęzi DrewV w MacVim, aby uzyskać strumień klawiszy w czasie rzeczywistym.

Źródło: Vimprint - parser naciśnięć klawiszy Vima na blogu Drew Neil

Jest to przydatne, jeśli chcesz ujawnić naciśnięcia klawiszy Vima w samouczkach wideo lub plikach GIF.

kenorb
źródło