Niedawno zadałem pytanie, w którym dowiedziałem się, że nie można przekazywać niczego oprócz parametrów do :set
modeli in vim. Rozumiem obawy związane z bezpieczeństwem, ale zastanawiam się, czy nie ma innego rozwiązania. Ostatnie pytanie na SO o ustawienie dużych partii parametrów zgodne ze standardem kodowania mnie do myślenia, że byłoby możliwe określenie „grupa” rzeczy w moim pliku rc, które mogą być włączone lub wyłączone z modeline?
Przepraszam, pseudo kod, ale czy istnieje sposób na utworzenie funkcji uruchamianej z ustawionego parametru?
set_function! codestyle()
if &1 == 'psr-2'
set ts=4
set sw=4
endfi
if &1 == 'drupal7'
set ts=2
set sw=2
iab D8 Drupal 8
endif
endset_function
Może to być następnie uruchomione przez modeline, taką jak
# vim: codestyle=psr-2
W pewnym sensie byłoby to podobne do dopasowywania typu pliku, ale zezwalało na ręczne zastępowanie. Skonfigurowałby również środowisko na inne wstępnie zdefiniowane sposoby, unikając problemów bezpieczeństwa związanych z uruchamianiem pliku w vimie przez inne arbitralne polecenia, ale umożliwiając bardziej dostosowane środowisko. Czy jest na to sposób?
set
; AFAIK, nie jest to możliwe w Vimie ...Odpowiedzi:
Masz kilka możliwości.
Po pierwsze: możesz napisać własny modelowy dekoder, tj. Wtyczkę. To bardzo podobna odpowiedź do tej, którą udzieliłem na twoje drugie pytanie.
Rzeczywiście, nie możemy dodawać nowych opcji vima (które można ustawić za pomocą
:set
), ale możemy dodawać nowe zmienne. I nie możemy używać standardowych modeline do więcej niż ustawiania opcji vima.Druga możliwość: let-modeline może być wykorzystany poprzez funkcję zwrotną do wywołania jednej lub innej funkcji. Możesz mieć swoją
CodeStyle()
funkcję we.vimrc
wtyczce lub wtyczce (autoload?), A następnie mieć pliki zawierające:Ale jeśli twoja potrzeba jest taka precyzyjna i jeśli naprawdę nie chcesz wtyczek takich jak local_vimrc , to napisz własny modelowy dekoder.
Trzeci i IMO, lepszym rozwiązaniem w tym przypadku byłoby zdefiniować nowy typ pliku oraz zestaw
'ft'
do tego typu pliku w Modelines z:# vim: set ft=php.psr2
. Zphp
bycia globalną zwykły typ pliku (Nie jestem pewien o tym), ipsr2
jest wyspecjalizowanym filetype że będziemy odpowiadać swoimi stylami kodowania. Będziesz musiał zdefiniować dwa ftplugins: ftplugin / psr2.vim i ftplugin / drupal7.vim, do których będziesz dzwonić:setlocal
(i nie:set
).źródło