Rozumiem, że Vim nie może odróżnić <c-s-[key]>
i <c-[key]>
ponieważ mapują do tego samego kodu ascii. I również z tego samego powodu <c-i>
jest równa <tab>
. Podobnie nie możesz mapować <c-1>
, <c-;>
, itp., ponieważ nie ma reprezentacji ascii.
Czytałem, że niektórzy twierdzą, że to ograniczenie jest w porządku, ponieważ bardziej ergonomiczne jest unikanie akordów / modyfikatorów na rzecz słów (np. Z klawiszem lidera). Ale niektóre operacje są po prostu bardziej odpowiednie dla akordów / modyfikatorów (takich jak rzeczy, które prawdopodobnie powtórzą się)
Pytam się, dlaczego Vim był tak zaprojektowany? Albo dlaczego, ponieważ Vim jest open source, nie ma kompilacji Vima ani GVima, która dodała wsparcie dla tego? Szkoda, że edytor jest tak śmiesznie konfigurowalny, aby ograniczyć się w ten sposób. Czy ktoś może mi to wytłumaczyć?
Odpowiedzi:
Ze względu na sposób, w jaki dane wejściowe klawiatury są obsługiwane wewnętrznie, niestety nie jest to obecnie możliwe nawet w GVIM. Niektóre kombinacje klawiszy, takie jak Ctrl + nie alfabetyczne nie mogą być mapowane, i Ctrl + litera vs. Ctrl + Przesunięcie + list nie może być rozróżniony. (Chyba że twój terminal wysyła wyraźne termcap kod dla tego, czego większość nie robi.) W trybie wstawiania lub wiersza polecenia spróbuj wpisać kombinację klawiszy. Jeśli nic się nie dzieje / nie jest wstawione, nie można użyć tej kombinacji klawiszy. Dotyczy to również
<Tab>
/<C-I>
,<CR>
/<C-M>
/<Esc>
/<C-[>
itd. (Jedynym wyjątkiem jest<BS>
/<C-H>
.) Jest to znany punkt bólu i temat różnych dyskusji na temat vim_dev i kanału #vim IRC.Niektórzy ludzie (przede wszystkim Paul LeoNerd Evans) chcą to naprawić (nawet dla konsoli Vim w terminalach, które to obsługują) i wprowadzili różne propozycje, cp. http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
Zasadniczo Vim musiałby używać bardziej nowoczesnych bibliotek, które obsługują nowoczesne funkcje emulatora terminali, aby pobierać nieprzetworzone kody kluczy. Wyzwanie polega na tym, że te kody kluczy są (błędnie) wykorzystywane w wielu miejscach w kodzie źródłowym Vima, a aktualizacja takiej centralnej struktury jest trudna.
Ale na dzień dzisiejszy nie pojawiły się żadne poprawki ani ochotnicy, choć wielu wyraziło chęć posiadania tego w przyszłej głównej wersji Vima 8. \ t Jeśli uważasz, że jest to punkt bólu i jesteś w stanie się przyczynić, lista dyskusyjna vim_dev lista mailingowa to miejsce, w którym możesz się zgłosić.
źródło
Vim zezwala na modyfikatory & lt; C- i & lt; C-S- na klawiszach strzałek, ponieważ te kombinacje są obsługiwane przez niektóre emulatory terminali, ale myślę, że to wszystko. Ogólnie ogranicza się do kodów kluczowych, które mogą być generowane przez emulatory terminali.
Vim został zaprojektowany w ten sposób, ponieważ jest Vi-IMproved, a vi został zaprojektowany do użycia z terminalami CRT w tym czasie, które wysyłały i otrzymywały znaki ASCII. Od tego czasu Vim ewoluował zgodnie z zasadami omówionymi w
Szczególnie istotne są następujące elementy:
Tak więc unika się generalnie wszystkich kodów kluczy dostępnych tylko z GUI, a nie z emulatora terminala, dzięki czemu wszystko, co można zrobić w gvimie, można zrobić w vim. Jest to uważane przez większość użytkowników Vima za funkcję.
źródło
Lista mailingowa vim-dev jest prawdopodobnie lepszym miejscem na to pytanie.
Czy mógłbyś rozwinąć tę część: „lubisz rzeczy, które prawdopodobnie powtórzysz”?
W każdym razie vim, który robi to, co chcesz, nie istnieje, ponieważ nie troszczy się o to za mało użytkowników. Akordy są zarówno ergonomicznym koszmarem, jak i wynikiem ograniczeń edycji bez modelowania. Po usunięciu wszystkich skrótów na poziomie systemu operacyjnego po prostu nie ma wystarczającej liczby dostępnych kluczy do mapowań, co z kolei zmusza cię do konstruowania skomplikowanych i niepraktycznych akordów.
<C-S-w>
nie jest lepszy niż,w
przez dowolną część wyobraźni.Podejście Vima, z takimi kluczowymi sekwencjami
,bc
lub cokolwiek chcesz, jest dużo bardziej skalowalne i dużo łagodniejsze dla twojego ciała.źródło
.
powtarza zmiany, nic dziwnego, że nie działa:tabnext
/:tabprev
. Biorąc pod uwagę, że używanie wielu kart jest w dużej mierze błędem w Vimie,gt
/gT
są więcej niż wystarczające, IMO. Mniej „znajome” niż skomplikowane i nieintuicyjne skróty używane przez większość innych edytorów, być może, ale w dużej mierze równie skuteczne, jeśli nie więcej. Ale najwyraźniej się z tym nie zgadzamy. W każdym razie, jeśli masz ochotę rozwidlić Vima… na wszelki wypadek, śmiało!