Co należy zrobić, aby utworzyć wtyczkę vim?

12

Więc moje pytanie jest proste. Czy dobrym pomysłem jest nauczenie się skryptów vim tylko po to, aby tworzyć vim, czy też powinniśmy zastosować w tym celu inne, bardziej akceptowane języki.

Na przykład ten link otwiera filmy z YouTube, które pokazują, jak używać Pythona do tworzenia wtyczek vim.

Skrypty Vima nie są w pełni przydatne, chyba że zamierza się utworzyć niektóre wtyczki Vima. Czy jest więc jakaś konkretna rzecz, której nie można zrobić, chyba że używa się tylko skryptów vim?

Mayukh Sarkar
źródło
2
Zauważ, że wiele osób używa vimscript do (bardzo dokładnego) konfigurowania swojego Vima, bez tworzenia ani dystrybucji żadnych wtyczek.
VanLaser,

Odpowiedzi:

12

Moje wtyczki mają 99% w VimL. Powodem jest to, że VimL jest dostępny tam, gdzie jest zainstalowany. Jest znacznie bardziej skomplikowany w przypadku innych języków - na przykład rzadko kiedy Python jest zainstalowany na oknach, w których używam Vima.

Oczywiście VimL jest kłopotliwy, brakuje wielu fajnych funkcji, ale przynajmniej łatwiej jest mieć coś przenośnego.

1% nie ma w VimL, ​​gdy muszę wchodzić w interakcje z zewnętrznym interfejsem API, który oferuje powiązania w języku Python.

BTW, prawie wszystko, czego nauczysz się o VimL, ​​może być używane interaktywnie, gdy grasz za pomocą poleceń takich jak :substitute. Większość mapowań lub makr również nie potrzebuje Pythona.

Luc Hermitte
źródło
1
Właściwie nie uważam VimL za uciążliwy. Oczywiście zgadzam się, że nie ma fajnych funkcji i funkcjonalności języków wyższego poziomu, takich jak python, ale po dłuższej pracy z VimLem bardzo mi się podoba. Myślę, że reputacja VimL jest gorsza niż to konieczne.
Karl Yngve Lervåg
Dobrze. Muszę przyznać, że poczyniono wiele postępów od czasu vim5.x (kiedy zacząłem go używać). Ale wciąż są przypadki narożne, w których musimy robić skomplikowane rzeczy. Zobacz na przykład, map()że oczekuje ciągów lub (niepowiązanych) :map. Często muszę bawić się
analizą
Pisanie wtyczek vim w innym języku nie zwalnia Cię od nauki VimL, ​​ponieważ powiązania z python / ruby ​​/ etc. są dość ograniczone i i tak nieuchronnie execkończysz tworzenie fragmentów VimL. Pozwala napisać podstawową logikę w języku, w którym możesz być w stanie pracować o wiele bardziej wydajnie, ale nadal musisz nauczyć się VimL.
hobbs
12

Jeśli zamierzasz pisać wtyczki, zdecydowanie powinieneś przeczytać miły artykuł „Pisanie wtyczek Vima” Steve'a Losha ; nie tylko przy podejmowaniu decyzji, czy pozostaniesz przy VimL, ​​czy nie, ale po porady dotyczące najlepszych praktyk.

Zawiera także krótką dyskusję na temat skryptowania Vima w innych językach :

Po pierwsze, użycie innego języka będzie wymagało od użytkowników wtyczki korzystania z wersji Vima skompilowanej z obsługą tej wersji. W dzisiejszych czasach zwykle nie stanowi to problemu, ale jeśli chcesz, aby wtyczka działała wszędzie, nie jest to możliwe.

Używanie innego języka zwiększa koszty. Musisz nauczyć się nie tylko Vimscript, ale także interfejsu między Vimem a językiem. W przypadku małych wtyczek może to zwiększyć złożoność projektu, niż oszczędza, ale w przypadku większych wtyczek może się zwrócić. Od Ciebie zależy, czy warto.

Wreszcie, użycie innego języka nie całkowicie izoluje cię od dziwactw Vimscript. Nadal musisz nauczyć się, jak robić większość rzeczy w Vimscript - używanie innego języka pozwala po prostu zawinąć większość tego w bardziej uporządkowany sposób niż w innym przypadku.

Moje doświadczenie jest takie, że nawet gdy wtyczka inna niż VimL jest lepsza, ostatecznie przełączam się na czystą alternatywę VimL, ​​głównie ze względu na przenośność. Vim działa na praktycznie każdym systemie (nawet brzydkich i starych starszych systemach), a narzut związany z konfigurowaniem zależności lub tymczasowym wyłączaniem tej wtyczki nie jest wart (szczególnie jeśli ciągle zapominasz, że ją wyłączyłeś i próbujesz używać jej mapowań / poleceń) .

Nawet jeśli łatwiej jest skonfigurować zależności, możesz napotkać pewne problemy (np .: niektóre wtyczki oparte na Pythonie nie działają w 100%, gdy pochodzą z folderów współdzielonych na maszynach wirtualnych). Dlatego kilka wtyczek, które napisałem, używa tylko VimL.

mMontu
źródło