Jest projekt programistyczny, nad którym pracuję, gdzie wszyscy inni używają tabsize 4, więc uważam to za najprostsze set tabstop=4
w moim ~/.vimrc
. Wolałbym jednak, aby nie miało to wpływu na każdy plik, który edytuję - tylko te dla tego projektu - powiedzmy każdy plik w określonym katalogu (i jego podkatalogach).
Czy istnieje sposób, w jaki mogę łatwo warunkowo ustawić zmienne na podstawie prefiksu katalogu w pliku?
Odpowiedzi:
Centralna konfiguracja
Jeśli centralne skonfigurowanie lokalnych wyjątków jest w porządku, możesz umieścić takie autocmds w
~/.vimrc
:Z drugiej strony, jeśli chcesz, aby konkretna konfiguracja była przechowywana w projekcie (i nie chcesz osadzać jej we wszystkich plikach za pomocą modelin ), masz dwie następujące opcje:
Lokalna konfiguracja z wbudowanymi funkcjami
Jeśli zawsze uruchamiasz Vima z katalogu głównego projektu, wbudowane
umożliwia odczyt
.vimrc
pliku z bieżącego katalogu. Możesz tam umieścić:set ts=4 sw=4
polecenia.Lokalna konfiguracja poprzez wtyczkę
W przeciwnym razie potrzebujesz pomocy wtyczki; jest ich kilka na vim.org; Mogę polecić wtyczkę localrc , która pozwala nawet na konfigurację specyficzną dla lokalnego typu pliku.
Pamiętaj, że odczyt konfiguracji z systemu plików ma wpływ na bezpieczeństwo; możesz chcieć
:set secure
.źródło
autocmd
niedziałającą metodą, upewnij się, że nie masz żadnych dowiązań symbolicznych na swojej ścieżce - musiałem podać pełną ścieżkę bez żadnych dowiązań symbolicznych, zanim zadziała dla mnie (w OS X 10.9)Możesz skonfigurować vima do odczytywania kolejnych poleceń za pomocą polecenia
source
(so). Dodaj to do swojego~/.vimrc
- przeszukuje bieżący katalog, a jeśli nie znaleziono pliku .vimrc_proj, szuka .vimrc_proj w katalogu nadrzędnym.Następnie dodaj dowolne niestandardowe polecenia w
.vimrc_proj
plikach konfiguracyjnych do swoich projektów.źródło
Możesz użyć wtyczki dla Vima, aby rozwiązać problem w bardziej ogólny sposób, próbując wykryć wcięcie.
Dla mnie wtyczką jest DetectIndent . Zajęło mi trochę czasu przetestowanie wszystkich rozwidleń wtyczki, aby znaleźć taki, który odpowiada moim potrzebom. Oryginalny był bardzo blisko, ale nie całkiem, więc zrobiłem własny widelec .
Do debugowania bardzo pomocne jest
:set verbose=1
ponowne uruchomienie wtyczki:DetectIndent
źródło
Jednym z możliwych rozwiązań, o którym jeszcze nie wspomniano, jest przejście o jeden poziom wyżej i zaimplementowanie skryptów powłoki specyficznych dla projektu, aby uruchomić środowisko vim.
Umożliwia to przekazywanie ustawień specyficznych dla vima przy użyciu opcji
-S
wiersza poleceń. Zaletą jest to, że pozwala również konfigurować inne aspekty środowiska, takie jak ustawienia terminala lub cscope.Na przykład, powiedzmy, że mam projekt C ++
foo
, dla którego chcę załadować ustawienia pliku vim~/.vim/projects/foo.vim
. Chcę również skonfigurować indeks cscope i uruchomić okno terminala, jeśli polecenie zostanie wywołane z jakiegoś narzędzia szybkiego uruchamiania lub skrótu na pulpicie. Aby otworzyć moje środowisko, mam następujący skrypt o nazwievim-foo
:źródło