Uzupełnienie WORD

13

<C-p>i <C-n>pozwalają na uzupełnienie słów znalezionych w bieżącym dokumencie.

Biorę jakieś notatki i pisanie do powiedzenia {0,1}^ni (E,D)wiele razy. Są to SŁOWA złożone z kilku słów.

Czy istnieje sposób na uzupełnienie SŁÓW za pomocą <C-p>i <C-n>(lub innych powiązanych ins-completionpoleceń)?

Gonçalo Ribeiro
źródło
1
Lepiej skorzystaj :abbreviatezamiast tego. Na przykład wydaj :ab 01n {0,1}^npolecenie. Następnie za każdym razem, 01ngdy wpiszesz jako niezależne słowo w trybie wstawiania, zostanie ono rozwinięte do {0,1}^n.
200_sukces
@ 200_success, dziękuję. Myślałem o skrótach, ale wciąż chciałem wiedzieć, czy to możliwe ins-completion.
Gonçalo Ribeiro,

Odpowiedzi:

5

Uzupełnij tryb wstawiania za pomocą Ctrl-n

Nie wiem, czy można wykonać uzupełnianie WORD poza pisaniem własnej funkcji (np. Omnifunc). Jeśli jednak nie masz nic przeciwko rozszerzaniu tego, co słowo ma pasować do twoich znaków, możesz dodać te znaki do „iskeyword”

Na przykład moje „iskeyword” ma wartość domyślną

iskeyword=@,48-57,_,192-255

Następnie ustawiłem to na plus dodatkowe znaki powyżej

:set iskeyword=@,48-57,_,192-255,{,},,,(,),^

Dodaje {, }, ,, (, ), i ^do znaków, które tworzą słowo (oprócz tego, co już zrobił)

Następnie wpisywanie {Ctrl-nkończy się {0,1}^n(w pliku zawierającym tylko te dwa przykłady, które podałeś)

Uwaga: Lepiej byłoby zrobić :set iskeyword+=tylko z dodatkowymi rzeczami w następujący sposób:

:set iskeyword+={,},,,(,),^

W ten sposób pozostawiasz wszystko, co już składa się na słowo kluczowe, dodając nowe znaki do istniejącego ustawienia.

Rozszerzenie ze skrótami

Chociaż nie jest częścią pierwotnego pytania, inną podobną (ish) funkcją jest użycie funkcji nvi lub skrótu Vima. W przeciwieństwie do uzupełniania słów kluczowych, skróty nie muszą wyglądać jak końcowy tekst. Również w przeciwieństwie do uzupełniania słów kluczowych skróty rozwijają się automatycznie, a nie tylko wtedy, gdy o nie poprosisz. W zależności od celu i sposobu użycia może to zaoszczędzić dużo pisania i pozwolić na pisanie dużej ilości tekstu bez przerywania prośby o zakończenie.

Skróty są przydatne w przypadku niewielkiego zestawu słów kluczowych i gdy można je zdefiniować z wyprzedzeniem (nie są one wykrywane z tekstu, jak w przypadku uzupełniania słów).

Podstawową ideą skrótów jest powiązanie WORD z jakimś innym tekstem i za każdym razem, gdy redaktor wykryje, że wpisałeś to WORD (to znaczy, że wpisany tekst jest otoczony białą spacją, gdzie operacja zakończenia dodaje białe spacje po słowo kluczowe lub opuszczanie trybu wstawiania), jest zastępowany innym tekstem.

Powiedzmy, że twój plik zawiera {0,1}^ndużo i nie ma innych jego odmian. Pisanie na wyciągnięcie palca, więc może chcesz po prostu wpisać 01nlub myvaluerozwinąć je {0,1}^n, ale tylko wtedy, gdy 01nlub myvaluejest to samo słowo (to znaczy, jeśli pojawia się w innym słowie, nie rób tego Zmień to).

W nvi możesz to zrobić :abbrev 01n {0,1}^n. Możesz zrobić to samo w Vimie, ale zalecam użycie :iabbrev 01n {0,1}^nograniczania rozszerzenia tylko do trybu wstawiania.

Następnie, jeśli masz jakiś tekst (gdzie |reprezentuje kursor)

We find that the value 01n|

A potem trafisz Esclub Spacelub Tablub w inny sposób przenieść kursory, tekst zostanie zastąpiony, a masz (przykład wykorzystania przestrzeni)

We find that the value {0,1}^n |

i możesz kontynuować pisanie bez przerwy.

Jest to zwykle używane do automatycznej korekty typowych literówek (np. Zmiana „teh” na „the”), ale może być równie przydatne w przypadku użycia, ponownie zakładając, że nie przeszkadza Ci wcześniejsze skonfigurowanie mapowań.

John O'M.
źródło
Wydaje mi się, że :set iskeyword+={,},,,(,),^działa zgodnie z oczekiwaniami.
Karl Yngve Lervåg
1
Rzeczywiście tak jest. Kiedy wypróbowałem to ostatnim razem, Vim powtarzał mi, że to błąd składniowy. To musiało być gdzieś indziej. Aktualizacja mojej odpowiedzi.
John O'M.
@ JohnO'M. czy mógłbyś dodać odniesienie do tego, w jaki abbreviatesposób lepiej nadaje się do tej pracy?
Gonçalo Ribeiro,
@ GonçaloRibeiro gotowe. Mam nadzieję, że to pomoże.
John O'M.