2009-09-10 25 views
14

Moja codzienna praca polega na kodowaniu za pomocą Perla. W domu gram z Pythonem i Erlangiem. W przypadku Perla, chcę wcięć mój kod z dwoma odstępami. O ile dla Pythona standardem jest 4. Mam również kilka kluczy do otwierania deklaracji funkcji, które chciałbym używać ze wszystkimi językami programowania. Jak można to osiągnąć w gVim?gVim i wiele języków programowania

W jaki sposób można zachować plik konfiguracyjny dla każdego języka programowania lub coś w tym rodzaju?

Odpowiedz

22

Powinieneś być w stanie zrobić z typów plików ... wykorzystując na przykład dodać do swojej vimrc (i zmodyfikować odpowiednio do różnych językach):

autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab 
+20

Nie zastępuj ustawień domyślnych. Użyj "setlocal" (lub "setl") zamiast "set". Nie chcesz, aby ustawienia ostatniego autocmd działały na inne bufory. –

+0

@Maxim - Good catch ... :-) –

+2

Komenda 'set' akceptuje wiele opcji. Łatwiej jest napisać: 'set tabstop = 4 shiftwidth = 4 expandtab'' –

23

w $ HOME zrobić .vim/katalog (lub vimfiles/Windows), w nim tworzy się katalog ftplugin /, aw nim pliki o nazwach "perl.vim" lub "python.vim" lub "html.vim" lub ...

Powinny być ładowane automatycznie po otwarciu/utworzeniu nowego pliku danego typu pliku, o ile nie zapomnisz dodać :filetype plugin on do swojego .vimrc (lub _vimrc pod Windowsem)

Następnie opcje vim należy zdefiniować za pomocą :setlocal (a nie :set, w przeciwnym razie ich definicja zastąpi domyślne ustawienie globalne).

Mapowania definiowane są za pomocą :n/i/v(nore)map <buffer>, a także skróty. Polecenia są definiowane za pomocą opcji -b. Menu nie mogą być lokalne bez pomocy wtyczki.

local, <buffer> i -b są ważne, aby zapobiegać efektom ubocznym.

+0

Jeśli jesteś w systemie Windows, zobacz ": help dos-location". –

+0

+1 Nie wiedziałem, że można zdefiniować komendy dla pojedynczego bufora! –

3

Oto jak to zrobić. Poniżej znajduje się fragment mojego .vimrc i utrzymuję dalsze konfiguracje dla każdego języka i ładuję je po załadowaniu nowego bufora.

" HTML 
autocmd BufNewFile,BufRead *.html,*.htm,*.xhtml source ~/.vimhtml 
" XML 
autocmd BufNewFile,BufRead *.xml,*.xmi source ~/.vimxml 
" Perl 
autocmd BufNewFile,BufRead *.pl,*.pm source ~/.vimperl 

Należy pamiętać, że chociaż źródło pliku, mogę wykonać dowolne polecenie VIM lub wywołać funkcję. na przykład na załadowanie nowego pliku Java zrobić to:

autocmd BufNewFile *.java call GeneratePackage() 

gdzie GeneratePackage() jest funkcją VIM.

+0

autocmd FileType ... jest lepszy, ponieważ oddziela się wykrywanie typu pliku (za pomocą BufNewFile) od działań wykonywanych dla tego typu plików. – joeforker

7

Oprócz odpowiedzi rangerchris, możesz rozważyć użycie modelines. Modelines powiedzieć edytora Jak skonfigurować sobie:

#!/usr/bin/perl 
# vi: ts=4 sw=4 ht=4 et textwidth=76 : 

use strict; 
use warnings; 

print "hello world\n"; 

To modeline mówi vi użyć 4 kart postaci i autoindents, aby używać spacji zamiast zakładek i że powinien wstawić znak nowej linii, kiedy kursor dojdzie do 76 znaków.

można sterować jak Vim czyta ModeLine'y z dwoma zmiennymi (najprawdopodobniej określonych w .vimrc):

set modeline 
set modelines=5 

Zmienna modeline mówi Vima szukać Modelines jeśli jest on ustawiony. Zmienna modelines mówi Vimowi, ile linii od góry i dołu skanuje poszukiwanie modeliny (w tym przypadku znajdzie modeline, jeśli jest w pierwszej lub w ostatnich pięciu liniach pliku).

Tak jak każdy system, który pobiera instrukcje z niezaufanych źródeł, modeliny mogą być security threat, więc użytkownik root nigdy nie powinien używać modelines i powinieneś zachować kopię Vima na bieżąco.

Prawdziwą korzyścią dla modelines jest to, że są one w pliku. Większość osób z Perl ma cztery spacje jako osoby z wcięciem, ale ja mam ośmiu postaci. Podczas pracy z kodami innych osób używam modeliny, która odzwierciedla ich użycie. Resztę czasu używam własnego.

Powiązane problemy