2010-08-13 13 views
20

W naszej bazie kodu C++ przechowujemy 99 wierszy kolumn, ale 79-cio-dziwne komentarze multilinowe. Czy istnieje dobra strategia, aby zrobić to automagicznie? Zakładam, że tryby są już znane z powodu inteligentnego łączenia linii komentarza i wprowadzania * wstawiania.Vim inny tekst dla wielowierszowych komentarzy C?

+0

Możesz ustawić niestandardowe 'formatexpr' lub' formatprg', jednak będzie to wymagało napisania wtyczki vim lub zewnętrznego programu formatującego, zobacz pomoc w celu uzyskania szczegółowych informacji. Nie znam żadnych wtyczek, które zrobią to za Ciebie, ale nie jestem pewien, że nie istnieją. – ZyX

+0

Czy możesz napisać przykładowy kod lub podać link do kodu, który chcesz sformatować? Bez obietnic, ale być może uda mi się napisać prosty program do formatowania. –

+0

@molecules: Nie szukam programu do formatowania, po prostu coś, co automatycznie rozpoznaje moją szerokość tekstu wynosi 79 zamiast zwykłej 99, gdy piszę w komentarzu wielowierszowym. – cdleary

Odpowiedz

15

Podobno zarówno kod, jak i komentarze korzystają z tej samej opcji textwidth. O ile widzę, jedyną sztuką jest aby ustawić tę opcję Dynamicznie

:autocmd CursorMoved,CursorMovedI * :if match(getline(.), '^\s*\*') == 0 | :setlocal textwidth=79 | :else | :setlocal textwidth=99 | :endif 

Tutaj kluczowym elementem jest wykrywanie, kiedy jesteśmy w komentarzu. Jeśli tylko format Komentarze ten sposób:

/* 
* my comment 
*/ 

mój regex powinien pracować ... chyba że masz linie w kodzie począwszy * (co chyba może się zdarzyć w C, rzadziej w C++). Jeśli używasz komentarzy takich jak to:

// comment line 1 
// comment line 2 

regex jest jeszcze łatwiejszy do napisania. Jeśli chcesz omówić wszystkie możliwe sytuacje, w tym przypadki narożne, dobrze ... Myślę, że najlepszą rzeczą byłoby zdefiniowanie oddzielnej funkcji wykrywania i wywołanie jej z poziomu :autocmd zamiast match().

+0

+1, chciałbym opublikować podobną propozycję, ale byłoby to identyczne z tym. – progo

+0

Jaki ma to wpływ na wydajność? Jeśli mam SSHed na serwerze, może to znacznie zwiększyć opóźnienie? –

+0

To nie będzie @Kazark, cała logika jest wykonywana wewnątrz Vima (tj. Po stronie serwera). Powiedziawszy to, wpłynie to na wydajność w taki sam sposób, w jaki ma to wpływ, jeśli używasz go lokalnie (tj. Nie przez SSH) –

1

Natrafiłem na ten sam problem i sądzę, że znalazłem odpowiednie rozwiązanie.

Co chciałem, aby moje komentarze zawijały się w słowa, więc gdy piszę, nie muszę się martwić formowaniem tekstu. Działa to dobrze z tekstem komentarza. Ale nie byłam zadowolona z tego, że mam format vima. Dlatego chciałem, aby vim podkreślał wszystko w kolorze czerwonym po kolumnie x.

Aby to zrobić z samym kodem cpp, należy dodać następujące polecenie do pliku ~/.vim/ftdetect/cpp.vim.

set textwidth=79 
match ErrorMsg '\%>99v.\+' 

Uwaga: Być może trzeba będzie utworzyć plik i foldery, jeśli nie istnieją.

Jeśli masz problemy z tym upewnij się, że masz formatoptions ustawić na:

formatoptions=croql 

widać to przez wykonanie: zestaw formatoptions wewnątrz vim.

+0

Przepraszam, ale nie - to jest to samo rozwiązanie, które dostałem na to pytanie, które zadałem: http://stackoverflow.com/questions/235439/ Podkreślenie śmieci w każdym miejscu jest o wiele mniej finezji, niż mam nadzieję! – cdleary

Powiązane problemy