Przejrzałem dokumentację i muszę powiedzieć, że nie mogłem znaleźć sposobu na wykrycie i wyświetlenie bieżącego trybu vi. Mam nadzieję, że masz miłą niespodziankę i ktoś wymyśli rozwiązanie, ale z pewnością nie widzę sposobu na zrobienie tego, o co prosisz.
Myślę, że istnieje sposób, aby to zrobić, ale jest to ogromna przesada dla drobnej irytacji i nie sądzę, że o to ci chodziło, zadając to pytanie. Jeśli to prawda, przestań czytać teraz i ciesz się życiem.
OTOH, jeśli to naprawdę jest twój wkurzony zwierzak i to doprowadza cię do szaleństwa, a ty naprawdę absolutnie desperacko chcesz rozwiązać ten problem, oto mój pomysł, jak to zrobić:
- Uzyskaj kopię Advanced Programming in the UNIX (R) Environment autorstwa W. Richarda Stevensa.
- Przeczytaj rozdziały o strumieniach i terminalach I / O.
- Pobierz kod źródłowy do wyżej wymienionej książki, która zawiera przykład strumienia, który można nakładać warstwami na terminal.
- Zaimplementuj obsługę kombinacji klawiszy Esc (lub obu klawiszy zmiany trybu) i wskaż to za pomocą dzwonka lub manipulacji w tle bieżącej linii.
W skrócie, Unix implementuje terminal I / O jako pełny dupleks we / wy między sterownikiem urządzenia a procesem użytkownika, do którego można wstawić moduły. Jest on zorganizowany jako stos, dzięki czemu można warstwować dowolną liczbę strumieni. Suma wstrzykiwanych strumieni tworzy zachowanie terminala we / wy.
Po wprowadzeniu znaku pierwszy moduł może go sprawdzić i przekazać dalej (jeśli chce). Gdy odpowiedź dotrze w przeciwnym kierunku, znów ma szansę ją sprawdzić i przekazać dalej. W ten sposób Ctrl-C jest obsługiwany na wyższym poziomie do normalnego klawisza postaci.
Możesz utworzyć plik binarny implementujący moduł strumienia, który po wywołaniu działa cicho na pierwszym planie, sprawdzając i przekazując wszystkie naciśnięcia klawiszy, wykonując preferowaną akcję na naciśniętych klawiszach. Dla wszystkich celów i celów będzie wyglądało to tak, jakbyś pracował nad powłoką. Oooch Możesz wywołać ten plik binarny w ostatnim (lub pierwszym lub dowolnym) wierszu pliku .tcshrc i nawet nie wiedziałbyś, że tam jest.
Jest to dobry grunt tutaj , ale nie mogłem znaleźć wiele informacji na ten temat, prawdopodobnie dlatego, że jest przeszłości jego prime.